diff --git a/af24cb7d0fe507aaacf6.worker.js b/ad404bc1f12303f5575d.worker.js similarity index 99% rename from af24cb7d0fe507aaacf6.worker.js rename to ad404bc1f12303f5575d.worker.js index 69ed449..18e5685 100644 --- a/af24cb7d0fe507aaacf6.worker.js +++ b/ad404bc1f12303f5575d.worker.js @@ -1,2 +1,2 @@ -!function(n){var t={};function e(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return n[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}e.m=n,e.c=t,e.d=function(n,t,r){e.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:r})},e.r=function(n){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.t=function(n,t){if(1&t&&(n=e(n)),8&t)return n;if(4&t&&"object"===typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var i in n)e.d(r,i,function(t){return n[t]}.bind(null,i));return r},e.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(t,"a",t),t},e.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},e.p="/diabloweb/",e(e.s=35)}([function(n,t,e){"use strict";var r=e(5),i=e(20),o=Object.prototype.toString;function a(n){return"[object Array]"===o.call(n)}function u(n){return null!==n&&"object"===typeof n}function s(n){return"[object Function]"===o.call(n)}function c(n,t){if(null!==n&&"undefined"!==typeof n)if("object"!==typeof n&&(n=[n]),a(n))for(var e=0,r=n.length;e1)for(var e=1;e=0;r--){var i=n[r];"."===i?n.splice(r,1):".."===i?(n.splice(r,1),e++):e&&(n.splice(r,1),e--)}if(t)for(;e--;e)n.unshift("..");return n}function r(n,t){if(n.filter)return n.filter(t);for(var e=[],r=0;r=-1&&!i;o--){var a=o>=0?arguments[o]:n.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return(i?"/":"")+(t=e(r(t.split("/"),function(n){return!!n}),!i).join("/"))||"."},t.normalize=function(n){var o=t.isAbsolute(n),a="/"===i(n,-1);return(n=e(r(n.split("/"),function(n){return!!n}),!o).join("/"))||o||(n="."),n&&a&&(n+="/"),(o?"/":"")+n},t.isAbsolute=function(n){return"/"===n.charAt(0)},t.join=function(){var n=Array.prototype.slice.call(arguments,0);return t.normalize(r(n,function(n,t){if("string"!==typeof n)throw new TypeError("Arguments to path.join must be strings");return n}).join("/"))},t.relative=function(n,e){function r(n){for(var t=0;t=0&&""===n[e];e--);return t>e?[]:n.slice(t,e-t+1)}n=t.resolve(n).substr(1),e=t.resolve(e).substr(1);for(var i=r(n.split("/")),o=r(e.split("/")),a=Math.min(i.length,o.length),u=a,s=0;s=1;--o)if(47===(t=n.charCodeAt(o))){if(!i){r=o;break}}else i=!1;return-1===r?e?"/":".":e&&1===r?"/":n.slice(0,r)},t.basename=function(n,t){var e=function(n){"string"!==typeof n&&(n+="");var t,e=0,r=-1,i=!0;for(t=n.length-1;t>=0;--t)if(47===n.charCodeAt(t)){if(!i){e=t+1;break}}else-1===r&&(i=!1,r=t+1);return-1===r?"":n.slice(e,r)}(n);return t&&e.substr(-1*t.length)===t&&(e=e.substr(0,e.length-t.length)),e},t.extname=function(n){"string"!==typeof n&&(n+="");for(var t=-1,e=0,r=-1,i=!0,o=0,a=n.length-1;a>=0;--a){var u=n.charCodeAt(a);if(47!==u)-1===r&&(i=!1,r=a+1),46===u?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){e=a+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===e+1?"":n.slice(t,r)};var i="b"==="ab".substr(-1)?function(n,t,e){return n.substr(t,e)}:function(n,t,e){return t<0&&(t=n.length+t),n.substr(t,e)}}).call(this,e(2))},function(n,t,e){"use strict";n.exports=function(n,t){return function(){for(var e=new Array(arguments.length),r=0;r=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],function(n){u.headers[n]={}}),r.forEach(["post","put","patch"],function(n){u.headers[n]=r.merge(o)}),n.exports=u}).call(this,e(2))},function(n,t,e){"use strict";var r=e(0),i=e(26),o=e(6),a=e(28),u=e(29),s=e(10);n.exports=function(n){return new Promise(function(t,c){var l=n.data,_=n.headers;r.isFormData(l)&&delete _["Content-Type"];var f=new XMLHttpRequest;if(n.auth){var p=n.auth.username||"",d=n.auth.password||"";_.Authorization="Basic "+btoa(p+":"+d)}if(f.open(n.method.toUpperCase(),o(n.url,n.params,n.paramsSerializer),!0),f.timeout=n.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var e="getAllResponseHeaders"in f?a(f.getAllResponseHeaders()):null,r={data:n.responseType&&"text"!==n.responseType?f.response:f.responseText,status:f.status,statusText:f.statusText,headers:e,config:n,request:f};i(t,c,r),f=null}},f.onabort=function(){f&&(c(s("Request aborted",n,"ECONNABORTED",f)),f=null)},f.onerror=function(){c(s("Network Error",n,null,f)),f=null},f.ontimeout=function(){c(s("timeout of "+n.timeout+"ms exceeded",n,"ECONNABORTED",f)),f=null},r.isStandardBrowserEnv()){var m=e(30),y=(n.withCredentials||u(n.url))&&n.xsrfCookieName?m.read(n.xsrfCookieName):void 0;y&&(_[n.xsrfHeaderName]=y)}if("setRequestHeader"in f&&r.forEach(_,function(n,t){"undefined"===typeof l&&"content-type"===t.toLowerCase()?delete _[t]:f.setRequestHeader(t,n)}),n.withCredentials&&(f.withCredentials=!0),n.responseType)try{f.responseType=n.responseType}catch(h){if("json"!==n.responseType)throw h}"function"===typeof n.onDownloadProgress&&f.addEventListener("progress",n.onDownloadProgress),"function"===typeof n.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",n.onUploadProgress),n.cancelToken&&n.cancelToken.promise.then(function(n){f&&(f.abort(),c(n),f=null)}),void 0===l&&(l=null),f.send(l)})}},function(n,t,e){"use strict";var r=e(27);n.exports=function(n,t,e,i,o){var a=new Error(n);return r(a,t,e,i,o)}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t){t=t||{};var e={};return r.forEach(["url","method","params","data"],function(n){"undefined"!==typeof t[n]&&(e[n]=t[n])}),r.forEach(["headers","auth","proxy"],function(i){r.isObject(t[i])?e[i]=r.deepMerge(n[i],t[i]):"undefined"!==typeof t[i]?e[i]=t[i]:r.isObject(n[i])?e[i]=r.deepMerge(n[i]):"undefined"!==typeof n[i]&&(e[i]=n[i])}),r.forEach(["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"],function(r){"undefined"!==typeof t[r]?e[r]=t[r]:"undefined"!==typeof n[r]&&(e[r]=n[r])}),e}},function(n,t,e){"use strict";function r(n){this.message=n}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,n.exports=r},function(n,t,e){n.exports=e.p+"static/media/Diablo.570bd59a.wasm"},function(n,t,e){(function(t,r){var i=function(){var n="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;return function(i){var o,a="undefined"!==typeof(i=i||{})?i:{},u={};for(o in a)a.hasOwnProperty(o)&&(u[o]=a[o]);a.arguments=[],a.thisProgram="./this.program",a.quit=function(n,t){throw t},a.preRun=[],a.postRun=[];var s,c,l=!1,_=!1;l="object"===typeof window,_="function"===typeof importScripts,s="object"===typeof t&&"object"===typeof t.versions&&"string"===typeof t.versions.node&&!l&&!_,c=!l&&!s&&!_;var f,p,d,m,y="";s?(y=r+"/",f=function(n,t){var r;return d||(d=e(3)),m||(m=e(4)),n=m.normalize(n),r=d.readFileSync(n),t?r:r.toString()},p=function(n){var t=f(n,!0);return t.buffer||(t=new Uint8Array(t)),j(t.buffer),t},t.argv.length>1&&(a.thisProgram=t.argv[1].replace(/\\/g,"/")),a.arguments=t.argv.slice(2),t.on("uncaughtException",function(n){if(!(n instanceof Un))throw n}),t.on("unhandledRejection",Bn),a.quit=function(n){t.exit(n)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(f=function(n){return read(n)}),p=function(n){var t;return"function"===typeof readbuffer?new Uint8Array(readbuffer(n)):(j("object"===typeof(t=read(n,"binary"))),t)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(n){quit(n)})):(l||_)&&(_?y=self.location.href:document.currentScript&&(y=document.currentScript.src),n&&(y=n),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",f=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.send(null),t.responseText},_&&(p=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(n,t,e){var r=new XMLHttpRequest;r.open("GET",n,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):e()},r.onerror=e,r.send(null)});var h=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),v=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||h);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var g={"f64-rem":function(n,t){return n%t},debugger:function(){}};new Array(0);var b,w=0,x=function(n){w=n};"object"!==typeof WebAssembly&&v("no native wasm support detected");var A=!1;function j(n,t){n||Bn("Assertion failed: "+t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(n,t,e){for(var r=t+e,i=t;n[i]&&!(i>=r);)++i;if(i-t>16&&n.subarray&&C)return C.decode(n.subarray(t,i));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}function k(n,t){return n?S(T,n,t):""}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var E,R,T,D,M;function L(n,t){return n%t>0&&(n+=t-n%t),n}function O(){a.HEAP8=R=new Int8Array(E),a.HEAP16=new Int16Array(E),a.HEAP32=D=new Int32Array(E),a.HEAPU8=T=new Uint8Array(E),a.HEAPU16=new Uint16Array(E),a.HEAPU32=new Uint32Array(E),a.HEAPF32=M=new Float32Array(E),a.HEAPF64=new Float64Array(E)}var P=1875712,I=a.TOTAL_MEMORY||134217728;function N(n){for(;n.length>0;){var t=n.shift();if("function"!=typeof t){var e=t.func;"number"===typeof e?void 0===t.arg?a.dynCall_v(e):a.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}I<5242880&&v("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+I+"! (TOTAL_STACK=5242880)"),(b=a.wasmMemory?a.wasmMemory:new WebAssembly.Memory({initial:I/65536}))&&(E=b.buffer),I=E.byteLength,O(),D[P>>2]=7118624;var F=[],U=[],q=[],B=[];function W(n){B.unshift(n)}Math.abs,Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil,Math.floor,Math.pow,Math.imul,Math.fround,Math.round,Math.min,Math.max,Math.clz32,Math.trunc;var H=0,z=null,G=null;a.preloadedImages={},a.preloadedAudios={};var X="data:application/octet-stream;base64,";function K(n){return String.prototype.startsWith?n.startsWith(X):0===n.indexOf(X)}var Y,Z="Diablo.wasm";function J(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(p)return p(Z);throw"both async and sync fetching of the wasm failed"}catch(v){Bn(v)}}function V(n){var t={env:n,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:g};function e(n,t){var e=n.exports;a.asm=e,function(n){if(H--,a.monitorRunDependencies&&a.monitorRunDependencies(H),0==H&&(null!==z&&(clearInterval(z),z=null),G)){var t=G;G=null,t()}}()}function r(n){e(n.instance)}function i(n){return(a.wasmBinary||!l&&!_||"function"!==typeof fetch?new Promise(function(n,t){n(J())}):fetch(Z,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw"failed to load wasm binary file at '"+Z+"'";return n.arrayBuffer()}).catch(function(){return J()})).then(function(n){return WebAssembly.instantiate(n,t)}).then(n,function(n){v("failed to asynchronously prepare wasm: "+n),Bn(n)})}if(H++,a.monitorRunDependencies&&a.monitorRunDependencies(H),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(o){return v("Module.instantiateWasm callback failed with error: "+o),!1}return function(){if(a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||K(Z)||"function"!==typeof fetch)return i(r);fetch(Z,{credentials:"same-origin"}).then(function(n){return WebAssembly.instantiateStreaming(n,t).then(r,function(n){v("wasm streaming compile failed: "+n),v("falling back to ArrayBuffer instantiation"),i(r)})})}(),{}}K(Z)||(Y=Z,Z=a.locateFile?a.locateFile(Y,y):y+Y),a.asm=function(n,t,e){return t.memory=b,t.table=new WebAssembly.Table({initial:1116,maximum:1116,element:"anyfunc"}),t.__memory_base=1024,t.__table_base=0,V(t)};var $=[function(n){self.DApi.current_save_id(n)}];U.push({func:function(){bn()}});var Q=1875728;var nn={},tn=[];function en(n){n&&nn[n].refcount++}function rn(n){if(!n||nn[n])return n;for(var t in nn)for(var e=+t,r=nn[e].adjusted,i=r.length,o=0;o>2],t.adjusted.push(n),0|(x(r[i]),n);return n=D[n>>2],0|(x(e),n)}a.___cxa_find_matching_catch=sn;var cn={buffers:[null,[],[]],printChar:function(n,t){var e=cn.buffers[n];0===t||10===t?((1===n?h:v)(S(e,0)),e.length=0):e.push(t)},varargs:0,get:function(n){return cn.varargs+=4,D[cn.varargs-4>>2]},getStr:function(){return k(cn.get())},get64:function(){var n=cn.get();cn.get();return n},getZero:function(){cn.get()}};function ln(){return R.length}function _n(n){n=L(n,65536);var t=E.byteLength;try{return-1!==b.grow((n-t)/65536)&&(E=b.buffer,!0)}catch(e){return!1}}var fn={abort:Bn,setTempRet0:x,getTempRet0:function(){return w},invoke_i:function(n){var t=xn();try{return An(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_ii:function(n,t){var e=xn();try{return jn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_iii:function(n,t,e){var r=xn();try{return Cn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_iiii:function(n,t,e,r){var i=xn();try{return Sn(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_iiiii:function(n,t,e,r,i){var o=xn();try{return kn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_iiiiii:function(n,t,e,r,i,o){var a=xn();try{return En(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_ji:function(n,t){var e=xn();try{return Rn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_v:function(n){var t=xn();try{Tn(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_vi:function(n,t){var e=xn();try{Dn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_vii:function(n,t,e){var r=xn();try{Mn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_viii:function(n,t,e,r){var i=xn();try{Ln(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_viiii:function(n,t,e,r,i){var o=xn();try{On(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viiiii:function(n,t,e,r,i,o){var a=xn();try{Pn(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_viiiiiii:function(n,t,e,r,i,o,a,u){var s=xn();try{In(n,t,e,r,i,o,a,u)}catch(c){if(wn(s),c!==c+0&&"longjmp"!==c)throw c;gn(1,0)}},invoke_viij:function(n,t,e,r,i){var o=xn();try{Nn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viji:function(n,t,e,r,i){var o=xn();try{Fn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},___assert_fail:function(n,t,e,r){Bn("Assertion failed: "+k(n)+", at: "+[t?k(t):"unknown filename",e,r?k(r):"unknown function"])},___cxa_allocate_exception:function(n){return vn(n)},___cxa_begin_catch:function(n){var t=nn[n];return t&&!t.caught&&(t.caught=!0,dn.uncaught_exceptions--),t&&(t.rethrown=!1),tn.push(n),en(rn(n)),n},___cxa_end_catch:function(){gn(0);var n=tn.pop();n&&(un(rn(n)),on=0)},___cxa_find_matching_catch:sn,___cxa_find_matching_catch_2:function(n,t){return sn(n,t)},___cxa_find_matching_catch_3:function(n,t,e){return sn(n,t,e)},___cxa_free_exception:an,___cxa_get_exception_ptr:function(n){return n},___cxa_pure_virtual:function(){throw A=!0,"Pure virtual function called!"},___cxa_throw:function(n,t,e){throw nn[n]={ptr:n,adjusted:[n],type:t,destructor:e,refcount:0,caught:!1,rethrown:!1},on=n,"uncaught_exception"in dn?dn.uncaught_exceptions++:dn.uncaught_exceptions=1,n},___cxa_uncaught_exceptions:function(){return dn.uncaught_exceptions},___exception_addRef:en,___exception_deAdjust:rn,___exception_decRef:un,___gxx_personality_v0:function(){},___lock:function(){},___resumeException:function(n){throw on||(on=n),n},___setErrNo:function(n){return a.___errno_location&&(D[a.___errno_location()>>2]=n),n},___syscall140:function(n,t){cn.varargs=t;try{return cn.getStreamFromFD(),cn.get(),cn.get(),cn.get(),cn.get(),0}catch(e){return"undefined"!==typeof FS&&e instanceof FS.ErrnoError||Bn(e),-e.errno}},___syscall146:function(n,t){cn.varargs=t;try{for(var e=cn.get(),r=cn.get(),i=cn.get(),o=0,a=0;a>2],s=D[r+(8*a+4)>>2],c=0;c2147418112)return!1;for(var e=Math.max(t,16777216);e>2]=t),t},_trace_pop:function(){self.WASM_TRACE&&self.WASM_TRACE.pop()},_trace_push:function(n){var t=T.indexOf(0,n),e=String.fromCharCode.apply(null,T.subarray(n,t));console.log(e),self.WASM_TRACE=self.WASM_TRACE||[],self.WASM_TRACE.push(e)},abortOnCannotGrowMemory:function(n){Bn("OOM")},emscripten_realloc_buffer:_n,flush_NO_FILESYSTEM:function(){var n=a._fflush;n&&n(0);var t=cn.buffers;t[1].length&&cn.printChar(1,10),t[2].length&&cn.printChar(2,10)},tempDoublePtr:Q,DYNAMICTOP_PTR:P},pn=a.asm({},fn,E);a.asm=pn;a._DApi_AllocPacket=function(){return a.asm._DApi_AllocPacket.apply(null,arguments)},a._DApi_Char=function(){return a.asm._DApi_Char.apply(null,arguments)},a._DApi_Init=function(){return a.asm._DApi_Init.apply(null,arguments)},a._DApi_Key=function(){return a.asm._DApi_Key.apply(null,arguments)},a._DApi_Mouse=function(){return a.asm._DApi_Mouse.apply(null,arguments)},a._DApi_Render=function(){return a.asm._DApi_Render.apply(null,arguments)},a._DApi_SyncText=function(){return a.asm._DApi_SyncText.apply(null,arguments)},a._DApi_SyncTextPtr=function(){return a.asm._DApi_SyncTextPtr.apply(null,arguments)},a._SNet_InitWebsocket=function(){return a.asm._SNet_InitWebsocket.apply(null,arguments)},a._SNet_WebsocketStatus=function(){return a.asm._SNet_WebsocketStatus.apply(null,arguments)};var dn=a.__ZSt18uncaught_exceptionv=function(){return a.asm.__ZSt18uncaught_exceptionv.apply(null,arguments)},mn=a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},yn=a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},hn=(a.___em_js___api_close_keyboard=function(){return a.asm.___em_js___api_close_keyboard.apply(null,arguments)},a.___em_js___api_open_keyboard=function(){return a.asm.___em_js___api_open_keyboard.apply(null,arguments)},a.___em_js__api_create_sound=function(){return a.asm.___em_js__api_create_sound.apply(null,arguments)},a.___em_js__api_create_sound_float=function(){return a.asm.___em_js__api_create_sound_float.apply(null,arguments)},a.___em_js__api_delete_sound=function(){return a.asm.___em_js__api_delete_sound.apply(null,arguments)},a.___em_js__api_draw_begin=function(){return a.asm.___em_js__api_draw_begin.apply(null,arguments)},a.___em_js__api_draw_belt=function(){return a.asm.___em_js__api_draw_belt.apply(null,arguments)},a.___em_js__api_draw_blit=function(){return a.asm.___em_js__api_draw_blit.apply(null,arguments)},a.___em_js__api_draw_clip_text=function(){return a.asm.___em_js__api_draw_clip_text.apply(null,arguments)},a.___em_js__api_draw_end=function(){return a.asm.___em_js__api_draw_end.apply(null,arguments)},a.___em_js__api_draw_text=function(){return a.asm.___em_js__api_draw_text.apply(null,arguments)},a.___em_js__api_duplicate_sound=function(){return a.asm.___em_js__api_duplicate_sound.apply(null,arguments)},a.___em_js__api_exit_game=function(){return a.asm.___em_js__api_exit_game.apply(null,arguments)},a.___em_js__api_play_sound=function(){return a.asm.___em_js__api_play_sound.apply(null,arguments)},a.___em_js__api_set_cursor=function(){return a.asm.___em_js__api_set_cursor.apply(null,arguments)},a.___em_js__api_set_volume=function(){return a.asm.___em_js__api_set_volume.apply(null,arguments)},a.___em_js__api_stop_sound=function(){return a.asm.___em_js__api_stop_sound.apply(null,arguments)},a.___em_js__api_use_websocket=function(){return a.asm.___em_js__api_use_websocket.apply(null,arguments)},a.___em_js__api_websocket_closed=function(){return a.asm.___em_js__api_websocket_closed.apply(null,arguments)},a.___em_js__api_websocket_send=function(){return a.asm.___em_js__api_websocket_send.apply(null,arguments)},a.___em_js__exit_error=function(){return a.asm.___em_js__exit_error.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__get_file_size=function(){return a.asm.___em_js__get_file_size.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__remove_file=function(){return a.asm.___em_js__remove_file.apply(null,arguments)},a.___em_js__show_alert=function(){return a.asm.___em_js__show_alert.apply(null,arguments)},a.___em_js__trace_pop=function(){return a.asm.___em_js__trace_pop.apply(null,arguments)},a.___em_js__trace_push=function(){return a.asm.___em_js__trace_push.apply(null,arguments)},a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},a._free=function(){return a.asm._free.apply(null,arguments)}),vn=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),gn=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memmove=function(){return a.asm._memmove.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a._setThrew=function(){return a.asm._setThrew.apply(null,arguments)}),bn=(a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.globalCtors=function(){return a.asm.globalCtors.apply(null,arguments)}),wn=(a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),xn=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)},An=a.dynCall_i=function(){return a.asm.dynCall_i.apply(null,arguments)},jn=a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},Cn=(a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)}),Sn=a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},kn=a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},En=a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},Rn=a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},Tn=(a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)}),Dn=a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},Mn=a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},Ln=a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},On=a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},Pn=a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},In=(a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viiiiiii=function(){return a.asm.dynCall_viiiiiii.apply(null,arguments)}),Nn=(a.dynCall_viiiiiiiii=function(){return a.asm.dynCall_viiiiiiiii.apply(null,arguments)},a.dynCall_viiiiiiiiii=function(){return a.asm.dynCall_viiiiiiiiii.apply(null,arguments)},a.dynCall_viij=function(){return a.asm.dynCall_viij.apply(null,arguments)}),Fn=a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function Un(n){this.name="ExitStatus",this.message="Program terminated with exit("+n+")",this.status=n}a.asm=pn,a.then=function(n){if(a.calledRun)n(a);else{var t=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){t&&t(),n(a)}}return a},Un.prototype=new Error,Un.prototype.constructor=Un;function qn(n){function t(){a.calledRun||(a.calledRun=!0,A||(!0,N(U),N(q),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)W(a.postRun.shift());N(B)}()))}n=n||a.arguments,H>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)n=a.preRun.shift(),F.unshift(n);var n;N(F)}(),H>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),t()},1)):t()))}G=function n(){a.calledRun||qn(),a.calledRun||(G=n)},a.run=qn;function Bn(n){throw a.onAbort&&a.onAbort(n),h(n+=""),v(n),A=!0,1,"abort("+n+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=Bn,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,qn(),a.ready=new Promise(function(n,t){delete a.then,a.onAbort=function(n){t(n)},W(function(){n(a)})}),i}}();n.exports=i}).call(this,e(2),"/")},function(n,t,e){n.exports=e.p+"static/media/DiabloSpawn.9c2373b2.wasm"},function(n,t,e){(function(t,r){var i=function(){var n="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;return function(i){var o,a="undefined"!==typeof(i=i||{})?i:{},u={};for(o in a)a.hasOwnProperty(o)&&(u[o]=a[o]);a.arguments=[],a.thisProgram="./this.program",a.quit=function(n,t){throw t},a.preRun=[],a.postRun=[];var s,c,l=!1,_=!1;l="object"===typeof window,_="function"===typeof importScripts,s="object"===typeof t&&"object"===typeof t.versions&&"string"===typeof t.versions.node&&!l&&!_,c=!l&&!s&&!_;var f,p,d,m,y="";s?(y=r+"/",f=function(n,t){var r;return d||(d=e(3)),m||(m=e(4)),n=m.normalize(n),r=d.readFileSync(n),t?r:r.toString()},p=function(n){var t=f(n,!0);return t.buffer||(t=new Uint8Array(t)),j(t.buffer),t},t.argv.length>1&&(a.thisProgram=t.argv[1].replace(/\\/g,"/")),a.arguments=t.argv.slice(2),t.on("uncaughtException",function(n){if(!(n instanceof Un))throw n}),t.on("unhandledRejection",Bn),a.quit=function(n){t.exit(n)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(f=function(n){return read(n)}),p=function(n){var t;return"function"===typeof readbuffer?new Uint8Array(readbuffer(n)):(j("object"===typeof(t=read(n,"binary"))),t)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(n){quit(n)})):(l||_)&&(_?y=self.location.href:document.currentScript&&(y=document.currentScript.src),n&&(y=n),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",f=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.send(null),t.responseText},_&&(p=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(n,t,e){var r=new XMLHttpRequest;r.open("GET",n,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):e()},r.onerror=e,r.send(null)});var h=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),v=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||h);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var g={"f64-rem":function(n,t){return n%t},debugger:function(){}};new Array(0);var b,w=0,x=function(n){w=n};"object"!==typeof WebAssembly&&v("no native wasm support detected");var A=!1;function j(n,t){n||Bn("Assertion failed: "+t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(n,t,e){for(var r=t+e,i=t;n[i]&&!(i>=r);)++i;if(i-t>16&&n.subarray&&C)return C.decode(n.subarray(t,i));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}function k(n,t){return n?S(T,n,t):""}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var E,R,T,D,M;function L(n,t){return n%t>0&&(n+=t-n%t),n}function O(){a.HEAP8=R=new Int8Array(E),a.HEAP16=new Int16Array(E),a.HEAP32=D=new Int32Array(E),a.HEAPU8=T=new Uint8Array(E),a.HEAPU16=new Uint16Array(E),a.HEAPU32=new Uint32Array(E),a.HEAPF32=M=new Float32Array(E),a.HEAPF64=new Float64Array(E)}var P=1850896,I=a.TOTAL_MEMORY||134217728;function N(n){for(;n.length>0;){var t=n.shift();if("function"!=typeof t){var e=t.func;"number"===typeof e?void 0===t.arg?a.dynCall_v(e):a.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}I<5242880&&v("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+I+"! (TOTAL_STACK=5242880)"),(b=a.wasmMemory?a.wasmMemory:new WebAssembly.Memory({initial:I/65536}))&&(E=b.buffer),I=E.byteLength,O(),D[P>>2]=7093808;var F=[],U=[],q=[],B=[];function W(n){B.unshift(n)}Math.abs,Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil,Math.floor,Math.pow,Math.imul,Math.fround,Math.round,Math.min,Math.max,Math.clz32,Math.trunc;var H=0,z=null,G=null;a.preloadedImages={},a.preloadedAudios={};var X="data:application/octet-stream;base64,";function K(n){return String.prototype.startsWith?n.startsWith(X):0===n.indexOf(X)}var Y,Z="DiabloSpawn.wasm";function J(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(p)return p(Z);throw"both async and sync fetching of the wasm failed"}catch(v){Bn(v)}}function V(n){var t={env:n,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:g};function e(n,t){var e=n.exports;a.asm=e,function(n){if(H--,a.monitorRunDependencies&&a.monitorRunDependencies(H),0==H&&(null!==z&&(clearInterval(z),z=null),G)){var t=G;G=null,t()}}()}function r(n){e(n.instance)}function i(n){return(a.wasmBinary||!l&&!_||"function"!==typeof fetch?new Promise(function(n,t){n(J())}):fetch(Z,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw"failed to load wasm binary file at '"+Z+"'";return n.arrayBuffer()}).catch(function(){return J()})).then(function(n){return WebAssembly.instantiate(n,t)}).then(n,function(n){v("failed to asynchronously prepare wasm: "+n),Bn(n)})}if(H++,a.monitorRunDependencies&&a.monitorRunDependencies(H),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(o){return v("Module.instantiateWasm callback failed with error: "+o),!1}return function(){if(a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||K(Z)||"function"!==typeof fetch)return i(r);fetch(Z,{credentials:"same-origin"}).then(function(n){return WebAssembly.instantiateStreaming(n,t).then(r,function(n){v("wasm streaming compile failed: "+n),v("falling back to ArrayBuffer instantiation"),i(r)})})}(),{}}K(Z)||(Y=Z,Z=a.locateFile?a.locateFile(Y,y):y+Y),a.asm=function(n,t,e){return t.memory=b,t.table=new WebAssembly.Table({initial:1116,maximum:1116,element:"anyfunc"}),t.__memory_base=1024,t.__table_base=0,V(t)};var $=[function(n){self.DApi.current_save_id(n)}];U.push({func:function(){bn()}});var Q=1850912;var nn={},tn=[];function en(n){n&&nn[n].refcount++}function rn(n){if(!n||nn[n])return n;for(var t in nn)for(var e=+t,r=nn[e].adjusted,i=r.length,o=0;o>2],t.adjusted.push(n),0|(x(r[i]),n);return n=D[n>>2],0|(x(e),n)}a.___cxa_find_matching_catch=sn;var cn={buffers:[null,[],[]],printChar:function(n,t){var e=cn.buffers[n];0===t||10===t?((1===n?h:v)(S(e,0)),e.length=0):e.push(t)},varargs:0,get:function(n){return cn.varargs+=4,D[cn.varargs-4>>2]},getStr:function(){return k(cn.get())},get64:function(){var n=cn.get();cn.get();return n},getZero:function(){cn.get()}};function ln(){return R.length}function _n(n){n=L(n,65536);var t=E.byteLength;try{return-1!==b.grow((n-t)/65536)&&(E=b.buffer,!0)}catch(e){return!1}}var fn={abort:Bn,setTempRet0:x,getTempRet0:function(){return w},invoke_i:function(n){var t=xn();try{return An(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_ii:function(n,t){var e=xn();try{return jn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_iii:function(n,t,e){var r=xn();try{return Cn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_iiii:function(n,t,e,r){var i=xn();try{return Sn(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_iiiii:function(n,t,e,r,i){var o=xn();try{return kn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_iiiiii:function(n,t,e,r,i,o){var a=xn();try{return En(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_ji:function(n,t){var e=xn();try{return Rn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_v:function(n){var t=xn();try{Tn(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_vi:function(n,t){var e=xn();try{Dn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_vii:function(n,t,e){var r=xn();try{Mn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_viii:function(n,t,e,r){var i=xn();try{Ln(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_viiii:function(n,t,e,r,i){var o=xn();try{On(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viiiii:function(n,t,e,r,i,o){var a=xn();try{Pn(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_viiiiiii:function(n,t,e,r,i,o,a,u){var s=xn();try{In(n,t,e,r,i,o,a,u)}catch(c){if(wn(s),c!==c+0&&"longjmp"!==c)throw c;gn(1,0)}},invoke_viij:function(n,t,e,r,i){var o=xn();try{Nn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viji:function(n,t,e,r,i){var o=xn();try{Fn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},___assert_fail:function(n,t,e,r){Bn("Assertion failed: "+k(n)+", at: "+[t?k(t):"unknown filename",e,r?k(r):"unknown function"])},___cxa_allocate_exception:function(n){return vn(n)},___cxa_begin_catch:function(n){var t=nn[n];return t&&!t.caught&&(t.caught=!0,dn.uncaught_exceptions--),t&&(t.rethrown=!1),tn.push(n),en(rn(n)),n},___cxa_end_catch:function(){gn(0);var n=tn.pop();n&&(un(rn(n)),on=0)},___cxa_find_matching_catch:sn,___cxa_find_matching_catch_2:function(n,t){return sn(n,t)},___cxa_find_matching_catch_3:function(n,t,e){return sn(n,t,e)},___cxa_free_exception:an,___cxa_get_exception_ptr:function(n){return n},___cxa_pure_virtual:function(){throw A=!0,"Pure virtual function called!"},___cxa_throw:function(n,t,e){throw nn[n]={ptr:n,adjusted:[n],type:t,destructor:e,refcount:0,caught:!1,rethrown:!1},on=n,"uncaught_exception"in dn?dn.uncaught_exceptions++:dn.uncaught_exceptions=1,n},___cxa_uncaught_exceptions:function(){return dn.uncaught_exceptions},___exception_addRef:en,___exception_deAdjust:rn,___exception_decRef:un,___gxx_personality_v0:function(){},___lock:function(){},___resumeException:function(n){throw on||(on=n),n},___setErrNo:function(n){return a.___errno_location&&(D[a.___errno_location()>>2]=n),n},___syscall140:function(n,t){cn.varargs=t;try{return cn.getStreamFromFD(),cn.get(),cn.get(),cn.get(),cn.get(),0}catch(e){return"undefined"!==typeof FS&&e instanceof FS.ErrnoError||Bn(e),-e.errno}},___syscall146:function(n,t){cn.varargs=t;try{for(var e=cn.get(),r=cn.get(),i=cn.get(),o=0,a=0;a>2],s=D[r+(8*a+4)>>2],c=0;c2147418112)return!1;for(var e=Math.max(t,16777216);e>2]=t),t},_trace_pop:function(){self.WASM_TRACE&&self.WASM_TRACE.pop()},_trace_push:function(n){var t=T.indexOf(0,n),e=String.fromCharCode.apply(null,T.subarray(n,t));console.log(e),self.WASM_TRACE=self.WASM_TRACE||[],self.WASM_TRACE.push(e)},abortOnCannotGrowMemory:function(n){Bn("OOM")},emscripten_realloc_buffer:_n,flush_NO_FILESYSTEM:function(){var n=a._fflush;n&&n(0);var t=cn.buffers;t[1].length&&cn.printChar(1,10),t[2].length&&cn.printChar(2,10)},tempDoublePtr:Q,DYNAMICTOP_PTR:P},pn=a.asm({},fn,E);a.asm=pn;a._DApi_AllocPacket=function(){return a.asm._DApi_AllocPacket.apply(null,arguments)},a._DApi_Char=function(){return a.asm._DApi_Char.apply(null,arguments)},a._DApi_Init=function(){return a.asm._DApi_Init.apply(null,arguments)},a._DApi_Key=function(){return a.asm._DApi_Key.apply(null,arguments)},a._DApi_Mouse=function(){return a.asm._DApi_Mouse.apply(null,arguments)},a._DApi_Render=function(){return a.asm._DApi_Render.apply(null,arguments)},a._DApi_SyncText=function(){return a.asm._DApi_SyncText.apply(null,arguments)},a._DApi_SyncTextPtr=function(){return a.asm._DApi_SyncTextPtr.apply(null,arguments)},a._SNet_InitWebsocket=function(){return a.asm._SNet_InitWebsocket.apply(null,arguments)},a._SNet_WebsocketStatus=function(){return a.asm._SNet_WebsocketStatus.apply(null,arguments)};var dn=a.__ZSt18uncaught_exceptionv=function(){return a.asm.__ZSt18uncaught_exceptionv.apply(null,arguments)},mn=a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},yn=a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},hn=(a.___em_js___api_close_keyboard=function(){return a.asm.___em_js___api_close_keyboard.apply(null,arguments)},a.___em_js___api_open_keyboard=function(){return a.asm.___em_js___api_open_keyboard.apply(null,arguments)},a.___em_js__api_create_sound=function(){return a.asm.___em_js__api_create_sound.apply(null,arguments)},a.___em_js__api_create_sound_float=function(){return a.asm.___em_js__api_create_sound_float.apply(null,arguments)},a.___em_js__api_delete_sound=function(){return a.asm.___em_js__api_delete_sound.apply(null,arguments)},a.___em_js__api_draw_begin=function(){return a.asm.___em_js__api_draw_begin.apply(null,arguments)},a.___em_js__api_draw_belt=function(){return a.asm.___em_js__api_draw_belt.apply(null,arguments)},a.___em_js__api_draw_blit=function(){return a.asm.___em_js__api_draw_blit.apply(null,arguments)},a.___em_js__api_draw_clip_text=function(){return a.asm.___em_js__api_draw_clip_text.apply(null,arguments)},a.___em_js__api_draw_end=function(){return a.asm.___em_js__api_draw_end.apply(null,arguments)},a.___em_js__api_draw_text=function(){return a.asm.___em_js__api_draw_text.apply(null,arguments)},a.___em_js__api_duplicate_sound=function(){return a.asm.___em_js__api_duplicate_sound.apply(null,arguments)},a.___em_js__api_exit_game=function(){return a.asm.___em_js__api_exit_game.apply(null,arguments)},a.___em_js__api_play_sound=function(){return a.asm.___em_js__api_play_sound.apply(null,arguments)},a.___em_js__api_set_cursor=function(){return a.asm.___em_js__api_set_cursor.apply(null,arguments)},a.___em_js__api_set_volume=function(){return a.asm.___em_js__api_set_volume.apply(null,arguments)},a.___em_js__api_stop_sound=function(){return a.asm.___em_js__api_stop_sound.apply(null,arguments)},a.___em_js__api_use_websocket=function(){return a.asm.___em_js__api_use_websocket.apply(null,arguments)},a.___em_js__api_websocket_closed=function(){return a.asm.___em_js__api_websocket_closed.apply(null,arguments)},a.___em_js__api_websocket_send=function(){return a.asm.___em_js__api_websocket_send.apply(null,arguments)},a.___em_js__exit_error=function(){return a.asm.___em_js__exit_error.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__get_file_size=function(){return a.asm.___em_js__get_file_size.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__remove_file=function(){return a.asm.___em_js__remove_file.apply(null,arguments)},a.___em_js__show_alert=function(){return a.asm.___em_js__show_alert.apply(null,arguments)},a.___em_js__trace_pop=function(){return a.asm.___em_js__trace_pop.apply(null,arguments)},a.___em_js__trace_push=function(){return a.asm.___em_js__trace_push.apply(null,arguments)},a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},a._free=function(){return a.asm._free.apply(null,arguments)}),vn=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),gn=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memmove=function(){return a.asm._memmove.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a._setThrew=function(){return a.asm._setThrew.apply(null,arguments)}),bn=(a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.globalCtors=function(){return a.asm.globalCtors.apply(null,arguments)}),wn=(a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),xn=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)},An=a.dynCall_i=function(){return a.asm.dynCall_i.apply(null,arguments)},jn=a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},Cn=(a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)}),Sn=a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},kn=a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},En=a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},Rn=a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},Tn=(a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)}),Dn=a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},Mn=a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},Ln=a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},On=a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},Pn=a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},In=(a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viiiiiii=function(){return a.asm.dynCall_viiiiiii.apply(null,arguments)}),Nn=(a.dynCall_viiiiiiiii=function(){return a.asm.dynCall_viiiiiiiii.apply(null,arguments)},a.dynCall_viiiiiiiiii=function(){return a.asm.dynCall_viiiiiiiiii.apply(null,arguments)},a.dynCall_viij=function(){return a.asm.dynCall_viij.apply(null,arguments)}),Fn=a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function Un(n){this.name="ExitStatus",this.message="Program terminated with exit("+n+")",this.status=n}a.asm=pn,a.then=function(n){if(a.calledRun)n(a);else{var t=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){t&&t(),n(a)}}return a},Un.prototype=new Error,Un.prototype.constructor=Un;function qn(n){function t(){a.calledRun||(a.calledRun=!0,A||(!0,N(U),N(q),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)W(a.postRun.shift());N(B)}()))}n=n||a.arguments,H>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)n=a.preRun.shift(),F.unshift(n);var n;N(F)}(),H>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),t()},1)):t()))}G=function n(){a.calledRun||qn(),a.calledRun||(G=n)},a.run=qn;function Bn(n){throw a.onAbort&&a.onAbort(n),h(n+=""),v(n),A=!0,1,"abort("+n+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=Bn,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,qn(),a.ready=new Promise(function(n,t){delete a.then,a.onAbort=function(n){t(n)},W(function(){n(a)})}),i}}();n.exports=i}).call(this,e(2),"/")},function(n,t,e){n.exports=e(19)},function(n,t,e){var r=function(n){"use strict";var t,e=Object.prototype,r=e.hasOwnProperty,i="function"===typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function s(n,t,e,r){var i=t&&t.prototype instanceof m?t:m,o=Object.create(i.prototype),a=new k(r||[]);return o._invoke=function(n,t,e){var r=l;return function(i,o){if(r===f)throw new Error("Generator is already running");if(r===p){if("throw"===i)throw o;return R()}for(e.method=i,e.arg=o;;){var a=e.delegate;if(a){var u=j(a,e);if(u){if(u===d)continue;return u}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(r===l)throw r=p,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);r=f;var s=c(n,t,e);if("normal"===s.type){if(r=e.done?p:_,s.arg===d)continue;return{value:s.arg,done:e.done}}"throw"===s.type&&(r=p,e.method="throw",e.arg=s.arg)}}}(n,e,a),o}function c(n,t,e){try{return{type:"normal",arg:n.call(t,e)}}catch(r){return{type:"throw",arg:r}}}n.wrap=s;var l="suspendedStart",_="suspendedYield",f="executing",p="completed",d={};function m(){}function y(){}function h(){}var v={};v[o]=function(){return this};var g=Object.getPrototypeOf,b=g&&g(g(E([])));b&&b!==e&&r.call(b,o)&&(v=b);var w=h.prototype=m.prototype=Object.create(v);function x(n){["next","throw","return"].forEach(function(t){n[t]=function(n){return this._invoke(t,n)}})}function A(n){var t;this._invoke=function(e,i){function o(){return new Promise(function(t,o){!function t(e,i,o,a){var u=c(n[e],n,i);if("throw"!==u.type){var s=u.arg,l=s.value;return l&&"object"===typeof l&&r.call(l,"__await")?Promise.resolve(l.__await).then(function(n){t("next",n,o,a)},function(n){t("throw",n,o,a)}):Promise.resolve(l).then(function(n){s.value=n,o(s)},function(n){return t("throw",n,o,a)})}a(u.arg)}(e,i,t,o)})}return t=t?t.then(o,o):o()}}function j(n,e){var r=n.iterator[e.method];if(r===t){if(e.delegate=null,"throw"===e.method){if(n.iterator.return&&(e.method="return",e.arg=t,j(n,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=c(r,n.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[n.resultName]=o.value,e.next=n.nextLoc,"return"!==e.method&&(e.method="next",e.arg=t),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function C(n){var t={tryLoc:n[0]};1 in n&&(t.catchLoc=n[1]),2 in n&&(t.finallyLoc=n[2],t.afterLoc=n[3]),this.tryEntries.push(t)}function S(n){var t=n.completion||{};t.type="normal",delete t.arg,n.completion=t}function k(n){this.tryEntries=[{tryLoc:"root"}],n.forEach(C,this),this.reset(!0)}function E(n){if(n){var e=n[o];if(e)return e.call(n);if("function"===typeof n.next)return n;if(!isNaN(n.length)){var i=-1,a=function e(){for(;++i=0;--o){var a=this.tryEntries[o],u=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(s&&c){if(this.prev=0;--e){var i=this.tryEntries[e];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var e=this.tryEntries[t];if(e.finallyLoc===n)return this.complete(e.completion,e.afterLoc),S(e),d}},catch:function(n){for(var t=this.tryEntries.length-1;t>=0;--t){var e=this.tryEntries[t];if(e.tryLoc===n){var r=e.completion;if("throw"===r.type){var i=r.arg;S(e)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(n,e,r){return this.delegate={iterator:E(n),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=t),d}},n}(n.exports);try{regeneratorRuntime=r}catch(i){Function("r","regeneratorRuntime = r")(r)}},function(n,t,e){"use strict";var r=e(0),i=e(5),o=e(21),a=e(11);function u(n){var t=new o(n),e=i(o.prototype.request,t);return r.extend(e,o.prototype,t),r.extend(e,t),e}var s=u(e(8));s.Axios=o,s.create=function(n){return u(a(s.defaults,n))},s.Cancel=e(12),s.CancelToken=e(33),s.isCancel=e(7),s.all=function(n){return Promise.all(n)},s.spread=e(34),n.exports=s,n.exports.default=s},function(n,t){n.exports=function(n){return null!=n&&null!=n.constructor&&"function"===typeof n.constructor.isBuffer&&n.constructor.isBuffer(n)}},function(n,t,e){"use strict";var r=e(0),i=e(6),o=e(22),a=e(23),u=e(11);function s(n){this.defaults=n,this.interceptors={request:new o,response:new o}}s.prototype.request=function(n){"string"===typeof n?(n=arguments[1]||{}).url=arguments[0]:n=n||{},(n=u(this.defaults,n)).method=n.method?n.method.toLowerCase():"get";var t=[a,void 0],e=Promise.resolve(n);for(this.interceptors.request.forEach(function(n){t.unshift(n.fulfilled,n.rejected)}),this.interceptors.response.forEach(function(n){t.push(n.fulfilled,n.rejected)});t.length;)e=e.then(t.shift(),t.shift());return e},s.prototype.getUri=function(n){return n=u(this.defaults,n),i(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],function(n){s.prototype[n]=function(t,e){return this.request(r.merge(e||{},{method:n,url:t}))}}),r.forEach(["post","put","patch"],function(n){s.prototype[n]=function(t,e,i){return this.request(r.merge(i||{},{method:n,url:t,data:e}))}}),n.exports=s},function(n,t,e){"use strict";var r=e(0);function i(){this.handlers=[]}i.prototype.use=function(n,t){return this.handlers.push({fulfilled:n,rejected:t}),this.handlers.length-1},i.prototype.eject=function(n){this.handlers[n]&&(this.handlers[n]=null)},i.prototype.forEach=function(n){r.forEach(this.handlers,function(t){null!==t&&n(t)})},n.exports=i},function(n,t,e){"use strict";var r=e(0),i=e(24),o=e(7),a=e(8),u=e(31),s=e(32);function c(n){n.cancelToken&&n.cancelToken.throwIfRequested()}n.exports=function(n){return c(n),n.baseURL&&!u(n.url)&&(n.url=s(n.baseURL,n.url)),n.headers=n.headers||{},n.data=i(n.data,n.headers,n.transformRequest),n.headers=r.merge(n.headers.common||{},n.headers[n.method]||{},n.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(t){delete n.headers[t]}),(n.adapter||a.adapter)(n).then(function(t){return c(n),t.data=i(t.data,t.headers,n.transformResponse),t},function(t){return o(t)||(c(n),t&&t.response&&(t.response.data=i(t.response.data,t.response.headers,n.transformResponse))),Promise.reject(t)})}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t,e){return r.forEach(e,function(e){n=e(n,t)}),n}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t){r.forEach(n,function(e,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(n[t]=e,delete n[r])})}},function(n,t,e){"use strict";var r=e(10);n.exports=function(n,t,e){var i=e.config.validateStatus;!i||i(e.status)?n(e):t(r("Request failed with status code "+e.status,e.config,null,e.request,e))}},function(n,t,e){"use strict";n.exports=function(n,t,e,r,i){return n.config=t,e&&(n.code=e),n.request=r,n.response=i,n.isAxiosError=!0,n.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},n}},function(n,t,e){"use strict";var r=e(0),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];n.exports=function(n){var t,e,o,a={};return n?(r.forEach(n.split("\n"),function(n){if(o=n.indexOf(":"),t=r.trim(n.substr(0,o)).toLowerCase(),e=r.trim(n.substr(o+1)),t){if(a[t]&&i.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([e]):a[t]?a[t]+", "+e:e}}),a):a}},function(n,t,e){"use strict";var r=e(0);n.exports=r.isStandardBrowserEnv()?function(){var n,t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");function i(n){var r=n;return t&&(e.setAttribute("href",r),r=e.href),e.setAttribute("href",r),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return n=i(window.location.href),function(t){var e=r.isString(t)?i(t):t;return e.protocol===n.protocol&&e.host===n.host}}():function(){return!0}},function(n,t,e){"use strict";var r=e(0);n.exports=r.isStandardBrowserEnv()?{write:function(n,t,e,i,o,a){var u=[];u.push(n+"="+encodeURIComponent(t)),r.isNumber(e)&&u.push("expires="+new Date(e).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),!0===a&&u.push("secure"),document.cookie=u.join("; ")},read:function(n){var t=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(n){this.write(n,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(n,t,e){"use strict";n.exports=function(n){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(n)}},function(n,t,e){"use strict";n.exports=function(n,t){return t?n.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):n}},function(n,t,e){"use strict";var r=e(12);function i(n){if("function"!==typeof n)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(n){t=n});var e=this;n(function(n){e.reason||(e.reason=new r(n),t(e.reason))})}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var n;return{token:new i(function(t){n=t}),cancel:n}},n.exports=i},function(n,t,e){"use strict";n.exports=function(n){return function(t){return n.apply(null,t)}}},function(n,t,e){"use strict";function r(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var e=[],r=!0,i=!1,o=void 0;try{for(var a,u=n[Symbol.iterator]();!(r=(a=u.next()).done)&&(e.push(a.value),!t||e.length!==t);r=!0);}catch(s){i=!0,o=s}finally{try{r||null==u.return||u.return()}finally{if(i)throw o}}return e}(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}e.r(t);var i=e(1),o=e.n(i);function a(n){return function(n){if(Array.isArray(n)){for(var t=0,e=new Array(n.length);t>8;var e=3,o=!0,a=!1,u=void 0;try{for(var s,c=i[Symbol.iterator]();!(o=(s=c.next()).done);o=!0){var l=s.value;t.set(l,e),e+=l.byteLength}}catch(_){a=!0,u=_}finally{try{o||null==c.return||c.return()}finally{if(a)throw u}}r.send(t),i.length=0}},100):r.close(),e(0)},function(n){e(n)}),a}var x=1466809,A=1337416,j=self,C=null,S=null,k=null,E=null,R=null,T=null,D=!1,M=null,L=1<<20,O=function(){function n(t){!function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);var e=new XMLHttpRequest;e.open("HEAD",t,!1),e.send(),(e.status<200||e.status>=300)&&j.postMessage({action:"error",error:"Failed to load remote file"}),this.byteLength=parseInt(e.getResponseHeader("Content-Length")),this.url=t,this.buffer=new Uint8Array(this.byteLength),this.chunks=new Uint8Array(this.byteLength+L-1>>20|0)}var t,e,r;return t=n,(e=[{key:"subarray",value:function(n,t){for(var e=n/L|0,r=(t+L-1)/L|0,i=r,o=e,a=e;a=300)j.postMessage({action:"error",error:"Failed to load remote file"});else{var s,c=u.getResponseHeader("Content-Range"),l=0;c&&(s=c.match(/bytes (\d+)-(\d+)\/(\d+)/))&&(l=parseInt(s[1])),this.buffer.set(new Uint8Array(u.response),l),e=(l+L-1)/L|0,r=(l+u.response.byteLength+L-1)/L|0;for(var _=e;_=0?D?"spawn".concat(n,".sv"):"single_".concat(n,".sv"):null})},get_file_size:function(n){var t=E.get(n.toLowerCase());return t?t.byteLength:0},get_file_contents:function(n,t,e){var r=E.get(n.toLowerCase());r&&t.set(r.subarray(e,e+t.byteLength))},put_file_contents:function(n,t){n=n.toLowerCase(),E.set(n,t),j.postMessage({action:"fs",func:"update",params:[n,t]})},remove_file:function(n){n=n.toLowerCase(),E.delete(n),j.postMessage({action:"fs",func:"delete",params:[n]})},set_cursor:function(n,t){j.postMessage({action:"cursor",x:n,y:t})},open_keyboard:function(){for(var n=arguments.length,t=new Array(n),e=0;e>16&255,o=r>>8&255,a=255&r;S.fillStyle="rgb(".concat(i,", ").concat(o,", ").concat(a,")"),S.fillText(e,n,t+22)},draw_end:function(){S.restore();var n=C.transferToImageBitmap(),t=[n];T&&t.push(T.buffer),j.postMessage({action:"render",batch:{bitmap:n,belt:T}},t),T=null},draw_belt:function(n){T=n.slice()}},F=null,U=null,q=0,B=0;["create_sound_raw","create_sound","duplicate_sound"].forEach(function(n){P[n]=function(){for(var t=arguments.length,e=new Array(t),r=0;r=q?F.push({func:n,params:e}):j.postMessage({action:"audio",func:n,params:e})}});var W=null;P.websocket_send=function(n){M?M.send(n):W?W.push(n.slice().buffer):j.postMessage({action:"packet",buffer:n})},j.DApi=P;var H=null;function z(n){try{n()}catch(t){j.postMessage({action:"error",error:t.toString(),stack:t.stack})}}function G(n){for(var t=arguments.length,e=new Array(t>1?t-1:0),r=1;r1)for(var e=1;e=0;r--){var i=n[r];"."===i?n.splice(r,1):".."===i?(n.splice(r,1),e++):e&&(n.splice(r,1),e--)}if(t)for(;e--;e)n.unshift("..");return n}function r(n,t){if(n.filter)return n.filter(t);for(var e=[],r=0;r=-1&&!i;o--){var a=o>=0?arguments[o]:n.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,i="/"===a.charAt(0))}return(i?"/":"")+(t=e(r(t.split("/"),function(n){return!!n}),!i).join("/"))||"."},t.normalize=function(n){var o=t.isAbsolute(n),a="/"===i(n,-1);return(n=e(r(n.split("/"),function(n){return!!n}),!o).join("/"))||o||(n="."),n&&a&&(n+="/"),(o?"/":"")+n},t.isAbsolute=function(n){return"/"===n.charAt(0)},t.join=function(){var n=Array.prototype.slice.call(arguments,0);return t.normalize(r(n,function(n,t){if("string"!==typeof n)throw new TypeError("Arguments to path.join must be strings");return n}).join("/"))},t.relative=function(n,e){function r(n){for(var t=0;t=0&&""===n[e];e--);return t>e?[]:n.slice(t,e-t+1)}n=t.resolve(n).substr(1),e=t.resolve(e).substr(1);for(var i=r(n.split("/")),o=r(e.split("/")),a=Math.min(i.length,o.length),u=a,s=0;s=1;--o)if(47===(t=n.charCodeAt(o))){if(!i){r=o;break}}else i=!1;return-1===r?e?"/":".":e&&1===r?"/":n.slice(0,r)},t.basename=function(n,t){var e=function(n){"string"!==typeof n&&(n+="");var t,e=0,r=-1,i=!0;for(t=n.length-1;t>=0;--t)if(47===n.charCodeAt(t)){if(!i){e=t+1;break}}else-1===r&&(i=!1,r=t+1);return-1===r?"":n.slice(e,r)}(n);return t&&e.substr(-1*t.length)===t&&(e=e.substr(0,e.length-t.length)),e},t.extname=function(n){"string"!==typeof n&&(n+="");for(var t=-1,e=0,r=-1,i=!0,o=0,a=n.length-1;a>=0;--a){var u=n.charCodeAt(a);if(47!==u)-1===r&&(i=!1,r=a+1),46===u?-1===t?t=a:1!==o&&(o=1):-1!==t&&(o=-1);else if(!i){e=a+1;break}}return-1===t||-1===r||0===o||1===o&&t===r-1&&t===e+1?"":n.slice(t,r)};var i="b"==="ab".substr(-1)?function(n,t,e){return n.substr(t,e)}:function(n,t,e){return t<0&&(t=n.length+t),n.substr(t,e)}}).call(this,e(2))},function(n,t,e){"use strict";n.exports=function(n,t){return function(){for(var e=new Array(arguments.length),r=0;r=200&&n<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};r.forEach(["delete","get","head"],function(n){u.headers[n]={}}),r.forEach(["post","put","patch"],function(n){u.headers[n]=r.merge(o)}),n.exports=u}).call(this,e(2))},function(n,t,e){"use strict";var r=e(0),i=e(26),o=e(6),a=e(28),u=e(29),s=e(10);n.exports=function(n){return new Promise(function(t,c){var l=n.data,_=n.headers;r.isFormData(l)&&delete _["Content-Type"];var f=new XMLHttpRequest;if(n.auth){var p=n.auth.username||"",d=n.auth.password||"";_.Authorization="Basic "+btoa(p+":"+d)}if(f.open(n.method.toUpperCase(),o(n.url,n.params,n.paramsSerializer),!0),f.timeout=n.timeout,f.onreadystatechange=function(){if(f&&4===f.readyState&&(0!==f.status||f.responseURL&&0===f.responseURL.indexOf("file:"))){var e="getAllResponseHeaders"in f?a(f.getAllResponseHeaders()):null,r={data:n.responseType&&"text"!==n.responseType?f.response:f.responseText,status:f.status,statusText:f.statusText,headers:e,config:n,request:f};i(t,c,r),f=null}},f.onabort=function(){f&&(c(s("Request aborted",n,"ECONNABORTED",f)),f=null)},f.onerror=function(){c(s("Network Error",n,null,f)),f=null},f.ontimeout=function(){c(s("timeout of "+n.timeout+"ms exceeded",n,"ECONNABORTED",f)),f=null},r.isStandardBrowserEnv()){var m=e(30),y=(n.withCredentials||u(n.url))&&n.xsrfCookieName?m.read(n.xsrfCookieName):void 0;y&&(_[n.xsrfHeaderName]=y)}if("setRequestHeader"in f&&r.forEach(_,function(n,t){"undefined"===typeof l&&"content-type"===t.toLowerCase()?delete _[t]:f.setRequestHeader(t,n)}),n.withCredentials&&(f.withCredentials=!0),n.responseType)try{f.responseType=n.responseType}catch(h){if("json"!==n.responseType)throw h}"function"===typeof n.onDownloadProgress&&f.addEventListener("progress",n.onDownloadProgress),"function"===typeof n.onUploadProgress&&f.upload&&f.upload.addEventListener("progress",n.onUploadProgress),n.cancelToken&&n.cancelToken.promise.then(function(n){f&&(f.abort(),c(n),f=null)}),void 0===l&&(l=null),f.send(l)})}},function(n,t,e){"use strict";var r=e(27);n.exports=function(n,t,e,i,o){var a=new Error(n);return r(a,t,e,i,o)}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t){t=t||{};var e={};return r.forEach(["url","method","params","data"],function(n){"undefined"!==typeof t[n]&&(e[n]=t[n])}),r.forEach(["headers","auth","proxy"],function(i){r.isObject(t[i])?e[i]=r.deepMerge(n[i],t[i]):"undefined"!==typeof t[i]?e[i]=t[i]:r.isObject(n[i])?e[i]=r.deepMerge(n[i]):"undefined"!==typeof n[i]&&(e[i]=n[i])}),r.forEach(["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","maxContentLength","validateStatus","maxRedirects","httpAgent","httpsAgent","cancelToken","socketPath"],function(r){"undefined"!==typeof t[r]?e[r]=t[r]:"undefined"!==typeof n[r]&&(e[r]=n[r])}),e}},function(n,t,e){"use strict";function r(n){this.message=n}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,n.exports=r},function(n,t,e){n.exports=e.p+"static/media/Diablo.570bd59a.wasm"},function(n,t,e){(function(t,r){var i=function(){var n="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;return function(i){var o,a="undefined"!==typeof(i=i||{})?i:{},u={};for(o in a)a.hasOwnProperty(o)&&(u[o]=a[o]);a.arguments=[],a.thisProgram="./this.program",a.quit=function(n,t){throw t},a.preRun=[],a.postRun=[];var s,c,l=!1,_=!1;l="object"===typeof window,_="function"===typeof importScripts,s="object"===typeof t&&"object"===typeof t.versions&&"string"===typeof t.versions.node&&!l&&!_,c=!l&&!s&&!_;var f,p,d,m,y="";s?(y=r+"/",f=function(n,t){var r;return d||(d=e(3)),m||(m=e(4)),n=m.normalize(n),r=d.readFileSync(n),t?r:r.toString()},p=function(n){var t=f(n,!0);return t.buffer||(t=new Uint8Array(t)),j(t.buffer),t},t.argv.length>1&&(a.thisProgram=t.argv[1].replace(/\\/g,"/")),a.arguments=t.argv.slice(2),t.on("uncaughtException",function(n){if(!(n instanceof Un))throw n}),t.on("unhandledRejection",Bn),a.quit=function(n){t.exit(n)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(f=function(n){return read(n)}),p=function(n){var t;return"function"===typeof readbuffer?new Uint8Array(readbuffer(n)):(j("object"===typeof(t=read(n,"binary"))),t)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(n){quit(n)})):(l||_)&&(_?y=self.location.href:document.currentScript&&(y=document.currentScript.src),n&&(y=n),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",f=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.send(null),t.responseText},_&&(p=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(n,t,e){var r=new XMLHttpRequest;r.open("GET",n,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):e()},r.onerror=e,r.send(null)});var h=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),v=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||h);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var g={"f64-rem":function(n,t){return n%t},debugger:function(){}};new Array(0);var b,w=0,x=function(n){w=n};"object"!==typeof WebAssembly&&v("no native wasm support detected");var A=!1;function j(n,t){n||Bn("Assertion failed: "+t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(n,t,e){for(var r=t+e,i=t;n[i]&&!(i>=r);)++i;if(i-t>16&&n.subarray&&C)return C.decode(n.subarray(t,i));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}function k(n,t){return n?S(T,n,t):""}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var E,R,T,D,M;function L(n,t){return n%t>0&&(n+=t-n%t),n}function O(){a.HEAP8=R=new Int8Array(E),a.HEAP16=new Int16Array(E),a.HEAP32=D=new Int32Array(E),a.HEAPU8=T=new Uint8Array(E),a.HEAPU16=new Uint16Array(E),a.HEAPU32=new Uint32Array(E),a.HEAPF32=M=new Float32Array(E),a.HEAPF64=new Float64Array(E)}var P=1875712,I=a.TOTAL_MEMORY||134217728;function N(n){for(;n.length>0;){var t=n.shift();if("function"!=typeof t){var e=t.func;"number"===typeof e?void 0===t.arg?a.dynCall_v(e):a.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}I<5242880&&v("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+I+"! (TOTAL_STACK=5242880)"),(b=a.wasmMemory?a.wasmMemory:new WebAssembly.Memory({initial:I/65536}))&&(E=b.buffer),I=E.byteLength,O(),D[P>>2]=7118624;var F=[],U=[],q=[],B=[];function W(n){B.unshift(n)}Math.abs,Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil,Math.floor,Math.pow,Math.imul,Math.fround,Math.round,Math.min,Math.max,Math.clz32,Math.trunc;var H=0,z=null,G=null;a.preloadedImages={},a.preloadedAudios={};var X="data:application/octet-stream;base64,";function K(n){return String.prototype.startsWith?n.startsWith(X):0===n.indexOf(X)}var Y,Z="Diablo.wasm";function J(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(p)return p(Z);throw"both async and sync fetching of the wasm failed"}catch(v){Bn(v)}}function V(n){var t={env:n,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:g};function e(n,t){var e=n.exports;a.asm=e,function(n){if(H--,a.monitorRunDependencies&&a.monitorRunDependencies(H),0==H&&(null!==z&&(clearInterval(z),z=null),G)){var t=G;G=null,t()}}()}function r(n){e(n.instance)}function i(n){return(a.wasmBinary||!l&&!_||"function"!==typeof fetch?new Promise(function(n,t){n(J())}):fetch(Z,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw"failed to load wasm binary file at '"+Z+"'";return n.arrayBuffer()}).catch(function(){return J()})).then(function(n){return WebAssembly.instantiate(n,t)}).then(n,function(n){v("failed to asynchronously prepare wasm: "+n),Bn(n)})}if(H++,a.monitorRunDependencies&&a.monitorRunDependencies(H),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(o){return v("Module.instantiateWasm callback failed with error: "+o),!1}return function(){if(a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||K(Z)||"function"!==typeof fetch)return i(r);fetch(Z,{credentials:"same-origin"}).then(function(n){return WebAssembly.instantiateStreaming(n,t).then(r,function(n){v("wasm streaming compile failed: "+n),v("falling back to ArrayBuffer instantiation"),i(r)})})}(),{}}K(Z)||(Y=Z,Z=a.locateFile?a.locateFile(Y,y):y+Y),a.asm=function(n,t,e){return t.memory=b,t.table=new WebAssembly.Table({initial:1116,maximum:1116,element:"anyfunc"}),t.__memory_base=1024,t.__table_base=0,V(t)};var $=[function(n){self.DApi.current_save_id(n)}];U.push({func:function(){bn()}});var Q=1875728;var nn={},tn=[];function en(n){n&&nn[n].refcount++}function rn(n){if(!n||nn[n])return n;for(var t in nn)for(var e=+t,r=nn[e].adjusted,i=r.length,o=0;o>2],t.adjusted.push(n),0|(x(r[i]),n);return n=D[n>>2],0|(x(e),n)}a.___cxa_find_matching_catch=sn;var cn={buffers:[null,[],[]],printChar:function(n,t){var e=cn.buffers[n];0===t||10===t?((1===n?h:v)(S(e,0)),e.length=0):e.push(t)},varargs:0,get:function(n){return cn.varargs+=4,D[cn.varargs-4>>2]},getStr:function(){return k(cn.get())},get64:function(){var n=cn.get();cn.get();return n},getZero:function(){cn.get()}};function ln(){return R.length}function _n(n){n=L(n,65536);var t=E.byteLength;try{return-1!==b.grow((n-t)/65536)&&(E=b.buffer,!0)}catch(e){return!1}}var fn={abort:Bn,setTempRet0:x,getTempRet0:function(){return w},invoke_i:function(n){var t=xn();try{return An(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_ii:function(n,t){var e=xn();try{return jn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_iii:function(n,t,e){var r=xn();try{return Cn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_iiii:function(n,t,e,r){var i=xn();try{return Sn(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_iiiii:function(n,t,e,r,i){var o=xn();try{return kn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_iiiiii:function(n,t,e,r,i,o){var a=xn();try{return En(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_ji:function(n,t){var e=xn();try{return Rn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_v:function(n){var t=xn();try{Tn(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_vi:function(n,t){var e=xn();try{Dn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_vii:function(n,t,e){var r=xn();try{Mn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_viii:function(n,t,e,r){var i=xn();try{Ln(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_viiii:function(n,t,e,r,i){var o=xn();try{On(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viiiii:function(n,t,e,r,i,o){var a=xn();try{Pn(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_viiiiiii:function(n,t,e,r,i,o,a,u){var s=xn();try{In(n,t,e,r,i,o,a,u)}catch(c){if(wn(s),c!==c+0&&"longjmp"!==c)throw c;gn(1,0)}},invoke_viij:function(n,t,e,r,i){var o=xn();try{Nn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viji:function(n,t,e,r,i){var o=xn();try{Fn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},___assert_fail:function(n,t,e,r){Bn("Assertion failed: "+k(n)+", at: "+[t?k(t):"unknown filename",e,r?k(r):"unknown function"])},___cxa_allocate_exception:function(n){return vn(n)},___cxa_begin_catch:function(n){var t=nn[n];return t&&!t.caught&&(t.caught=!0,dn.uncaught_exceptions--),t&&(t.rethrown=!1),tn.push(n),en(rn(n)),n},___cxa_end_catch:function(){gn(0);var n=tn.pop();n&&(un(rn(n)),on=0)},___cxa_find_matching_catch:sn,___cxa_find_matching_catch_2:function(n,t){return sn(n,t)},___cxa_find_matching_catch_3:function(n,t,e){return sn(n,t,e)},___cxa_free_exception:an,___cxa_get_exception_ptr:function(n){return n},___cxa_pure_virtual:function(){throw A=!0,"Pure virtual function called!"},___cxa_throw:function(n,t,e){throw nn[n]={ptr:n,adjusted:[n],type:t,destructor:e,refcount:0,caught:!1,rethrown:!1},on=n,"uncaught_exception"in dn?dn.uncaught_exceptions++:dn.uncaught_exceptions=1,n},___cxa_uncaught_exceptions:function(){return dn.uncaught_exceptions},___exception_addRef:en,___exception_deAdjust:rn,___exception_decRef:un,___gxx_personality_v0:function(){},___lock:function(){},___resumeException:function(n){throw on||(on=n),n},___setErrNo:function(n){return a.___errno_location&&(D[a.___errno_location()>>2]=n),n},___syscall140:function(n,t){cn.varargs=t;try{return cn.getStreamFromFD(),cn.get(),cn.get(),cn.get(),cn.get(),0}catch(e){return"undefined"!==typeof FS&&e instanceof FS.ErrnoError||Bn(e),-e.errno}},___syscall146:function(n,t){cn.varargs=t;try{for(var e=cn.get(),r=cn.get(),i=cn.get(),o=0,a=0;a>2],s=D[r+(8*a+4)>>2],c=0;c2147418112)return!1;for(var e=Math.max(t,16777216);e>2]=t),t},_trace_pop:function(){self.WASM_TRACE&&self.WASM_TRACE.pop()},_trace_push:function(n){var t=T.indexOf(0,n),e=String.fromCharCode.apply(null,T.subarray(n,t));console.log(e),self.WASM_TRACE=self.WASM_TRACE||[],self.WASM_TRACE.push(e)},abortOnCannotGrowMemory:function(n){Bn("OOM")},emscripten_realloc_buffer:_n,flush_NO_FILESYSTEM:function(){var n=a._fflush;n&&n(0);var t=cn.buffers;t[1].length&&cn.printChar(1,10),t[2].length&&cn.printChar(2,10)},tempDoublePtr:Q,DYNAMICTOP_PTR:P},pn=a.asm({},fn,E);a.asm=pn;a._DApi_AllocPacket=function(){return a.asm._DApi_AllocPacket.apply(null,arguments)},a._DApi_Char=function(){return a.asm._DApi_Char.apply(null,arguments)},a._DApi_Init=function(){return a.asm._DApi_Init.apply(null,arguments)},a._DApi_Key=function(){return a.asm._DApi_Key.apply(null,arguments)},a._DApi_Mouse=function(){return a.asm._DApi_Mouse.apply(null,arguments)},a._DApi_Render=function(){return a.asm._DApi_Render.apply(null,arguments)},a._DApi_SyncText=function(){return a.asm._DApi_SyncText.apply(null,arguments)},a._DApi_SyncTextPtr=function(){return a.asm._DApi_SyncTextPtr.apply(null,arguments)},a._SNet_InitWebsocket=function(){return a.asm._SNet_InitWebsocket.apply(null,arguments)},a._SNet_WebsocketStatus=function(){return a.asm._SNet_WebsocketStatus.apply(null,arguments)};var dn=a.__ZSt18uncaught_exceptionv=function(){return a.asm.__ZSt18uncaught_exceptionv.apply(null,arguments)},mn=a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},yn=a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},hn=(a.___em_js___api_close_keyboard=function(){return a.asm.___em_js___api_close_keyboard.apply(null,arguments)},a.___em_js___api_open_keyboard=function(){return a.asm.___em_js___api_open_keyboard.apply(null,arguments)},a.___em_js__api_create_sound=function(){return a.asm.___em_js__api_create_sound.apply(null,arguments)},a.___em_js__api_create_sound_float=function(){return a.asm.___em_js__api_create_sound_float.apply(null,arguments)},a.___em_js__api_delete_sound=function(){return a.asm.___em_js__api_delete_sound.apply(null,arguments)},a.___em_js__api_draw_begin=function(){return a.asm.___em_js__api_draw_begin.apply(null,arguments)},a.___em_js__api_draw_belt=function(){return a.asm.___em_js__api_draw_belt.apply(null,arguments)},a.___em_js__api_draw_blit=function(){return a.asm.___em_js__api_draw_blit.apply(null,arguments)},a.___em_js__api_draw_clip_text=function(){return a.asm.___em_js__api_draw_clip_text.apply(null,arguments)},a.___em_js__api_draw_end=function(){return a.asm.___em_js__api_draw_end.apply(null,arguments)},a.___em_js__api_draw_text=function(){return a.asm.___em_js__api_draw_text.apply(null,arguments)},a.___em_js__api_duplicate_sound=function(){return a.asm.___em_js__api_duplicate_sound.apply(null,arguments)},a.___em_js__api_exit_game=function(){return a.asm.___em_js__api_exit_game.apply(null,arguments)},a.___em_js__api_play_sound=function(){return a.asm.___em_js__api_play_sound.apply(null,arguments)},a.___em_js__api_set_cursor=function(){return a.asm.___em_js__api_set_cursor.apply(null,arguments)},a.___em_js__api_set_volume=function(){return a.asm.___em_js__api_set_volume.apply(null,arguments)},a.___em_js__api_stop_sound=function(){return a.asm.___em_js__api_stop_sound.apply(null,arguments)},a.___em_js__api_use_websocket=function(){return a.asm.___em_js__api_use_websocket.apply(null,arguments)},a.___em_js__api_websocket_closed=function(){return a.asm.___em_js__api_websocket_closed.apply(null,arguments)},a.___em_js__api_websocket_send=function(){return a.asm.___em_js__api_websocket_send.apply(null,arguments)},a.___em_js__exit_error=function(){return a.asm.___em_js__exit_error.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__get_file_size=function(){return a.asm.___em_js__get_file_size.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__remove_file=function(){return a.asm.___em_js__remove_file.apply(null,arguments)},a.___em_js__show_alert=function(){return a.asm.___em_js__show_alert.apply(null,arguments)},a.___em_js__trace_pop=function(){return a.asm.___em_js__trace_pop.apply(null,arguments)},a.___em_js__trace_push=function(){return a.asm.___em_js__trace_push.apply(null,arguments)},a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},a._free=function(){return a.asm._free.apply(null,arguments)}),vn=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),gn=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memmove=function(){return a.asm._memmove.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a._setThrew=function(){return a.asm._setThrew.apply(null,arguments)}),bn=(a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.globalCtors=function(){return a.asm.globalCtors.apply(null,arguments)}),wn=(a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),xn=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)},An=a.dynCall_i=function(){return a.asm.dynCall_i.apply(null,arguments)},jn=a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},Cn=(a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)}),Sn=a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},kn=a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},En=a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},Rn=a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},Tn=(a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)}),Dn=a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},Mn=a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},Ln=a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},On=a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},Pn=a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},In=(a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viiiiiii=function(){return a.asm.dynCall_viiiiiii.apply(null,arguments)}),Nn=(a.dynCall_viiiiiiiii=function(){return a.asm.dynCall_viiiiiiiii.apply(null,arguments)},a.dynCall_viiiiiiiiii=function(){return a.asm.dynCall_viiiiiiiiii.apply(null,arguments)},a.dynCall_viij=function(){return a.asm.dynCall_viij.apply(null,arguments)}),Fn=a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function Un(n){this.name="ExitStatus",this.message="Program terminated with exit("+n+")",this.status=n}a.asm=pn,a.then=function(n){if(a.calledRun)n(a);else{var t=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){t&&t(),n(a)}}return a},Un.prototype=new Error,Un.prototype.constructor=Un;function qn(n){function t(){a.calledRun||(a.calledRun=!0,A||(!0,N(U),N(q),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)W(a.postRun.shift());N(B)}()))}n=n||a.arguments,H>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)n=a.preRun.shift(),F.unshift(n);var n;N(F)}(),H>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),t()},1)):t()))}G=function n(){a.calledRun||qn(),a.calledRun||(G=n)},a.run=qn;function Bn(n){throw a.onAbort&&a.onAbort(n),h(n+=""),v(n),A=!0,1,"abort("+n+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=Bn,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,qn(),a.ready=new Promise(function(n,t){delete a.then,a.onAbort=function(n){t(n)},W(function(){n(a)})}),i}}();n.exports=i}).call(this,e(2),"/")},function(n,t,e){n.exports=e.p+"static/media/DiabloSpawn.9c2373b2.wasm"},function(n,t,e){(function(t,r){var i=function(){var n="undefined"!==typeof document&&document.currentScript?document.currentScript.src:void 0;return function(i){var o,a="undefined"!==typeof(i=i||{})?i:{},u={};for(o in a)a.hasOwnProperty(o)&&(u[o]=a[o]);a.arguments=[],a.thisProgram="./this.program",a.quit=function(n,t){throw t},a.preRun=[],a.postRun=[];var s,c,l=!1,_=!1;l="object"===typeof window,_="function"===typeof importScripts,s="object"===typeof t&&"object"===typeof t.versions&&"string"===typeof t.versions.node&&!l&&!_,c=!l&&!s&&!_;var f,p,d,m,y="";s?(y=r+"/",f=function(n,t){var r;return d||(d=e(3)),m||(m=e(4)),n=m.normalize(n),r=d.readFileSync(n),t?r:r.toString()},p=function(n){var t=f(n,!0);return t.buffer||(t=new Uint8Array(t)),j(t.buffer),t},t.argv.length>1&&(a.thisProgram=t.argv[1].replace(/\\/g,"/")),a.arguments=t.argv.slice(2),t.on("uncaughtException",function(n){if(!(n instanceof Un))throw n}),t.on("unhandledRejection",Bn),a.quit=function(n){t.exit(n)},a.inspect=function(){return"[Emscripten Module object]"}):c?("undefined"!=typeof read&&(f=function(n){return read(n)}),p=function(n){var t;return"function"===typeof readbuffer?new Uint8Array(readbuffer(n)):(j("object"===typeof(t=read(n,"binary"))),t)},"undefined"!=typeof scriptArgs?a.arguments=scriptArgs:"undefined"!=typeof arguments&&(a.arguments=arguments),"function"===typeof quit&&(a.quit=function(n){quit(n)})):(l||_)&&(_?y=self.location.href:document.currentScript&&(y=document.currentScript.src),n&&(y=n),y=0!==y.indexOf("blob:")?y.substr(0,y.lastIndexOf("/")+1):"",f=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.send(null),t.responseText},_&&(p=function(n){var t=new XMLHttpRequest;return t.open("GET",n,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),function(n,t,e){var r=new XMLHttpRequest;r.open("GET",n,!0),r.responseType="arraybuffer",r.onload=function(){200==r.status||0==r.status&&r.response?t(r.response):e()},r.onerror=e,r.send(null)});var h=a.print||("undefined"!==typeof console?console.log.bind(console):"undefined"!==typeof print?print:null),v=a.printErr||("undefined"!==typeof printErr?printErr:"undefined"!==typeof console&&console.warn.bind(console)||h);for(o in u)u.hasOwnProperty(o)&&(a[o]=u[o]);u=void 0;var g={"f64-rem":function(n,t){return n%t},debugger:function(){}};new Array(0);var b,w=0,x=function(n){w=n};"object"!==typeof WebAssembly&&v("no native wasm support detected");var A=!1;function j(n,t){n||Bn("Assertion failed: "+t)}var C="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function S(n,t,e){for(var r=t+e,i=t;n[i]&&!(i>=r);)++i;if(i-t>16&&n.subarray&&C)return C.decode(n.subarray(t,i));for(var o="";t>10,56320|1023&c)}}else o+=String.fromCharCode((31&a)<<6|u)}else o+=String.fromCharCode(a)}return o}function k(n,t){return n?S(T,n,t):""}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");var E,R,T,D,M;function L(n,t){return n%t>0&&(n+=t-n%t),n}function O(){a.HEAP8=R=new Int8Array(E),a.HEAP16=new Int16Array(E),a.HEAP32=D=new Int32Array(E),a.HEAPU8=T=new Uint8Array(E),a.HEAPU16=new Uint16Array(E),a.HEAPU32=new Uint32Array(E),a.HEAPF32=M=new Float32Array(E),a.HEAPF64=new Float64Array(E)}var P=1850896,I=a.TOTAL_MEMORY||134217728;function N(n){for(;n.length>0;){var t=n.shift();if("function"!=typeof t){var e=t.func;"number"===typeof e?void 0===t.arg?a.dynCall_v(e):a.dynCall_vi(e,t.arg):e(void 0===t.arg?null:t.arg)}else t()}}I<5242880&&v("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+I+"! (TOTAL_STACK=5242880)"),(b=a.wasmMemory?a.wasmMemory:new WebAssembly.Memory({initial:I/65536}))&&(E=b.buffer),I=E.byteLength,O(),D[P>>2]=7093808;var F=[],U=[],q=[],B=[];function W(n){B.unshift(n)}Math.abs,Math.cos,Math.sin,Math.tan,Math.acos,Math.asin,Math.atan,Math.atan2,Math.exp,Math.log,Math.sqrt,Math.ceil,Math.floor,Math.pow,Math.imul,Math.fround,Math.round,Math.min,Math.max,Math.clz32,Math.trunc;var H=0,z=null,G=null;a.preloadedImages={},a.preloadedAudios={};var X="data:application/octet-stream;base64,";function K(n){return String.prototype.startsWith?n.startsWith(X):0===n.indexOf(X)}var Y,Z="DiabloSpawn.wasm";function J(){try{if(a.wasmBinary)return new Uint8Array(a.wasmBinary);if(p)return p(Z);throw"both async and sync fetching of the wasm failed"}catch(v){Bn(v)}}function V(n){var t={env:n,global:{NaN:NaN,Infinity:1/0},"global.Math":Math,asm2wasm:g};function e(n,t){var e=n.exports;a.asm=e,function(n){if(H--,a.monitorRunDependencies&&a.monitorRunDependencies(H),0==H&&(null!==z&&(clearInterval(z),z=null),G)){var t=G;G=null,t()}}()}function r(n){e(n.instance)}function i(n){return(a.wasmBinary||!l&&!_||"function"!==typeof fetch?new Promise(function(n,t){n(J())}):fetch(Z,{credentials:"same-origin"}).then(function(n){if(!n.ok)throw"failed to load wasm binary file at '"+Z+"'";return n.arrayBuffer()}).catch(function(){return J()})).then(function(n){return WebAssembly.instantiate(n,t)}).then(n,function(n){v("failed to asynchronously prepare wasm: "+n),Bn(n)})}if(H++,a.monitorRunDependencies&&a.monitorRunDependencies(H),a.instantiateWasm)try{return a.instantiateWasm(t,e)}catch(o){return v("Module.instantiateWasm callback failed with error: "+o),!1}return function(){if(a.wasmBinary||"function"!==typeof WebAssembly.instantiateStreaming||K(Z)||"function"!==typeof fetch)return i(r);fetch(Z,{credentials:"same-origin"}).then(function(n){return WebAssembly.instantiateStreaming(n,t).then(r,function(n){v("wasm streaming compile failed: "+n),v("falling back to ArrayBuffer instantiation"),i(r)})})}(),{}}K(Z)||(Y=Z,Z=a.locateFile?a.locateFile(Y,y):y+Y),a.asm=function(n,t,e){return t.memory=b,t.table=new WebAssembly.Table({initial:1116,maximum:1116,element:"anyfunc"}),t.__memory_base=1024,t.__table_base=0,V(t)};var $=[function(n){self.DApi.current_save_id(n)}];U.push({func:function(){bn()}});var Q=1850912;var nn={},tn=[];function en(n){n&&nn[n].refcount++}function rn(n){if(!n||nn[n])return n;for(var t in nn)for(var e=+t,r=nn[e].adjusted,i=r.length,o=0;o>2],t.adjusted.push(n),0|(x(r[i]),n);return n=D[n>>2],0|(x(e),n)}a.___cxa_find_matching_catch=sn;var cn={buffers:[null,[],[]],printChar:function(n,t){var e=cn.buffers[n];0===t||10===t?((1===n?h:v)(S(e,0)),e.length=0):e.push(t)},varargs:0,get:function(n){return cn.varargs+=4,D[cn.varargs-4>>2]},getStr:function(){return k(cn.get())},get64:function(){var n=cn.get();cn.get();return n},getZero:function(){cn.get()}};function ln(){return R.length}function _n(n){n=L(n,65536);var t=E.byteLength;try{return-1!==b.grow((n-t)/65536)&&(E=b.buffer,!0)}catch(e){return!1}}var fn={abort:Bn,setTempRet0:x,getTempRet0:function(){return w},invoke_i:function(n){var t=xn();try{return An(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_ii:function(n,t){var e=xn();try{return jn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_iii:function(n,t,e){var r=xn();try{return Cn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_iiii:function(n,t,e,r){var i=xn();try{return Sn(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_iiiii:function(n,t,e,r,i){var o=xn();try{return kn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_iiiiii:function(n,t,e,r,i,o){var a=xn();try{return En(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_ji:function(n,t){var e=xn();try{return Rn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_v:function(n){var t=xn();try{Tn(n)}catch(e){if(wn(t),e!==e+0&&"longjmp"!==e)throw e;gn(1,0)}},invoke_vi:function(n,t){var e=xn();try{Dn(n,t)}catch(r){if(wn(e),r!==r+0&&"longjmp"!==r)throw r;gn(1,0)}},invoke_vii:function(n,t,e){var r=xn();try{Mn(n,t,e)}catch(i){if(wn(r),i!==i+0&&"longjmp"!==i)throw i;gn(1,0)}},invoke_viii:function(n,t,e,r){var i=xn();try{Ln(n,t,e,r)}catch(o){if(wn(i),o!==o+0&&"longjmp"!==o)throw o;gn(1,0)}},invoke_viiii:function(n,t,e,r,i){var o=xn();try{On(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viiiii:function(n,t,e,r,i,o){var a=xn();try{Pn(n,t,e,r,i,o)}catch(u){if(wn(a),u!==u+0&&"longjmp"!==u)throw u;gn(1,0)}},invoke_viiiiiii:function(n,t,e,r,i,o,a,u){var s=xn();try{In(n,t,e,r,i,o,a,u)}catch(c){if(wn(s),c!==c+0&&"longjmp"!==c)throw c;gn(1,0)}},invoke_viij:function(n,t,e,r,i){var o=xn();try{Nn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},invoke_viji:function(n,t,e,r,i){var o=xn();try{Fn(n,t,e,r,i)}catch(a){if(wn(o),a!==a+0&&"longjmp"!==a)throw a;gn(1,0)}},___assert_fail:function(n,t,e,r){Bn("Assertion failed: "+k(n)+", at: "+[t?k(t):"unknown filename",e,r?k(r):"unknown function"])},___cxa_allocate_exception:function(n){return vn(n)},___cxa_begin_catch:function(n){var t=nn[n];return t&&!t.caught&&(t.caught=!0,dn.uncaught_exceptions--),t&&(t.rethrown=!1),tn.push(n),en(rn(n)),n},___cxa_end_catch:function(){gn(0);var n=tn.pop();n&&(un(rn(n)),on=0)},___cxa_find_matching_catch:sn,___cxa_find_matching_catch_2:function(n,t){return sn(n,t)},___cxa_find_matching_catch_3:function(n,t,e){return sn(n,t,e)},___cxa_free_exception:an,___cxa_get_exception_ptr:function(n){return n},___cxa_pure_virtual:function(){throw A=!0,"Pure virtual function called!"},___cxa_throw:function(n,t,e){throw nn[n]={ptr:n,adjusted:[n],type:t,destructor:e,refcount:0,caught:!1,rethrown:!1},on=n,"uncaught_exception"in dn?dn.uncaught_exceptions++:dn.uncaught_exceptions=1,n},___cxa_uncaught_exceptions:function(){return dn.uncaught_exceptions},___exception_addRef:en,___exception_deAdjust:rn,___exception_decRef:un,___gxx_personality_v0:function(){},___lock:function(){},___resumeException:function(n){throw on||(on=n),n},___setErrNo:function(n){return a.___errno_location&&(D[a.___errno_location()>>2]=n),n},___syscall140:function(n,t){cn.varargs=t;try{return cn.getStreamFromFD(),cn.get(),cn.get(),cn.get(),cn.get(),0}catch(e){return"undefined"!==typeof FS&&e instanceof FS.ErrnoError||Bn(e),-e.errno}},___syscall146:function(n,t){cn.varargs=t;try{for(var e=cn.get(),r=cn.get(),i=cn.get(),o=0,a=0;a>2],s=D[r+(8*a+4)>>2],c=0;c2147418112)return!1;for(var e=Math.max(t,16777216);e>2]=t),t},_trace_pop:function(){self.WASM_TRACE&&self.WASM_TRACE.pop()},_trace_push:function(n){var t=T.indexOf(0,n),e=String.fromCharCode.apply(null,T.subarray(n,t));console.log(e),self.WASM_TRACE=self.WASM_TRACE||[],self.WASM_TRACE.push(e)},abortOnCannotGrowMemory:function(n){Bn("OOM")},emscripten_realloc_buffer:_n,flush_NO_FILESYSTEM:function(){var n=a._fflush;n&&n(0);var t=cn.buffers;t[1].length&&cn.printChar(1,10),t[2].length&&cn.printChar(2,10)},tempDoublePtr:Q,DYNAMICTOP_PTR:P},pn=a.asm({},fn,E);a.asm=pn;a._DApi_AllocPacket=function(){return a.asm._DApi_AllocPacket.apply(null,arguments)},a._DApi_Char=function(){return a.asm._DApi_Char.apply(null,arguments)},a._DApi_Init=function(){return a.asm._DApi_Init.apply(null,arguments)},a._DApi_Key=function(){return a.asm._DApi_Key.apply(null,arguments)},a._DApi_Mouse=function(){return a.asm._DApi_Mouse.apply(null,arguments)},a._DApi_Render=function(){return a.asm._DApi_Render.apply(null,arguments)},a._DApi_SyncText=function(){return a.asm._DApi_SyncText.apply(null,arguments)},a._DApi_SyncTextPtr=function(){return a.asm._DApi_SyncTextPtr.apply(null,arguments)},a._SNet_InitWebsocket=function(){return a.asm._SNet_InitWebsocket.apply(null,arguments)},a._SNet_WebsocketStatus=function(){return a.asm._SNet_WebsocketStatus.apply(null,arguments)};var dn=a.__ZSt18uncaught_exceptionv=function(){return a.asm.__ZSt18uncaught_exceptionv.apply(null,arguments)},mn=a.___cxa_can_catch=function(){return a.asm.___cxa_can_catch.apply(null,arguments)},yn=a.___cxa_is_pointer_type=function(){return a.asm.___cxa_is_pointer_type.apply(null,arguments)},hn=(a.___em_js___api_close_keyboard=function(){return a.asm.___em_js___api_close_keyboard.apply(null,arguments)},a.___em_js___api_open_keyboard=function(){return a.asm.___em_js___api_open_keyboard.apply(null,arguments)},a.___em_js__api_create_sound=function(){return a.asm.___em_js__api_create_sound.apply(null,arguments)},a.___em_js__api_create_sound_float=function(){return a.asm.___em_js__api_create_sound_float.apply(null,arguments)},a.___em_js__api_delete_sound=function(){return a.asm.___em_js__api_delete_sound.apply(null,arguments)},a.___em_js__api_draw_begin=function(){return a.asm.___em_js__api_draw_begin.apply(null,arguments)},a.___em_js__api_draw_belt=function(){return a.asm.___em_js__api_draw_belt.apply(null,arguments)},a.___em_js__api_draw_blit=function(){return a.asm.___em_js__api_draw_blit.apply(null,arguments)},a.___em_js__api_draw_clip_text=function(){return a.asm.___em_js__api_draw_clip_text.apply(null,arguments)},a.___em_js__api_draw_end=function(){return a.asm.___em_js__api_draw_end.apply(null,arguments)},a.___em_js__api_draw_text=function(){return a.asm.___em_js__api_draw_text.apply(null,arguments)},a.___em_js__api_duplicate_sound=function(){return a.asm.___em_js__api_duplicate_sound.apply(null,arguments)},a.___em_js__api_exit_game=function(){return a.asm.___em_js__api_exit_game.apply(null,arguments)},a.___em_js__api_play_sound=function(){return a.asm.___em_js__api_play_sound.apply(null,arguments)},a.___em_js__api_set_cursor=function(){return a.asm.___em_js__api_set_cursor.apply(null,arguments)},a.___em_js__api_set_volume=function(){return a.asm.___em_js__api_set_volume.apply(null,arguments)},a.___em_js__api_stop_sound=function(){return a.asm.___em_js__api_stop_sound.apply(null,arguments)},a.___em_js__api_use_websocket=function(){return a.asm.___em_js__api_use_websocket.apply(null,arguments)},a.___em_js__api_websocket_closed=function(){return a.asm.___em_js__api_websocket_closed.apply(null,arguments)},a.___em_js__api_websocket_send=function(){return a.asm.___em_js__api_websocket_send.apply(null,arguments)},a.___em_js__exit_error=function(){return a.asm.___em_js__exit_error.apply(null,arguments)},a.___em_js__get_file_contents=function(){return a.asm.___em_js__get_file_contents.apply(null,arguments)},a.___em_js__get_file_size=function(){return a.asm.___em_js__get_file_size.apply(null,arguments)},a.___em_js__put_file_contents=function(){return a.asm.___em_js__put_file_contents.apply(null,arguments)},a.___em_js__remove_file=function(){return a.asm.___em_js__remove_file.apply(null,arguments)},a.___em_js__show_alert=function(){return a.asm.___em_js__show_alert.apply(null,arguments)},a.___em_js__trace_pop=function(){return a.asm.___em_js__trace_pop.apply(null,arguments)},a.___em_js__trace_push=function(){return a.asm.___em_js__trace_push.apply(null,arguments)},a._emscripten_replace_memory=function(){return a.asm._emscripten_replace_memory.apply(null,arguments)},a._free=function(){return a.asm._free.apply(null,arguments)}),vn=(a._llvm_bswap_i32=function(){return a.asm._llvm_bswap_i32.apply(null,arguments)},a._malloc=function(){return a.asm._malloc.apply(null,arguments)}),gn=(a._memcpy=function(){return a.asm._memcpy.apply(null,arguments)},a._memmove=function(){return a.asm._memmove.apply(null,arguments)},a._memset=function(){return a.asm._memset.apply(null,arguments)},a._sbrk=function(){return a.asm._sbrk.apply(null,arguments)},a._setThrew=function(){return a.asm._setThrew.apply(null,arguments)}),bn=(a.establishStackSpace=function(){return a.asm.establishStackSpace.apply(null,arguments)},a.globalCtors=function(){return a.asm.globalCtors.apply(null,arguments)}),wn=(a.stackAlloc=function(){return a.asm.stackAlloc.apply(null,arguments)},a.stackRestore=function(){return a.asm.stackRestore.apply(null,arguments)}),xn=a.stackSave=function(){return a.asm.stackSave.apply(null,arguments)},An=a.dynCall_i=function(){return a.asm.dynCall_i.apply(null,arguments)},jn=a.dynCall_ii=function(){return a.asm.dynCall_ii.apply(null,arguments)},Cn=(a.dynCall_iidiiii=function(){return a.asm.dynCall_iidiiii.apply(null,arguments)},a.dynCall_iii=function(){return a.asm.dynCall_iii.apply(null,arguments)}),Sn=a.dynCall_iiii=function(){return a.asm.dynCall_iiii.apply(null,arguments)},kn=a.dynCall_iiiii=function(){return a.asm.dynCall_iiiii.apply(null,arguments)},En=a.dynCall_iiiiii=function(){return a.asm.dynCall_iiiiii.apply(null,arguments)},Rn=a.dynCall_ji=function(){return a.asm.dynCall_ji.apply(null,arguments)},Tn=(a.dynCall_jiji=function(){return a.asm.dynCall_jiji.apply(null,arguments)},a.dynCall_v=function(){return a.asm.dynCall_v.apply(null,arguments)}),Dn=a.dynCall_vi=function(){return a.asm.dynCall_vi.apply(null,arguments)},Mn=a.dynCall_vii=function(){return a.asm.dynCall_vii.apply(null,arguments)},Ln=a.dynCall_viii=function(){return a.asm.dynCall_viii.apply(null,arguments)},On=a.dynCall_viiii=function(){return a.asm.dynCall_viiii.apply(null,arguments)},Pn=a.dynCall_viiiii=function(){return a.asm.dynCall_viiiii.apply(null,arguments)},In=(a.dynCall_viiiiii=function(){return a.asm.dynCall_viiiiii.apply(null,arguments)},a.dynCall_viiiiiii=function(){return a.asm.dynCall_viiiiiii.apply(null,arguments)}),Nn=(a.dynCall_viiiiiiiii=function(){return a.asm.dynCall_viiiiiiiii.apply(null,arguments)},a.dynCall_viiiiiiiiii=function(){return a.asm.dynCall_viiiiiiiiii.apply(null,arguments)},a.dynCall_viij=function(){return a.asm.dynCall_viij.apply(null,arguments)}),Fn=a.dynCall_viji=function(){return a.asm.dynCall_viji.apply(null,arguments)};function Un(n){this.name="ExitStatus",this.message="Program terminated with exit("+n+")",this.status=n}a.asm=pn,a.then=function(n){if(a.calledRun)n(a);else{var t=a.onRuntimeInitialized;a.onRuntimeInitialized=function(){t&&t(),n(a)}}return a},Un.prototype=new Error,Un.prototype.constructor=Un;function qn(n){function t(){a.calledRun||(a.calledRun=!0,A||(!0,N(U),N(q),a.onRuntimeInitialized&&a.onRuntimeInitialized(),function(){if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;)W(a.postRun.shift());N(B)}()))}n=n||a.arguments,H>0||(!function(){if(a.preRun)for("function"==typeof a.preRun&&(a.preRun=[a.preRun]);a.preRun.length;)n=a.preRun.shift(),F.unshift(n);var n;N(F)}(),H>0||a.calledRun||(a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),t()},1)):t()))}G=function n(){a.calledRun||qn(),a.calledRun||(G=n)},a.run=qn;function Bn(n){throw a.onAbort&&a.onAbort(n),h(n+=""),v(n),A=!0,1,"abort("+n+"). Build with -s ASSERTIONS=1 for more info."}if(a.abort=Bn,a.preInit)for("function"==typeof a.preInit&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();return a.noExitRuntime=!0,qn(),a.ready=new Promise(function(n,t){delete a.then,a.onAbort=function(n){t(n)},W(function(){n(a)})}),i}}();n.exports=i}).call(this,e(2),"/")},function(n,t,e){n.exports=e(19)},function(n,t,e){var r=function(n){"use strict";var t,e=Object.prototype,r=e.hasOwnProperty,i="function"===typeof Symbol?Symbol:{},o=i.iterator||"@@iterator",a=i.asyncIterator||"@@asyncIterator",u=i.toStringTag||"@@toStringTag";function s(n,t,e,r){var i=t&&t.prototype instanceof m?t:m,o=Object.create(i.prototype),a=new k(r||[]);return o._invoke=function(n,t,e){var r=l;return function(i,o){if(r===f)throw new Error("Generator is already running");if(r===p){if("throw"===i)throw o;return R()}for(e.method=i,e.arg=o;;){var a=e.delegate;if(a){var u=j(a,e);if(u){if(u===d)continue;return u}}if("next"===e.method)e.sent=e._sent=e.arg;else if("throw"===e.method){if(r===l)throw r=p,e.arg;e.dispatchException(e.arg)}else"return"===e.method&&e.abrupt("return",e.arg);r=f;var s=c(n,t,e);if("normal"===s.type){if(r=e.done?p:_,s.arg===d)continue;return{value:s.arg,done:e.done}}"throw"===s.type&&(r=p,e.method="throw",e.arg=s.arg)}}}(n,e,a),o}function c(n,t,e){try{return{type:"normal",arg:n.call(t,e)}}catch(r){return{type:"throw",arg:r}}}n.wrap=s;var l="suspendedStart",_="suspendedYield",f="executing",p="completed",d={};function m(){}function y(){}function h(){}var v={};v[o]=function(){return this};var g=Object.getPrototypeOf,b=g&&g(g(E([])));b&&b!==e&&r.call(b,o)&&(v=b);var w=h.prototype=m.prototype=Object.create(v);function x(n){["next","throw","return"].forEach(function(t){n[t]=function(n){return this._invoke(t,n)}})}function A(n){var t;this._invoke=function(e,i){function o(){return new Promise(function(t,o){!function t(e,i,o,a){var u=c(n[e],n,i);if("throw"!==u.type){var s=u.arg,l=s.value;return l&&"object"===typeof l&&r.call(l,"__await")?Promise.resolve(l.__await).then(function(n){t("next",n,o,a)},function(n){t("throw",n,o,a)}):Promise.resolve(l).then(function(n){s.value=n,o(s)},function(n){return t("throw",n,o,a)})}a(u.arg)}(e,i,t,o)})}return t=t?t.then(o,o):o()}}function j(n,e){var r=n.iterator[e.method];if(r===t){if(e.delegate=null,"throw"===e.method){if(n.iterator.return&&(e.method="return",e.arg=t,j(n,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=c(r,n.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[n.resultName]=o.value,e.next=n.nextLoc,"return"!==e.method&&(e.method="next",e.arg=t),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function C(n){var t={tryLoc:n[0]};1 in n&&(t.catchLoc=n[1]),2 in n&&(t.finallyLoc=n[2],t.afterLoc=n[3]),this.tryEntries.push(t)}function S(n){var t=n.completion||{};t.type="normal",delete t.arg,n.completion=t}function k(n){this.tryEntries=[{tryLoc:"root"}],n.forEach(C,this),this.reset(!0)}function E(n){if(n){var e=n[o];if(e)return e.call(n);if("function"===typeof n.next)return n;if(!isNaN(n.length)){var i=-1,a=function e(){for(;++i=0;--o){var a=this.tryEntries[o],u=a.completion;if("root"===a.tryLoc)return i("end");if(a.tryLoc<=this.prev){var s=r.call(a,"catchLoc"),c=r.call(a,"finallyLoc");if(s&&c){if(this.prev=0;--e){var i=this.tryEntries[e];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev=0;--t){var e=this.tryEntries[t];if(e.finallyLoc===n)return this.complete(e.completion,e.afterLoc),S(e),d}},catch:function(n){for(var t=this.tryEntries.length-1;t>=0;--t){var e=this.tryEntries[t];if(e.tryLoc===n){var r=e.completion;if("throw"===r.type){var i=r.arg;S(e)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(n,e,r){return this.delegate={iterator:E(n),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=t),d}},n}(n.exports);try{regeneratorRuntime=r}catch(i){Function("r","regeneratorRuntime = r")(r)}},function(n,t,e){"use strict";var r=e(0),i=e(5),o=e(21),a=e(11);function u(n){var t=new o(n),e=i(o.prototype.request,t);return r.extend(e,o.prototype,t),r.extend(e,t),e}var s=u(e(8));s.Axios=o,s.create=function(n){return u(a(s.defaults,n))},s.Cancel=e(12),s.CancelToken=e(33),s.isCancel=e(7),s.all=function(n){return Promise.all(n)},s.spread=e(34),n.exports=s,n.exports.default=s},function(n,t){n.exports=function(n){return null!=n&&null!=n.constructor&&"function"===typeof n.constructor.isBuffer&&n.constructor.isBuffer(n)}},function(n,t,e){"use strict";var r=e(0),i=e(6),o=e(22),a=e(23),u=e(11);function s(n){this.defaults=n,this.interceptors={request:new o,response:new o}}s.prototype.request=function(n){"string"===typeof n?(n=arguments[1]||{}).url=arguments[0]:n=n||{},(n=u(this.defaults,n)).method=n.method?n.method.toLowerCase():"get";var t=[a,void 0],e=Promise.resolve(n);for(this.interceptors.request.forEach(function(n){t.unshift(n.fulfilled,n.rejected)}),this.interceptors.response.forEach(function(n){t.push(n.fulfilled,n.rejected)});t.length;)e=e.then(t.shift(),t.shift());return e},s.prototype.getUri=function(n){return n=u(this.defaults,n),i(n.url,n.params,n.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],function(n){s.prototype[n]=function(t,e){return this.request(r.merge(e||{},{method:n,url:t}))}}),r.forEach(["post","put","patch"],function(n){s.prototype[n]=function(t,e,i){return this.request(r.merge(i||{},{method:n,url:t,data:e}))}}),n.exports=s},function(n,t,e){"use strict";var r=e(0);function i(){this.handlers=[]}i.prototype.use=function(n,t){return this.handlers.push({fulfilled:n,rejected:t}),this.handlers.length-1},i.prototype.eject=function(n){this.handlers[n]&&(this.handlers[n]=null)},i.prototype.forEach=function(n){r.forEach(this.handlers,function(t){null!==t&&n(t)})},n.exports=i},function(n,t,e){"use strict";var r=e(0),i=e(24),o=e(7),a=e(8),u=e(31),s=e(32);function c(n){n.cancelToken&&n.cancelToken.throwIfRequested()}n.exports=function(n){return c(n),n.baseURL&&!u(n.url)&&(n.url=s(n.baseURL,n.url)),n.headers=n.headers||{},n.data=i(n.data,n.headers,n.transformRequest),n.headers=r.merge(n.headers.common||{},n.headers[n.method]||{},n.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],function(t){delete n.headers[t]}),(n.adapter||a.adapter)(n).then(function(t){return c(n),t.data=i(t.data,t.headers,n.transformResponse),t},function(t){return o(t)||(c(n),t&&t.response&&(t.response.data=i(t.response.data,t.response.headers,n.transformResponse))),Promise.reject(t)})}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t,e){return r.forEach(e,function(e){n=e(n,t)}),n}},function(n,t,e){"use strict";var r=e(0);n.exports=function(n,t){r.forEach(n,function(e,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(n[t]=e,delete n[r])})}},function(n,t,e){"use strict";var r=e(10);n.exports=function(n,t,e){var i=e.config.validateStatus;!i||i(e.status)?n(e):t(r("Request failed with status code "+e.status,e.config,null,e.request,e))}},function(n,t,e){"use strict";n.exports=function(n,t,e,r,i){return n.config=t,e&&(n.code=e),n.request=r,n.response=i,n.isAxiosError=!0,n.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},n}},function(n,t,e){"use strict";var r=e(0),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];n.exports=function(n){var t,e,o,a={};return n?(r.forEach(n.split("\n"),function(n){if(o=n.indexOf(":"),t=r.trim(n.substr(0,o)).toLowerCase(),e=r.trim(n.substr(o+1)),t){if(a[t]&&i.indexOf(t)>=0)return;a[t]="set-cookie"===t?(a[t]?a[t]:[]).concat([e]):a[t]?a[t]+", "+e:e}}),a):a}},function(n,t,e){"use strict";var r=e(0);n.exports=r.isStandardBrowserEnv()?function(){var n,t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");function i(n){var r=n;return t&&(e.setAttribute("href",r),r=e.href),e.setAttribute("href",r),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return n=i(window.location.href),function(t){var e=r.isString(t)?i(t):t;return e.protocol===n.protocol&&e.host===n.host}}():function(){return!0}},function(n,t,e){"use strict";var r=e(0);n.exports=r.isStandardBrowserEnv()?{write:function(n,t,e,i,o,a){var u=[];u.push(n+"="+encodeURIComponent(t)),r.isNumber(e)&&u.push("expires="+new Date(e).toGMTString()),r.isString(i)&&u.push("path="+i),r.isString(o)&&u.push("domain="+o),!0===a&&u.push("secure"),document.cookie=u.join("; ")},read:function(n){var t=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(n){this.write(n,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(n,t,e){"use strict";n.exports=function(n){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(n)}},function(n,t,e){"use strict";n.exports=function(n,t){return t?n.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):n}},function(n,t,e){"use strict";var r=e(12);function i(n){if("function"!==typeof n)throw new TypeError("executor must be a function.");var t;this.promise=new Promise(function(n){t=n});var e=this;n(function(n){e.reason||(e.reason=new r(n),t(e.reason))})}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var n;return{token:new i(function(t){n=t}),cancel:n}},n.exports=i},function(n,t,e){"use strict";n.exports=function(n){return function(t){return n.apply(null,t)}}},function(n,t,e){"use strict";function r(n,t){return function(n){if(Array.isArray(n))return n}(n)||function(n,t){var e=[],r=!0,i=!1,o=void 0;try{for(var a,u=n[Symbol.iterator]();!(r=(a=u.next()).done)&&(e.push(a.value),!t||e.length!==t);r=!0);}catch(s){i=!0,o=s}finally{try{r||null==u.return||u.return()}finally{if(i)throw o}}return e}(n,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}e.r(t);var i=e(1),o=e.n(i);function a(n){return function(n){if(Array.isArray(n)){for(var t=0,e=new Array(n.length);t>8;var e=3,o=!0,a=!1,u=void 0;try{for(var s,c=i[Symbol.iterator]();!(o=(s=c.next()).done);o=!0){var l=s.value;t.set(l,e),e+=l.byteLength}}catch(_){a=!0,u=_}finally{try{o||null==c.return||c.return()}finally{if(a)throw u}}r.send(t),i.length=0}},100):r.close(),e(0)},function(n){e(n)}),a}var x=1466809,A=1337416,j=self,C=null,S=null,k=null,E=null,R=null,T=null,D=!1,M=null,L=1<<20,O=function(){function n(t){!function(n,t){if(!(n instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n);var e=new XMLHttpRequest;e.open("HEAD",t,!1),e.send(),(e.status<200||e.status>=300)&&j.postMessage({action:"error",error:"Failed to load remote file"}),this.byteLength=parseInt(e.getResponseHeader("Content-Length")),this.url=t,this.buffer=new Uint8Array(this.byteLength),this.chunks=new Uint8Array(this.byteLength+L-1>>20|0)}var t,e,r;return t=n,(e=[{key:"subarray",value:function(n,t){for(var e=n/L|0,r=(t+L-1)/L|0,i=r,o=e,a=e;a=300)j.postMessage({action:"error",error:"Failed to load remote file"});else{var s,c=u.getResponseHeader("Content-Range"),l=0;c&&(s=c.match(/bytes (\d+)-(\d+)\/(\d+)/))&&(l=parseInt(s[1])),this.buffer.set(new Uint8Array(u.response),l),e=(l+L-1)/L|0,r=(l+u.response.byteLength+L-1)/L|0;for(var _=e;_=0?D?"spawn".concat(n,".sv"):"single_".concat(n,".sv"):null})},get_file_size:function(n){var t=E.get(n.toLowerCase());return t?t.byteLength:0},get_file_contents:function(n,t,e){var r=E.get(n.toLowerCase());r&&t.set(r.subarray(e,e+t.byteLength))},put_file_contents:function(n,t){n=n.toLowerCase(),E.set(n,t),j.postMessage({action:"fs",func:"update",params:[n,t]})},remove_file:function(n){n=n.toLowerCase(),E.delete(n),j.postMessage({action:"fs",func:"delete",params:[n]})},set_cursor:function(n,t){j.postMessage({action:"cursor",x:n,y:t})},open_keyboard:function(){for(var n=arguments.length,t=new Array(n),e=0;e>16&255,o=r>>8&255,a=255&r;S.fillStyle="rgb(".concat(i,", ").concat(o,", ").concat(a,")"),S.fillText(e,n,t+22)},draw_end:function(){S.restore();var n=C.transferToImageBitmap(),t=[n];T&&t.push(T.buffer),j.postMessage({action:"render",batch:{bitmap:n,belt:T}},t),T=null},draw_belt:function(n){T=n.slice()}},F=null,U=null,q=0,B=0;["create_sound_raw","create_sound","duplicate_sound"].forEach(function(n){P[n]=function(){for(var t=arguments.length,e=new Array(t),r=0;r=q?F.push({func:n,params:e}):j.postMessage({action:"audio",func:n,params:e})}});var W=null;P.websocket_send=function(n){M?M.send(n):W?W.push(n.slice().buffer):j.postMessage({action:"packet",buffer:n})},j.DApi=P;var H=null;function z(n){try{n()}catch(t){j.postMessage({action:"error",error:t.toString(),stack:t.stack})}}function G(n){for(var t=arguments.length,e=new Array(t>1?t-1:0),r=1;r undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\n\n\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\n\n\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n } // Force an array if not already something iterable\n\n\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction merge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction deepMerge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\n\n\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};","module.exports = require(\"regenerator-runtime\");\n","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n} // path.resolve([from ...], to)\n// posix version\n\n\nexports.resolve = function () {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries\n\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}; // path.normalize(path)\n// posix version\n\n\nexports.normalize = function (path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/'; // Normalize the path\n\n path = normalizeArray(filter(path.split('/'), function (p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n}; // posix version\n\n\nexports.isAbsolute = function (path) {\n return path.charAt(0) === '/';\n}; // posix version\n\n\nexports.join = function () {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function (p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n\n return p;\n }).join('/'));\n}; // path.relative(from, to)\n// posix version\n\n\nexports.relative = function (from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47\n /*/*/\n ;\n var end = -1;\n var matchedSlash = true;\n\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n} // Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\n\n\nexports.basename = function (path, ext) {\n var f = basename(path);\n\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0;\n\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n\n return path.slice(startDot, end);\n};\n\nfunction filter(xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n\n return res;\n} // String.prototype.substr - negative index don't work in IE8\n\n\nvar substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {\n return str.substr(start, len);\n} : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n return fn.apply(thisArg, args);\n };\n};","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\n\n\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};","'use strict';\n\nvar utils = require('./utils');\n\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter; // Only Node.JS has a process variable that is of [[Class]] process\n\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n }\n\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) {\n /* Ignore */\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\nmodule.exports = defaults;","'use strict';\n\nvar utils = require('./../utils');\n\nvar settle = require('./../core/settle');\n\nvar buildURL = require('./../helpers/buildURL');\n\nvar parseHeaders = require('./../helpers/parseHeaders');\n\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\n\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest(); // HTTP basic authentication\n\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); // Set the request timeout in MS\n\n request.timeout = config.timeout; // Listen for ready state\n\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n } // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n\n\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n } // Prepare the response\n\n\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n settle(resolve, reject, response); // Clean up request\n\n request = null;\n }; // Handle browser request cancellation (as opposed to a manual cancellation)\n\n\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Handle low level network errors\n\n\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request)); // Clean up request\n\n request = null;\n }; // Handle timeout\n\n\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies'); // Add xsrf header\n\n\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n } // Add headers to the request\n\n\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n } // Add withCredentials to request if needed\n\n\n if (config.withCredentials) {\n request.withCredentials = true;\n } // Add responseType to request if needed\n\n\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n } // Handle progress if needed\n\n\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n } // Not all browsers support upload events\n\n\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel); // Clean up request\n\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n } // Send the request\n\n\n request.send(requestData);\n });\n};","'use strict';\n\nvar enhanceError = require('./enhanceError');\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\n\n\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};","'use strict';\n\nvar utils = require('../utils');\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\n\n\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n utils.forEach(['baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath'], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n return config;\n};","'use strict';\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\n\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\nmodule.exports = Cancel;","module.exports = __webpack_public_path__ + \"static/media/Diablo.570bd59a.wasm\";","\r\nvar Diablo = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(Diablo) {\r\n Diablo = Diablo || {};\r\n\r\n// Copyright 2010 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof Diablo !== 'undefined' ? Diablo : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// Determine the runtime environment we are in. You can customize this by\r\n// setting the ENVIRONMENT setting at compile time (see settings.js).\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_HAS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n// A web environment like Electron.js can have Node enabled, so we must\r\n// distinguish between Node-enabled environments and Node environments per se.\r\n// This will allow the former to do things like mount NODEFS.\r\n// Extended check using process.versions fixes issue #8816.\r\n// (Also makes redundant the original check that 'require' is a function.)\r\nENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\r\nENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\n// Hooks that are implemented differently in different runtime environments.\r\nvar read_,\r\n readAsync,\r\n readBinary,\r\n setWindowTitle;\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n read_ = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n readBinary = function readBinary(filename) {\r\n var ret = read_(filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', abort);\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n read_ = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n readBinary = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\r\n scriptDirectory = self.location.href;\r\n } else if (document.currentScript) { // web\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\r\n // and scriptDirectory will correctly be replaced with an empty string.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n read_ = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n readBinary = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n readAsync = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n setWindowTitle = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\r\n\r\n// TODO remove when SDL2 is fixed; also add the above assertion\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n if (end > _emscripten_get_heap_size()) {\r\n abort();\r\n }\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n return Math.ceil(size / factor) * factor;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// Wraps a JS function as a wasm function with a given signature.\r\n// In the future, we may get a WebAssembly.Function constructor. Until then,\r\n// we create a wasm module that takes the JS function as an import with a given\r\n// signature, and re-exports that as a wasm function.\r\nfunction convertJsFunctionToWasm(func, sig) {\r\n\r\n // The module is static, with the exception of the type section, which is\r\n // generated based on the signature passed in.\r\n var typeSection = [\r\n 0x01, // id: section,\r\n 0x00, // length: 0 (placeholder)\r\n 0x01, // count: 1\r\n 0x60, // form: func\r\n ];\r\n var sigRet = sig.slice(0, 1);\r\n var sigParam = sig.slice(1);\r\n var typeCodes = {\r\n 'i': 0x7f, // i32\r\n 'j': 0x7e, // i64\r\n 'f': 0x7d, // f32\r\n 'd': 0x7c, // f64\r\n };\r\n\r\n // Parameters, length + signatures\r\n typeSection.push(sigParam.length);\r\n for (var i = 0; i < sigParam.length; ++i) {\r\n typeSection.push(typeCodes[sigParam[i]]);\r\n }\r\n\r\n // Return values, length + signatures\r\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\r\n if (sigRet == 'v') {\r\n typeSection.push(0x00);\r\n } else {\r\n typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\r\n }\r\n\r\n // Write the overall length of the type section back into the section header\r\n // (excepting the 2 bytes for the section id and length)\r\n typeSection[1] = typeSection.length - 2;\r\n\r\n // Rest of the module is static\r\n var bytes = new Uint8Array([\r\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\r\n 0x01, 0x00, 0x00, 0x00, // version: 1\r\n ].concat(typeSection, [\r\n 0x02, 0x07, // import section\r\n // (import \"e\" \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\r\n 0x07, 0x05, // export section\r\n // (export \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x66, 0x00, 0x00,\r\n ]));\r\n\r\n // We can compile this wasm module synchronously because it is very small.\r\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\r\n var module = new WebAssembly.Module(bytes);\r\n var instance = new WebAssembly.Instance(module, {\r\n e: {\r\n f: func\r\n }\r\n });\r\n var wrappedFunc = instance.exports.f;\r\n return wrappedFunc;\r\n}\r\n\r\n// Add a wasm function to the table.\r\nfunction addFunctionWasm(func, sig) {\r\n var table = wasmTable;\r\n var ret = table.length;\r\n\r\n // Grow the table\r\n try {\r\n table.grow(1);\r\n } catch (err) {\r\n if (!err instanceof RangeError) {\r\n throw err;\r\n }\r\n throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.';\r\n }\r\n\r\n // Insert new element\r\n try {\r\n // Attempting to call this with JS function will cause of table.set() to fail\r\n table.set(ret, func);\r\n } catch (err) {\r\n if (!err instanceof TypeError) {\r\n throw err;\r\n }\r\n assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');\r\n var wrapped = convertJsFunctionToWasm(func, sig);\r\n table.set(ret, wrapped);\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction removeFunctionWasm(index) {\r\n // TODO(sbc): Look into implementing this to allow re-using of table slots\r\n}\r\n\r\n// 'sig' parameter is required for the llvm backend but only when func is not\r\n// already a WebAssembly function.\r\nfunction addFunction(func, sig) {\r\n\r\n\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n\r\n}\r\n\r\nfunction removeFunction(index) {\r\n\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\nvar tempRet0 = 0;\r\n\r\nvar setTempRet0 = function(value) {\r\n tempRet0 = value;\r\n};\r\n\r\nvar getTempRet0 = function() {\r\n return tempRet0;\r\n};\r\n\r\n\r\nvar Runtime = {\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\nif (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n}\r\n\r\n\r\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\r\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// Wasm globals\r\n\r\nvar wasmMemory;\r\n\r\n// Potentially used for direct table calls.\r\nvar wasmTable;\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\n// whether we are quitting the application. no code should run after this.\r\n// set in exit() and abort()\r\nvar ABORT = false;\r\n\r\n// set by exit() and abort(). Passed to 'onExit' handler.\r\n// NOTE: This is also used as the process return code code in shell environments\r\n// but only when noExitRuntime is false.\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n // For fast lookup of conversion functions\r\n var toC = {\r\n 'string': function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n },\r\n 'array': function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n }\r\n };\r\n\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return UTF8ToString(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 3; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [_malloc,\r\n stackAlloc,\r\n dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n\r\n\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n abort(\"this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!\");\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAPU8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\n\r\n/**\r\n * @param {number} idx\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\r\n var endIdx = idx + maxBytesToRead;\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\r\n while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var str = '';\r\n // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\r\n while (idx < endPtr) {\r\n // For UTF8 byte structure, see:\r\n // http://en.wikipedia.org/wiki/UTF-8#Description\r\n // https://www.ietf.org/rfc/rfc2279.txt\r\n // https://tools.ietf.org/html/rfc3629\r\n var u0 = u8Array[idx++];\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n var u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n var u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);\r\n }\r\n\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\r\n// copy of that string as a Javascript String object.\r\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\r\n// this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\r\n// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\r\n// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\r\n// not produce a string of exact length [ptr, ptr+maxBytesToRead[)\r\n// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\r\n// throw JS JIT optimizations off, so it is worth to consider consistently using one\r\n// style or the other.\r\n/**\r\n * @param {number} ptr\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ToString(ptr, maxBytesToRead) {\r\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) ++len;\r\n else if (u <= 0x7FF) len += 2;\r\n else if (u <= 0xFFFF) len += 3;\r\n else len += 4;\r\n }\r\n return len;\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (y + ' [' + x + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\n\r\nvar STATIC_BASE = 1024,\r\n STACK_BASE = 1875744,\r\n STACKTOP = STACK_BASE,\r\n STACK_MAX = 7118624,\r\n DYNAMIC_BASE = 7118624,\r\n DYNAMICTOP_PTR = 1875712;\r\n\r\n\r\n\r\n\r\nvar TOTAL_STACK = 5242880;\r\n\r\nvar INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (INITIAL_TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n\r\n\r\n\r\n if (Module['wasmMemory']) {\r\n wasmMemory = Module['wasmMemory'];\r\n } else {\r\n wasmMemory = new WebAssembly.Memory({\r\n 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE\r\n });\r\n }\r\n\r\n\r\nif (wasmMemory) {\r\n buffer = wasmMemory.buffer;\r\n}\r\n\r\n// If the user provides an incorrect length, just use that length instead rather than providing the user to\r\n// specifically provide the memory length with Module['TOTAL_MEMORY'].\r\nINITIAL_TOTAL_MEMORY = buffer.byteLength;\r\nupdateGlobalBufferViews();\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction initRuntime() {\r\n runtimeInitialized = true;\r\n \r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n \r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// Module.preRun (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nvar wasmBinaryFile = 'Diablo.wasm';\r\nif (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n}\r\n\r\nfunction getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (readBinary) {\r\n return readBinary(wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n}\r\n\r\nfunction getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n}\r\n\r\n\r\n\r\n// Create the wasm instance.\r\n// Receives the wasm imports, returns the exports.\r\nfunction createWasm(env) {\r\n\r\n // prepare imports\r\n var info = {\r\n 'env': env\r\n ,\r\n 'global': {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n },\r\n 'global.Math': Math,\r\n 'asm2wasm': asm2wasmImports\r\n };\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n var exports = instance.exports;\r\n Module['asm'] = exports;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\r\n // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\r\n receiveInstance(output['instance']);\r\n }\r\n\r\n\r\n function instantiateArrayBuffer(receiver) {\r\n return getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver, function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n\r\n // Prefer streaming instantiation if available.\r\n function instantiateAsync() {\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\r\n return WebAssembly.instantiateStreaming(response, info)\r\n .then(receiveInstantiatedSource, function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n });\r\n } else {\r\n return instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n }\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n var exports = Module['instantiateWasm'](info, receiveInstance);\r\n return exports;\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n instantiateAsync();\r\n return {}; // no exports yet; we'll fill them in later\r\n}\r\n\r\n// Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n// the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n// doesn't need to care that it is wasm or asm.js.\r\n\r\nModule['asm'] = function(global, env, providedBuffer) {\r\n // memory was already allocated (so js could use the buffer)\r\n env['memory'] = wasmMemory\r\n ;\r\n // import table\r\n env['table'] = wasmTable = new WebAssembly.Table({\r\n 'initial': 1116,\r\n 'maximum': 1116,\r\n 'element': 'anyfunc'\r\n });\r\n // With the wasm backend __memory_base and __table_base and only needed for\r\n // relocatable output.\r\n env['__memory_base'] = 1024; // tell the memory segments where to place themselves\r\n // table starts at 0 by default (even in dynamic linking, for the main module)\r\n env['__table_base'] = 0;\r\n\r\n var exports = createWasm(env);\r\n return exports;\r\n};\r\n\r\n// Globals used by JS i64 conversions\r\nvar tempDouble;\r\nvar tempI64;\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [function($0) { self.DApi.current_save_id($0); }];\r\n\r\nfunction _emscripten_asm_const_ii(code, a0) {\r\n return ASM_CONSTS[code](a0);\r\n}\r\nfunction __api_close_keyboard(){ self.DApi.close_keyboard(); }\r\nfunction __api_open_keyboard(x0,y0,x1,y1,len){ self.DApi.open_keyboard(x0, y0, x1, y1, len); }\r\nfunction _api_create_sound(id,ptr,size){ self.DApi.create_sound(id, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _api_create_sound_float(id,ptr,samples,channels,rate){ self.DApi.create_sound_raw(id, HEAPF32.slice(ptr / 4, ptr / 4 + samples * channels), samples, channels, rate); }\r\nfunction _api_delete_sound(id){ self.DApi.delete_sound(id); }\r\nfunction _api_draw_begin(){ self.DApi.draw_begin(); }\r\nfunction _api_draw_belt(items){ self.DApi.draw_belt(HEAP32.subarray(items / 4, items / 4 + 8)); }\r\nfunction _api_draw_blit(x,y,w,h,ptr){ self.DApi.draw_blit(x, y, w, h, HEAPU8.subarray(ptr, ptr + w * h * 4)); }\r\nfunction _api_draw_clip_text(x0,y0,x1,y1){ self.DApi.draw_clip_text(x0, y0, x1, y1); }\r\nfunction _api_draw_end(){ self.DApi.draw_end(); }\r\nfunction _api_draw_text(x,y,ptr,color){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); self.DApi.draw_text(x, y, text, color); }\r\nfunction _api_duplicate_sound(id,srcId){ self.DApi.duplicate_sound(id, srcId); }\r\nfunction _api_exit_game(){ self.DApi.exit_game(); }\r\nfunction _api_play_sound(id,volume,pan,loop){ self.DApi.play_sound(id, volume, pan, loop); }\r\nfunction _api_set_cursor(x,y){ self.DApi.set_cursor(x, y); }\r\nfunction _api_set_volume(id,volume){ self.DApi.set_volume(id, volume); }\r\nfunction _api_stop_sound(id){ self.DApi.stop_sound(id); }\r\nfunction _api_use_websocket(use){ self.DApi.use_websocket(use); }\r\nfunction _api_websocket_closed(){ return self.DApi.websocket_closed(); }\r\nfunction _api_websocket_send(ptr,size){ self.DApi.websocket_send(HEAPU8.subarray(ptr, ptr + size)); }\r\nfunction _exit_error(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply(null, HEAPU8.subarray( err, end )); self.DApi.exit_error( text ); }\r\nfunction _get_file_contents(path,ptr,offset,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.get_file_contents(text, HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _get_file_size(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); return self.DApi.get_file_size(text); }\r\nfunction _put_file_contents(path,ptr,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end)); self.DApi.put_file_contents(text, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _remove_file(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.remove_file( text ); }\r\nfunction _show_alert(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply( null, HEAPU8.subarray( err, end ) ); self.alert( text ); }\r\nfunction _trace_pop(){ if (self.WASM_TRACE) { self.WASM_TRACE.pop(); } }\r\nfunction _trace_push(ptr){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); console.log(text); self.WASM_TRACE = self.WASM_TRACE || []; self.WASM_TRACE.push(text); }\r\n\r\n\r\n\r\n// STATICTOP = STATIC_BASE + 1874720;\r\n/* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } });\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = 1875728\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + UTF8ToString(condition) + ', at: ' + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n \r\n var ___exception_infos={};\r\n \r\n var ___exception_caught= [];\r\n \r\n function ___exception_addRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount++;\r\n }\r\n \r\n function ___exception_deAdjust(adjusted) {\r\n if (!adjusted || ___exception_infos[adjusted]) return adjusted;\r\n for (var key in ___exception_infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var adj = ___exception_infos[ptr].adjusted;\r\n var len = adj.length;\r\n for (var i = 0; i < len; i++) {\r\n if (adj[i] === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n }\r\n return adjusted;\r\n }function ___cxa_begin_catch(ptr) {\r\n var info = ___exception_infos[ptr];\r\n if (info && !info.caught) {\r\n info.caught = true;\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions--;\r\n }\r\n if (info) info.rethrown = false;\r\n ___exception_caught.push(ptr);\r\n ___exception_addRef(___exception_deAdjust(ptr));\r\n return ptr;\r\n }\r\n\r\n \r\n var ___exception_last=0;\r\n \r\n \r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) {\r\n }\r\n }function ___exception_decRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete ___exception_infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n }\r\n \r\n function ___cxa_end_catch() {\r\n // Clear state flag.\r\n _setThrew(0);\r\n // Call destructor if one is registered then clear it.\r\n var ptr = ___exception_caught.pop();\r\n if (ptr) {\r\n ___exception_decRef(___exception_deAdjust(ptr));\r\n ___exception_last = 0; // XXX in decRef?\r\n }\r\n }\r\n\r\n \r\n \r\n function ___resumeException(ptr) {\r\n if (!___exception_last) { ___exception_last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = ___exception_last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = ___exception_infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = ___cxa_is_pointer_type(throwntype);\r\n // can_catch receives a **, add indirection\r\n var buffer = 1875696;\r\n HEAP32[((buffer)>>2)]=thrown;\r\n thrown = buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && ___cxa_can_catch(typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted.push(thrown);\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }\r\n Module[\"___cxa_find_matching_catch\"] = ___cxa_find_matching_catch;function ___cxa_find_matching_catch_2(a0,a1\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1);\r\n }\r\n\r\n function ___cxa_find_matching_catch_3(a0,a1,a2\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1,a2);\r\n }\r\n\r\n\r\n function ___cxa_get_exception_ptr(ptr) {\r\n // TODO: use info.adjusted?\r\n return ptr;\r\n }\r\n\r\n function ___cxa_pure_virtual() {\r\n ABORT = true;\r\n throw 'Pure virtual function called!';\r\n }\r\n\r\n function ___cxa_throw(ptr, type, destructor) {\r\n ___exception_infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: [ptr],\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n ___exception_last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___cxa_uncaught_exceptions() {\r\n return __ZSt18uncaught_exceptionv.uncaught_exceptions;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n function ___lock() {}\r\n\r\n\r\n \r\n \r\n var PATH={splitPath:function (filename) {\r\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\n return splitPathRe.exec(filename).slice(1);\r\n },normalizeArray:function (parts, allowAboveRoot) {\r\n // if the path tries to go above the root, `up` ends up > 0\r\n var up = 0;\r\n for (var i = parts.length - 1; i >= 0; i--) {\r\n var last = parts[i];\r\n if (last === '.') {\r\n parts.splice(i, 1);\r\n } else if (last === '..') {\r\n parts.splice(i, 1);\r\n up++;\r\n } else if (up) {\r\n parts.splice(i, 1);\r\n up--;\r\n }\r\n }\r\n // if the path is allowed to go above the root, restore leading ..s\r\n if (allowAboveRoot) {\r\n for (; up; up--) {\r\n parts.unshift('..');\r\n }\r\n }\r\n return parts;\r\n },normalize:function (path) {\r\n var isAbsolute = path.charAt(0) === '/',\r\n trailingSlash = path.substr(-1) === '/';\r\n // Normalize the path\r\n path = PATH.normalizeArray(path.split('/').filter(function(p) {\r\n return !!p;\r\n }), !isAbsolute).join('/');\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n return (isAbsolute ? '/' : '') + path;\r\n },dirname:function (path) {\r\n var result = PATH.splitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n return root + dir;\r\n },basename:function (path) {\r\n // EMSCRIPTEN return '/'' for '/', not an empty string\r\n if (path === '/') return '/';\r\n var lastSlash = path.lastIndexOf('/');\r\n if (lastSlash === -1) return path;\r\n return path.substr(lastSlash+1);\r\n },extname:function (path) {\r\n return PATH.splitPath(path)[3];\r\n },join:function () {\r\n var paths = Array.prototype.slice.call(arguments, 0);\r\n return PATH.normalize(paths.join('/'));\r\n },join2:function (l, r) {\r\n return PATH.normalize(l + '/' + r);\r\n }};var SYSCALLS={buffers:[null,[],[]],printChar:function (stream, curr) {\r\n var buffer = SYSCALLS.buffers[stream];\r\n if (curr === 0 || curr === 10) {\r\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\r\n buffer.length = 0;\r\n } else {\r\n buffer.push(curr);\r\n }\r\n },varargs:0,get:function (varargs) {\r\n SYSCALLS.varargs += 4;\r\n var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\r\n return ret;\r\n },getStr:function () {\r\n var ret = UTF8ToString(SYSCALLS.get());\r\n return ret;\r\n },get64:function () {\r\n var low = SYSCALLS.get(), high = SYSCALLS.get();\r\n return low;\r\n },getZero:function () {\r\n SYSCALLS.get();\r\n }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // llseek\r\n var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n \r\n function flush_NO_FILESYSTEM() {\r\n // flush anything remaining in the buffers during shutdown\r\n var fflush = Module[\"_fflush\"];\r\n if (fflush) fflush(0);\r\n var buffers = SYSCALLS.buffers;\r\n if (buffers[1].length) SYSCALLS.printChar(1, 10);\r\n if (buffers[2].length) SYSCALLS.printChar(2, 10);\r\n }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // writev\r\n // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0\r\n var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\r\n var ret = 0;\r\n for (var i = 0; i < iovcnt; i++) {\r\n var ptr = HEAP32[(((iov)+(i*8))>>2)];\r\n var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\r\n for (var j = 0; j < len; j++) {\r\n SYSCALLS.printChar(stream, HEAPU8[ptr+j]);\r\n }\r\n ret += len;\r\n }\r\n return ret;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // ioctl\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // close\r\n var stream = SYSCALLS.getStreamFromFD();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___unlock() {}\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n var _emscripten_asm_const_int=true;\r\n\r\n function _emscripten_get_heap_size() {\r\n return HEAP8.length;\r\n }\r\n\r\n function _exit(status) {\r\n // void _exit(int status);\r\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\r\n exit(status);\r\n }\r\n\r\n \r\n\r\n function _llvm_eh_typeid_for(type) {\r\n return type;\r\n }\r\n\r\n function _llvm_trap() {\r\n abort('trap!');\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n }\r\n \r\n \r\n function abortOnCannotGrowMemory(requestedSize) {\r\n abort('OOM');\r\n }\r\n \r\n function emscripten_realloc_buffer(size) {\r\n var PAGE_MULTIPLE = 65536;\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var oldSize = buffer.byteLength;\r\n // native wasm support\r\n // note that this is *not* threadsafe. multiple threads can call .grow(), and each\r\n // presents a delta, so in theory we may over-allocate here (e.g. if two threads\r\n // ask to grow from 256MB to 512MB, we get 2 requests to add +256MB, and may end\r\n // up growing to 768MB (even though we may have been able to make do with 512MB).\r\n // TODO: consider decreasing the step sizes in emscripten_resize_heap\r\n try {\r\n var result = wasmMemory.grow((size - oldSize) / 65536); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n buffer = wasmMemory.buffer;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n }function _emscripten_resize_heap(requestedSize) {\r\n var oldSize = _emscripten_get_heap_size();\r\n // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\r\n \r\n \r\n var PAGE_MULTIPLE = 65536;\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n \r\n if (requestedSize > LIMIT) {\r\n return false;\r\n }\r\n \r\n var MIN_TOTAL_MEMORY = 16777216;\r\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n \r\n // TODO: see realloc_buffer - for PTHREADS we may want to decrease these jumps\r\n while (newSize < requestedSize) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (newSize <= 536870912) {\r\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n if (!emscripten_realloc_buffer(newSize)) {\r\n return false;\r\n }\r\n \r\n updateGlobalBufferViews();\r\n \r\n \r\n \r\n return true;\r\n } \r\n\r\n function _time(ptr) {\r\n var ret = (Date.now()/1000)|0;\r\n if (ptr) {\r\n HEAP32[((ptr)>>2)]=ret;\r\n }\r\n return ret;\r\n }\r\nvar ASSERTIONS = false;\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array\r\n\r\n\r\nfunction invoke_i(index) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_i(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ii(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ji(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_v(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vi(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viij(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viij(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viji(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nvar asmGlobalArg = {};\r\n\r\nvar asmLibraryArg = {\r\n \"abort\": abort,\r\n \"setTempRet0\": setTempRet0,\r\n \"getTempRet0\": getTempRet0,\r\n \"invoke_i\": invoke_i,\r\n \"invoke_ii\": invoke_ii,\r\n \"invoke_iii\": invoke_iii,\r\n \"invoke_iiii\": invoke_iiii,\r\n \"invoke_iiiii\": invoke_iiiii,\r\n \"invoke_iiiiii\": invoke_iiiiii,\r\n \"invoke_ji\": invoke_ji,\r\n \"invoke_v\": invoke_v,\r\n \"invoke_vi\": invoke_vi,\r\n \"invoke_vii\": invoke_vii,\r\n \"invoke_viii\": invoke_viii,\r\n \"invoke_viiii\": invoke_viiii,\r\n \"invoke_viiiii\": invoke_viiiii,\r\n \"invoke_viiiiiii\": invoke_viiiiiii,\r\n \"invoke_viij\": invoke_viij,\r\n \"invoke_viji\": invoke_viji,\r\n \"___assert_fail\": ___assert_fail,\r\n \"___cxa_allocate_exception\": ___cxa_allocate_exception,\r\n \"___cxa_begin_catch\": ___cxa_begin_catch,\r\n \"___cxa_end_catch\": ___cxa_end_catch,\r\n \"___cxa_find_matching_catch\": ___cxa_find_matching_catch,\r\n \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\r\n \"___cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\r\n \"___cxa_free_exception\": ___cxa_free_exception,\r\n \"___cxa_get_exception_ptr\": ___cxa_get_exception_ptr,\r\n \"___cxa_pure_virtual\": ___cxa_pure_virtual,\r\n \"___cxa_throw\": ___cxa_throw,\r\n \"___cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\r\n \"___exception_addRef\": ___exception_addRef,\r\n \"___exception_deAdjust\": ___exception_deAdjust,\r\n \"___exception_decRef\": ___exception_decRef,\r\n \"___gxx_personality_v0\": ___gxx_personality_v0,\r\n \"___lock\": ___lock,\r\n \"___resumeException\": ___resumeException,\r\n \"___setErrNo\": ___setErrNo,\r\n \"___syscall140\": ___syscall140,\r\n \"___syscall146\": ___syscall146,\r\n \"___syscall54\": ___syscall54,\r\n \"___syscall6\": ___syscall6,\r\n \"___unlock\": ___unlock,\r\n \"__api_close_keyboard\": __api_close_keyboard,\r\n \"__api_open_keyboard\": __api_open_keyboard,\r\n \"_abort\": _abort,\r\n \"_api_create_sound\": _api_create_sound,\r\n \"_api_create_sound_float\": _api_create_sound_float,\r\n \"_api_delete_sound\": _api_delete_sound,\r\n \"_api_draw_begin\": _api_draw_begin,\r\n \"_api_draw_belt\": _api_draw_belt,\r\n \"_api_draw_blit\": _api_draw_blit,\r\n \"_api_draw_clip_text\": _api_draw_clip_text,\r\n \"_api_draw_end\": _api_draw_end,\r\n \"_api_draw_text\": _api_draw_text,\r\n \"_api_duplicate_sound\": _api_duplicate_sound,\r\n \"_api_exit_game\": _api_exit_game,\r\n \"_api_play_sound\": _api_play_sound,\r\n \"_api_set_cursor\": _api_set_cursor,\r\n \"_api_set_volume\": _api_set_volume,\r\n \"_api_stop_sound\": _api_stop_sound,\r\n \"_api_use_websocket\": _api_use_websocket,\r\n \"_api_websocket_closed\": _api_websocket_closed,\r\n \"_api_websocket_send\": _api_websocket_send,\r\n \"_emscripten_asm_const_ii\": _emscripten_asm_const_ii,\r\n \"_emscripten_get_heap_size\": _emscripten_get_heap_size,\r\n \"_emscripten_memcpy_big\": _emscripten_memcpy_big,\r\n \"_emscripten_resize_heap\": _emscripten_resize_heap,\r\n \"_exit\": _exit,\r\n \"_exit_error\": _exit_error,\r\n \"_get_file_contents\": _get_file_contents,\r\n \"_get_file_size\": _get_file_size,\r\n \"_llvm_eh_typeid_for\": _llvm_eh_typeid_for,\r\n \"_llvm_trap\": _llvm_trap,\r\n \"_put_file_contents\": _put_file_contents,\r\n \"_remove_file\": _remove_file,\r\n \"_show_alert\": _show_alert,\r\n \"_time\": _time,\r\n \"_trace_pop\": _trace_pop,\r\n \"_trace_push\": _trace_push,\r\n \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory,\r\n \"emscripten_realloc_buffer\": emscripten_realloc_buffer,\r\n \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM,\r\n \"tempDoublePtr\": tempDoublePtr,\r\n \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR\r\n};\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(asmGlobalArg, asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_AllocPacket = Module[\"_DApi_AllocPacket\"] = function() {\r\n return Module[\"asm\"][\"_DApi_AllocPacket\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Char = Module[\"_DApi_Char\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Char\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Init = Module[\"_DApi_Init\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Init\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Key = Module[\"_DApi_Key\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Key\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Mouse = Module[\"_DApi_Mouse\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Mouse\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Render = Module[\"_DApi_Render\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Render\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncText = Module[\"_DApi_SyncText\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncText\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncTextPtr = Module[\"_DApi_SyncTextPtr\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncTextPtr\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_InitWebsocket = Module[\"_SNet_InitWebsocket\"] = function() {\r\n return Module[\"asm\"][\"_SNet_InitWebsocket\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_WebsocketStatus = Module[\"_SNet_WebsocketStatus\"] = function() {\r\n return Module[\"asm\"][\"_SNet_WebsocketStatus\"].apply(null, arguments)\r\n};\r\n\r\nvar __ZSt18uncaught_exceptionv = Module[\"__ZSt18uncaught_exceptionv\"] = function() {\r\n return Module[\"asm\"][\"__ZSt18uncaught_exceptionv\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() {\r\n return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() {\r\n return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_close_keyboard = Module[\"___em_js___api_close_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_close_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_open_keyboard = Module[\"___em_js___api_open_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_open_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound = Module[\"___em_js__api_create_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound_float = Module[\"___em_js__api_create_sound_float\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound_float\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_delete_sound = Module[\"___em_js__api_delete_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_delete_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_begin = Module[\"___em_js__api_draw_begin\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_begin\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_belt = Module[\"___em_js__api_draw_belt\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_belt\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_blit = Module[\"___em_js__api_draw_blit\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_blit\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_clip_text = Module[\"___em_js__api_draw_clip_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_clip_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_end = Module[\"___em_js__api_draw_end\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_end\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_text = Module[\"___em_js__api_draw_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_duplicate_sound = Module[\"___em_js__api_duplicate_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_duplicate_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_exit_game = Module[\"___em_js__api_exit_game\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_exit_game\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_play_sound = Module[\"___em_js__api_play_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_play_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_cursor = Module[\"___em_js__api_set_cursor\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_cursor\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_volume = Module[\"___em_js__api_set_volume\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_volume\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_stop_sound = Module[\"___em_js__api_stop_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_stop_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_use_websocket = Module[\"___em_js__api_use_websocket\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_use_websocket\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_closed = Module[\"___em_js__api_websocket_closed\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_closed\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_send = Module[\"___em_js__api_websocket_send\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_send\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__exit_error = Module[\"___em_js__exit_error\"] = function() {\r\n return Module[\"asm\"][\"___em_js__exit_error\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_size = Module[\"___em_js__get_file_size\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_size\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__remove_file = Module[\"___em_js__remove_file\"] = function() {\r\n return Module[\"asm\"][\"___em_js__remove_file\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__show_alert = Module[\"___em_js__show_alert\"] = function() {\r\n return Module[\"asm\"][\"___em_js__show_alert\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_pop = Module[\"___em_js__trace_pop\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_pop\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_push = Module[\"___em_js__trace_push\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_push\"].apply(null, arguments)\r\n};\r\n\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() {\r\n return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments)\r\n};\r\n\r\nvar _free = Module[\"_free\"] = function() {\r\n return Module[\"asm\"][\"_free\"].apply(null, arguments)\r\n};\r\n\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() {\r\n return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments)\r\n};\r\n\r\nvar _malloc = Module[\"_malloc\"] = function() {\r\n return Module[\"asm\"][\"_malloc\"].apply(null, arguments)\r\n};\r\n\r\nvar _memcpy = Module[\"_memcpy\"] = function() {\r\n return Module[\"asm\"][\"_memcpy\"].apply(null, arguments)\r\n};\r\n\r\nvar _memmove = Module[\"_memmove\"] = function() {\r\n return Module[\"asm\"][\"_memmove\"].apply(null, arguments)\r\n};\r\n\r\nvar _memset = Module[\"_memset\"] = function() {\r\n return Module[\"asm\"][\"_memset\"].apply(null, arguments)\r\n};\r\n\r\nvar _sbrk = Module[\"_sbrk\"] = function() {\r\n return Module[\"asm\"][\"_sbrk\"].apply(null, arguments)\r\n};\r\n\r\nvar _setThrew = Module[\"_setThrew\"] = function() {\r\n return Module[\"asm\"][\"_setThrew\"].apply(null, arguments)\r\n};\r\n\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() {\r\n return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments)\r\n};\r\n\r\nvar globalCtors = Module[\"globalCtors\"] = function() {\r\n return Module[\"asm\"][\"globalCtors\"].apply(null, arguments)\r\n};\r\n\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() {\r\n return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments)\r\n};\r\n\r\nvar stackRestore = Module[\"stackRestore\"] = function() {\r\n return Module[\"asm\"][\"stackRestore\"].apply(null, arguments)\r\n};\r\n\r\nvar stackSave = Module[\"stackSave\"] = function() {\r\n return Module[\"asm\"][\"stackSave\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_i = Module[\"dynCall_i\"] = function() {\r\n return Module[\"asm\"][\"dynCall_i\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iidiiii = Module[\"dynCall_iidiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iidiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_jiji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() {\r\n return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiii = Module[\"dynCall_viiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiii = Module[\"dynCall_viiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiiii = Module[\"dynCall_viiiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viij = Module[\"dynCall_viij\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viij\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments)\r\n};\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n}\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n initRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n what += '';\r\n out(what);\r\n err(what);\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\n Module[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return Diablo\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = Diablo;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return Diablo; });\r\n else if (typeof exports === 'object')\r\n exports[\"Diablo\"] = Diablo;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","module.exports = __webpack_public_path__ + \"static/media/DiabloSpawn.9c2373b2.wasm\";","\r\nvar DiabloSpawn = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(DiabloSpawn) {\r\n DiabloSpawn = DiabloSpawn || {};\r\n\r\n// Copyright 2010 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof DiabloSpawn !== 'undefined' ? DiabloSpawn : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// Determine the runtime environment we are in. You can customize this by\r\n// setting the ENVIRONMENT setting at compile time (see settings.js).\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_HAS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n// A web environment like Electron.js can have Node enabled, so we must\r\n// distinguish between Node-enabled environments and Node environments per se.\r\n// This will allow the former to do things like mount NODEFS.\r\n// Extended check using process.versions fixes issue #8816.\r\n// (Also makes redundant the original check that 'require' is a function.)\r\nENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\r\nENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\n// Hooks that are implemented differently in different runtime environments.\r\nvar read_,\r\n readAsync,\r\n readBinary,\r\n setWindowTitle;\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n read_ = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n readBinary = function readBinary(filename) {\r\n var ret = read_(filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', abort);\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n read_ = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n readBinary = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\r\n scriptDirectory = self.location.href;\r\n } else if (document.currentScript) { // web\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\r\n // and scriptDirectory will correctly be replaced with an empty string.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n read_ = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n readBinary = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n readAsync = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n setWindowTitle = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\r\n\r\n// TODO remove when SDL2 is fixed; also add the above assertion\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n if (end > _emscripten_get_heap_size()) {\r\n abort();\r\n }\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n return Math.ceil(size / factor) * factor;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// Wraps a JS function as a wasm function with a given signature.\r\n// In the future, we may get a WebAssembly.Function constructor. Until then,\r\n// we create a wasm module that takes the JS function as an import with a given\r\n// signature, and re-exports that as a wasm function.\r\nfunction convertJsFunctionToWasm(func, sig) {\r\n\r\n // The module is static, with the exception of the type section, which is\r\n // generated based on the signature passed in.\r\n var typeSection = [\r\n 0x01, // id: section,\r\n 0x00, // length: 0 (placeholder)\r\n 0x01, // count: 1\r\n 0x60, // form: func\r\n ];\r\n var sigRet = sig.slice(0, 1);\r\n var sigParam = sig.slice(1);\r\n var typeCodes = {\r\n 'i': 0x7f, // i32\r\n 'j': 0x7e, // i64\r\n 'f': 0x7d, // f32\r\n 'd': 0x7c, // f64\r\n };\r\n\r\n // Parameters, length + signatures\r\n typeSection.push(sigParam.length);\r\n for (var i = 0; i < sigParam.length; ++i) {\r\n typeSection.push(typeCodes[sigParam[i]]);\r\n }\r\n\r\n // Return values, length + signatures\r\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\r\n if (sigRet == 'v') {\r\n typeSection.push(0x00);\r\n } else {\r\n typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\r\n }\r\n\r\n // Write the overall length of the type section back into the section header\r\n // (excepting the 2 bytes for the section id and length)\r\n typeSection[1] = typeSection.length - 2;\r\n\r\n // Rest of the module is static\r\n var bytes = new Uint8Array([\r\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\r\n 0x01, 0x00, 0x00, 0x00, // version: 1\r\n ].concat(typeSection, [\r\n 0x02, 0x07, // import section\r\n // (import \"e\" \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\r\n 0x07, 0x05, // export section\r\n // (export \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x66, 0x00, 0x00,\r\n ]));\r\n\r\n // We can compile this wasm module synchronously because it is very small.\r\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\r\n var module = new WebAssembly.Module(bytes);\r\n var instance = new WebAssembly.Instance(module, {\r\n e: {\r\n f: func\r\n }\r\n });\r\n var wrappedFunc = instance.exports.f;\r\n return wrappedFunc;\r\n}\r\n\r\n// Add a wasm function to the table.\r\nfunction addFunctionWasm(func, sig) {\r\n var table = wasmTable;\r\n var ret = table.length;\r\n\r\n // Grow the table\r\n try {\r\n table.grow(1);\r\n } catch (err) {\r\n if (!err instanceof RangeError) {\r\n throw err;\r\n }\r\n throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.';\r\n }\r\n\r\n // Insert new element\r\n try {\r\n // Attempting to call this with JS function will cause of table.set() to fail\r\n table.set(ret, func);\r\n } catch (err) {\r\n if (!err instanceof TypeError) {\r\n throw err;\r\n }\r\n assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');\r\n var wrapped = convertJsFunctionToWasm(func, sig);\r\n table.set(ret, wrapped);\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction removeFunctionWasm(index) {\r\n // TODO(sbc): Look into implementing this to allow re-using of table slots\r\n}\r\n\r\n// 'sig' parameter is required for the llvm backend but only when func is not\r\n// already a WebAssembly function.\r\nfunction addFunction(func, sig) {\r\n\r\n\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n\r\n}\r\n\r\nfunction removeFunction(index) {\r\n\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\nvar tempRet0 = 0;\r\n\r\nvar setTempRet0 = function(value) {\r\n tempRet0 = value;\r\n};\r\n\r\nvar getTempRet0 = function() {\r\n return tempRet0;\r\n};\r\n\r\n\r\nvar Runtime = {\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\nif (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n}\r\n\r\n\r\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\r\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// Wasm globals\r\n\r\nvar wasmMemory;\r\n\r\n// Potentially used for direct table calls.\r\nvar wasmTable;\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\n// whether we are quitting the application. no code should run after this.\r\n// set in exit() and abort()\r\nvar ABORT = false;\r\n\r\n// set by exit() and abort(). Passed to 'onExit' handler.\r\n// NOTE: This is also used as the process return code code in shell environments\r\n// but only when noExitRuntime is false.\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n // For fast lookup of conversion functions\r\n var toC = {\r\n 'string': function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n },\r\n 'array': function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n }\r\n };\r\n\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return UTF8ToString(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 3; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [_malloc,\r\n stackAlloc,\r\n dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n\r\n\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n abort(\"this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!\");\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAPU8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\n\r\n/**\r\n * @param {number} idx\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\r\n var endIdx = idx + maxBytesToRead;\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\r\n while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var str = '';\r\n // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\r\n while (idx < endPtr) {\r\n // For UTF8 byte structure, see:\r\n // http://en.wikipedia.org/wiki/UTF-8#Description\r\n // https://www.ietf.org/rfc/rfc2279.txt\r\n // https://tools.ietf.org/html/rfc3629\r\n var u0 = u8Array[idx++];\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n var u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n var u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);\r\n }\r\n\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\r\n// copy of that string as a Javascript String object.\r\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\r\n// this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\r\n// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\r\n// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\r\n// not produce a string of exact length [ptr, ptr+maxBytesToRead[)\r\n// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\r\n// throw JS JIT optimizations off, so it is worth to consider consistently using one\r\n// style or the other.\r\n/**\r\n * @param {number} ptr\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ToString(ptr, maxBytesToRead) {\r\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) ++len;\r\n else if (u <= 0x7FF) len += 2;\r\n else if (u <= 0xFFFF) len += 3;\r\n else len += 4;\r\n }\r\n return len;\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (y + ' [' + x + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\n\r\nvar STATIC_BASE = 1024,\r\n STACK_BASE = 1850928,\r\n STACKTOP = STACK_BASE,\r\n STACK_MAX = 7093808,\r\n DYNAMIC_BASE = 7093808,\r\n DYNAMICTOP_PTR = 1850896;\r\n\r\n\r\n\r\n\r\nvar TOTAL_STACK = 5242880;\r\n\r\nvar INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (INITIAL_TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n\r\n\r\n\r\n if (Module['wasmMemory']) {\r\n wasmMemory = Module['wasmMemory'];\r\n } else {\r\n wasmMemory = new WebAssembly.Memory({\r\n 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE\r\n });\r\n }\r\n\r\n\r\nif (wasmMemory) {\r\n buffer = wasmMemory.buffer;\r\n}\r\n\r\n// If the user provides an incorrect length, just use that length instead rather than providing the user to\r\n// specifically provide the memory length with Module['TOTAL_MEMORY'].\r\nINITIAL_TOTAL_MEMORY = buffer.byteLength;\r\nupdateGlobalBufferViews();\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction initRuntime() {\r\n runtimeInitialized = true;\r\n \r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n \r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// Module.preRun (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nvar wasmBinaryFile = 'DiabloSpawn.wasm';\r\nif (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n}\r\n\r\nfunction getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (readBinary) {\r\n return readBinary(wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n}\r\n\r\nfunction getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n}\r\n\r\n\r\n\r\n// Create the wasm instance.\r\n// Receives the wasm imports, returns the exports.\r\nfunction createWasm(env) {\r\n\r\n // prepare imports\r\n var info = {\r\n 'env': env\r\n ,\r\n 'global': {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n },\r\n 'global.Math': Math,\r\n 'asm2wasm': asm2wasmImports\r\n };\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n var exports = instance.exports;\r\n Module['asm'] = exports;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\r\n // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\r\n receiveInstance(output['instance']);\r\n }\r\n\r\n\r\n function instantiateArrayBuffer(receiver) {\r\n return getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver, function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n\r\n // Prefer streaming instantiation if available.\r\n function instantiateAsync() {\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\r\n return WebAssembly.instantiateStreaming(response, info)\r\n .then(receiveInstantiatedSource, function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n });\r\n } else {\r\n return instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n }\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n var exports = Module['instantiateWasm'](info, receiveInstance);\r\n return exports;\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n instantiateAsync();\r\n return {}; // no exports yet; we'll fill them in later\r\n}\r\n\r\n// Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n// the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n// doesn't need to care that it is wasm or asm.js.\r\n\r\nModule['asm'] = function(global, env, providedBuffer) {\r\n // memory was already allocated (so js could use the buffer)\r\n env['memory'] = wasmMemory\r\n ;\r\n // import table\r\n env['table'] = wasmTable = new WebAssembly.Table({\r\n 'initial': 1116,\r\n 'maximum': 1116,\r\n 'element': 'anyfunc'\r\n });\r\n // With the wasm backend __memory_base and __table_base and only needed for\r\n // relocatable output.\r\n env['__memory_base'] = 1024; // tell the memory segments where to place themselves\r\n // table starts at 0 by default (even in dynamic linking, for the main module)\r\n env['__table_base'] = 0;\r\n\r\n var exports = createWasm(env);\r\n return exports;\r\n};\r\n\r\n// Globals used by JS i64 conversions\r\nvar tempDouble;\r\nvar tempI64;\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [function($0) { self.DApi.current_save_id($0); }];\r\n\r\nfunction _emscripten_asm_const_ii(code, a0) {\r\n return ASM_CONSTS[code](a0);\r\n}\r\nfunction __api_close_keyboard(){ self.DApi.close_keyboard(); }\r\nfunction __api_open_keyboard(x0,y0,x1,y1,len){ self.DApi.open_keyboard(x0, y0, x1, y1, len); }\r\nfunction _api_create_sound(id,ptr,size){ self.DApi.create_sound(id, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _api_create_sound_float(id,ptr,samples,channels,rate){ self.DApi.create_sound_raw(id, HEAPF32.slice(ptr / 4, ptr / 4 + samples * channels), samples, channels, rate); }\r\nfunction _api_delete_sound(id){ self.DApi.delete_sound(id); }\r\nfunction _api_draw_begin(){ self.DApi.draw_begin(); }\r\nfunction _api_draw_belt(items){ self.DApi.draw_belt(HEAP32.subarray(items / 4, items / 4 + 8)); }\r\nfunction _api_draw_blit(x,y,w,h,ptr){ self.DApi.draw_blit(x, y, w, h, HEAPU8.subarray(ptr, ptr + w * h * 4)); }\r\nfunction _api_draw_clip_text(x0,y0,x1,y1){ self.DApi.draw_clip_text(x0, y0, x1, y1); }\r\nfunction _api_draw_end(){ self.DApi.draw_end(); }\r\nfunction _api_draw_text(x,y,ptr,color){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); self.DApi.draw_text(x, y, text, color); }\r\nfunction _api_duplicate_sound(id,srcId){ self.DApi.duplicate_sound(id, srcId); }\r\nfunction _api_exit_game(){ self.DApi.exit_game(); }\r\nfunction _api_play_sound(id,volume,pan,loop){ self.DApi.play_sound(id, volume, pan, loop); }\r\nfunction _api_set_cursor(x,y){ self.DApi.set_cursor(x, y); }\r\nfunction _api_set_volume(id,volume){ self.DApi.set_volume(id, volume); }\r\nfunction _api_stop_sound(id){ self.DApi.stop_sound(id); }\r\nfunction _api_use_websocket(use){ self.DApi.use_websocket(use); }\r\nfunction _api_websocket_closed(){ return self.DApi.websocket_closed(); }\r\nfunction _api_websocket_send(ptr,size){ self.DApi.websocket_send(HEAPU8.subarray(ptr, ptr + size)); }\r\nfunction _exit_error(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply(null, HEAPU8.subarray( err, end )); self.DApi.exit_error( text ); }\r\nfunction _get_file_contents(path,ptr,offset,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.get_file_contents(text, HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _get_file_size(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); return self.DApi.get_file_size(text); }\r\nfunction _put_file_contents(path,ptr,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end)); self.DApi.put_file_contents(text, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _remove_file(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.remove_file( text ); }\r\nfunction _show_alert(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply( null, HEAPU8.subarray( err, end ) ); self.alert( text ); }\r\nfunction _trace_pop(){ if (self.WASM_TRACE) { self.WASM_TRACE.pop(); } }\r\nfunction _trace_push(ptr){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); console.log(text); self.WASM_TRACE = self.WASM_TRACE || []; self.WASM_TRACE.push(text); }\r\n\r\n\r\n\r\n// STATICTOP = STATIC_BASE + 1849904;\r\n/* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } });\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = 1850912\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + UTF8ToString(condition) + ', at: ' + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n \r\n var ___exception_infos={};\r\n \r\n var ___exception_caught= [];\r\n \r\n function ___exception_addRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount++;\r\n }\r\n \r\n function ___exception_deAdjust(adjusted) {\r\n if (!adjusted || ___exception_infos[adjusted]) return adjusted;\r\n for (var key in ___exception_infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var adj = ___exception_infos[ptr].adjusted;\r\n var len = adj.length;\r\n for (var i = 0; i < len; i++) {\r\n if (adj[i] === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n }\r\n return adjusted;\r\n }function ___cxa_begin_catch(ptr) {\r\n var info = ___exception_infos[ptr];\r\n if (info && !info.caught) {\r\n info.caught = true;\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions--;\r\n }\r\n if (info) info.rethrown = false;\r\n ___exception_caught.push(ptr);\r\n ___exception_addRef(___exception_deAdjust(ptr));\r\n return ptr;\r\n }\r\n\r\n \r\n var ___exception_last=0;\r\n \r\n \r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) {\r\n }\r\n }function ___exception_decRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete ___exception_infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n }\r\n \r\n function ___cxa_end_catch() {\r\n // Clear state flag.\r\n _setThrew(0);\r\n // Call destructor if one is registered then clear it.\r\n var ptr = ___exception_caught.pop();\r\n if (ptr) {\r\n ___exception_decRef(___exception_deAdjust(ptr));\r\n ___exception_last = 0; // XXX in decRef?\r\n }\r\n }\r\n\r\n \r\n \r\n function ___resumeException(ptr) {\r\n if (!___exception_last) { ___exception_last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = ___exception_last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = ___exception_infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = ___cxa_is_pointer_type(throwntype);\r\n // can_catch receives a **, add indirection\r\n var buffer = 1850880;\r\n HEAP32[((buffer)>>2)]=thrown;\r\n thrown = buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && ___cxa_can_catch(typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted.push(thrown);\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }\r\n Module[\"___cxa_find_matching_catch\"] = ___cxa_find_matching_catch;function ___cxa_find_matching_catch_2(a0,a1\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1);\r\n }\r\n\r\n function ___cxa_find_matching_catch_3(a0,a1,a2\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1,a2);\r\n }\r\n\r\n\r\n function ___cxa_get_exception_ptr(ptr) {\r\n // TODO: use info.adjusted?\r\n return ptr;\r\n }\r\n\r\n function ___cxa_pure_virtual() {\r\n ABORT = true;\r\n throw 'Pure virtual function called!';\r\n }\r\n\r\n function ___cxa_throw(ptr, type, destructor) {\r\n ___exception_infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: [ptr],\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n ___exception_last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___cxa_uncaught_exceptions() {\r\n return __ZSt18uncaught_exceptionv.uncaught_exceptions;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n function ___lock() {}\r\n\r\n\r\n \r\n \r\n var PATH={splitPath:function (filename) {\r\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\n return splitPathRe.exec(filename).slice(1);\r\n },normalizeArray:function (parts, allowAboveRoot) {\r\n // if the path tries to go above the root, `up` ends up > 0\r\n var up = 0;\r\n for (var i = parts.length - 1; i >= 0; i--) {\r\n var last = parts[i];\r\n if (last === '.') {\r\n parts.splice(i, 1);\r\n } else if (last === '..') {\r\n parts.splice(i, 1);\r\n up++;\r\n } else if (up) {\r\n parts.splice(i, 1);\r\n up--;\r\n }\r\n }\r\n // if the path is allowed to go above the root, restore leading ..s\r\n if (allowAboveRoot) {\r\n for (; up; up--) {\r\n parts.unshift('..');\r\n }\r\n }\r\n return parts;\r\n },normalize:function (path) {\r\n var isAbsolute = path.charAt(0) === '/',\r\n trailingSlash = path.substr(-1) === '/';\r\n // Normalize the path\r\n path = PATH.normalizeArray(path.split('/').filter(function(p) {\r\n return !!p;\r\n }), !isAbsolute).join('/');\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n return (isAbsolute ? '/' : '') + path;\r\n },dirname:function (path) {\r\n var result = PATH.splitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n return root + dir;\r\n },basename:function (path) {\r\n // EMSCRIPTEN return '/'' for '/', not an empty string\r\n if (path === '/') return '/';\r\n var lastSlash = path.lastIndexOf('/');\r\n if (lastSlash === -1) return path;\r\n return path.substr(lastSlash+1);\r\n },extname:function (path) {\r\n return PATH.splitPath(path)[3];\r\n },join:function () {\r\n var paths = Array.prototype.slice.call(arguments, 0);\r\n return PATH.normalize(paths.join('/'));\r\n },join2:function (l, r) {\r\n return PATH.normalize(l + '/' + r);\r\n }};var SYSCALLS={buffers:[null,[],[]],printChar:function (stream, curr) {\r\n var buffer = SYSCALLS.buffers[stream];\r\n if (curr === 0 || curr === 10) {\r\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\r\n buffer.length = 0;\r\n } else {\r\n buffer.push(curr);\r\n }\r\n },varargs:0,get:function (varargs) {\r\n SYSCALLS.varargs += 4;\r\n var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\r\n return ret;\r\n },getStr:function () {\r\n var ret = UTF8ToString(SYSCALLS.get());\r\n return ret;\r\n },get64:function () {\r\n var low = SYSCALLS.get(), high = SYSCALLS.get();\r\n return low;\r\n },getZero:function () {\r\n SYSCALLS.get();\r\n }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // llseek\r\n var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n \r\n function flush_NO_FILESYSTEM() {\r\n // flush anything remaining in the buffers during shutdown\r\n var fflush = Module[\"_fflush\"];\r\n if (fflush) fflush(0);\r\n var buffers = SYSCALLS.buffers;\r\n if (buffers[1].length) SYSCALLS.printChar(1, 10);\r\n if (buffers[2].length) SYSCALLS.printChar(2, 10);\r\n }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // writev\r\n // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0\r\n var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\r\n var ret = 0;\r\n for (var i = 0; i < iovcnt; i++) {\r\n var ptr = HEAP32[(((iov)+(i*8))>>2)];\r\n var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\r\n for (var j = 0; j < len; j++) {\r\n SYSCALLS.printChar(stream, HEAPU8[ptr+j]);\r\n }\r\n ret += len;\r\n }\r\n return ret;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // ioctl\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // close\r\n var stream = SYSCALLS.getStreamFromFD();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___unlock() {}\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n var _emscripten_asm_const_int=true;\r\n\r\n function _emscripten_get_heap_size() {\r\n return HEAP8.length;\r\n }\r\n\r\n function _exit(status) {\r\n // void _exit(int status);\r\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\r\n exit(status);\r\n }\r\n\r\n \r\n\r\n function _llvm_eh_typeid_for(type) {\r\n return type;\r\n }\r\n\r\n function _llvm_trap() {\r\n abort('trap!');\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n }\r\n \r\n \r\n function abortOnCannotGrowMemory(requestedSize) {\r\n abort('OOM');\r\n }\r\n \r\n function emscripten_realloc_buffer(size) {\r\n var PAGE_MULTIPLE = 65536;\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var oldSize = buffer.byteLength;\r\n // native wasm support\r\n // note that this is *not* threadsafe. multiple threads can call .grow(), and each\r\n // presents a delta, so in theory we may over-allocate here (e.g. if two threads\r\n // ask to grow from 256MB to 512MB, we get 2 requests to add +256MB, and may end\r\n // up growing to 768MB (even though we may have been able to make do with 512MB).\r\n // TODO: consider decreasing the step sizes in emscripten_resize_heap\r\n try {\r\n var result = wasmMemory.grow((size - oldSize) / 65536); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n buffer = wasmMemory.buffer;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n }function _emscripten_resize_heap(requestedSize) {\r\n var oldSize = _emscripten_get_heap_size();\r\n // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\r\n \r\n \r\n var PAGE_MULTIPLE = 65536;\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n \r\n if (requestedSize > LIMIT) {\r\n return false;\r\n }\r\n \r\n var MIN_TOTAL_MEMORY = 16777216;\r\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n \r\n // TODO: see realloc_buffer - for PTHREADS we may want to decrease these jumps\r\n while (newSize < requestedSize) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (newSize <= 536870912) {\r\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n if (!emscripten_realloc_buffer(newSize)) {\r\n return false;\r\n }\r\n \r\n updateGlobalBufferViews();\r\n \r\n \r\n \r\n return true;\r\n } \r\n\r\n function _time(ptr) {\r\n var ret = (Date.now()/1000)|0;\r\n if (ptr) {\r\n HEAP32[((ptr)>>2)]=ret;\r\n }\r\n return ret;\r\n }\r\nvar ASSERTIONS = false;\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array\r\n\r\n\r\nfunction invoke_i(index) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_i(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ii(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ji(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_v(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vi(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viij(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viij(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viji(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nvar asmGlobalArg = {};\r\n\r\nvar asmLibraryArg = {\r\n \"abort\": abort,\r\n \"setTempRet0\": setTempRet0,\r\n \"getTempRet0\": getTempRet0,\r\n \"invoke_i\": invoke_i,\r\n \"invoke_ii\": invoke_ii,\r\n \"invoke_iii\": invoke_iii,\r\n \"invoke_iiii\": invoke_iiii,\r\n \"invoke_iiiii\": invoke_iiiii,\r\n \"invoke_iiiiii\": invoke_iiiiii,\r\n \"invoke_ji\": invoke_ji,\r\n \"invoke_v\": invoke_v,\r\n \"invoke_vi\": invoke_vi,\r\n \"invoke_vii\": invoke_vii,\r\n \"invoke_viii\": invoke_viii,\r\n \"invoke_viiii\": invoke_viiii,\r\n \"invoke_viiiii\": invoke_viiiii,\r\n \"invoke_viiiiiii\": invoke_viiiiiii,\r\n \"invoke_viij\": invoke_viij,\r\n \"invoke_viji\": invoke_viji,\r\n \"___assert_fail\": ___assert_fail,\r\n \"___cxa_allocate_exception\": ___cxa_allocate_exception,\r\n \"___cxa_begin_catch\": ___cxa_begin_catch,\r\n \"___cxa_end_catch\": ___cxa_end_catch,\r\n \"___cxa_find_matching_catch\": ___cxa_find_matching_catch,\r\n \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\r\n \"___cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\r\n \"___cxa_free_exception\": ___cxa_free_exception,\r\n \"___cxa_get_exception_ptr\": ___cxa_get_exception_ptr,\r\n \"___cxa_pure_virtual\": ___cxa_pure_virtual,\r\n \"___cxa_throw\": ___cxa_throw,\r\n \"___cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\r\n \"___exception_addRef\": ___exception_addRef,\r\n \"___exception_deAdjust\": ___exception_deAdjust,\r\n \"___exception_decRef\": ___exception_decRef,\r\n \"___gxx_personality_v0\": ___gxx_personality_v0,\r\n \"___lock\": ___lock,\r\n \"___resumeException\": ___resumeException,\r\n \"___setErrNo\": ___setErrNo,\r\n \"___syscall140\": ___syscall140,\r\n \"___syscall146\": ___syscall146,\r\n \"___syscall54\": ___syscall54,\r\n \"___syscall6\": ___syscall6,\r\n \"___unlock\": ___unlock,\r\n \"__api_close_keyboard\": __api_close_keyboard,\r\n \"__api_open_keyboard\": __api_open_keyboard,\r\n \"_abort\": _abort,\r\n \"_api_create_sound\": _api_create_sound,\r\n \"_api_create_sound_float\": _api_create_sound_float,\r\n \"_api_delete_sound\": _api_delete_sound,\r\n \"_api_draw_begin\": _api_draw_begin,\r\n \"_api_draw_belt\": _api_draw_belt,\r\n \"_api_draw_blit\": _api_draw_blit,\r\n \"_api_draw_clip_text\": _api_draw_clip_text,\r\n \"_api_draw_end\": _api_draw_end,\r\n \"_api_draw_text\": _api_draw_text,\r\n \"_api_duplicate_sound\": _api_duplicate_sound,\r\n \"_api_exit_game\": _api_exit_game,\r\n \"_api_play_sound\": _api_play_sound,\r\n \"_api_set_cursor\": _api_set_cursor,\r\n \"_api_set_volume\": _api_set_volume,\r\n \"_api_stop_sound\": _api_stop_sound,\r\n \"_api_use_websocket\": _api_use_websocket,\r\n \"_api_websocket_closed\": _api_websocket_closed,\r\n \"_api_websocket_send\": _api_websocket_send,\r\n \"_emscripten_asm_const_ii\": _emscripten_asm_const_ii,\r\n \"_emscripten_get_heap_size\": _emscripten_get_heap_size,\r\n \"_emscripten_memcpy_big\": _emscripten_memcpy_big,\r\n \"_emscripten_resize_heap\": _emscripten_resize_heap,\r\n \"_exit\": _exit,\r\n \"_exit_error\": _exit_error,\r\n \"_get_file_contents\": _get_file_contents,\r\n \"_get_file_size\": _get_file_size,\r\n \"_llvm_eh_typeid_for\": _llvm_eh_typeid_for,\r\n \"_llvm_trap\": _llvm_trap,\r\n \"_put_file_contents\": _put_file_contents,\r\n \"_remove_file\": _remove_file,\r\n \"_show_alert\": _show_alert,\r\n \"_time\": _time,\r\n \"_trace_pop\": _trace_pop,\r\n \"_trace_push\": _trace_push,\r\n \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory,\r\n \"emscripten_realloc_buffer\": emscripten_realloc_buffer,\r\n \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM,\r\n \"tempDoublePtr\": tempDoublePtr,\r\n \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR\r\n};\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(asmGlobalArg, asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_AllocPacket = Module[\"_DApi_AllocPacket\"] = function() {\r\n return Module[\"asm\"][\"_DApi_AllocPacket\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Char = Module[\"_DApi_Char\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Char\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Init = Module[\"_DApi_Init\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Init\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Key = Module[\"_DApi_Key\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Key\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Mouse = Module[\"_DApi_Mouse\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Mouse\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Render = Module[\"_DApi_Render\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Render\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncText = Module[\"_DApi_SyncText\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncText\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncTextPtr = Module[\"_DApi_SyncTextPtr\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncTextPtr\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_InitWebsocket = Module[\"_SNet_InitWebsocket\"] = function() {\r\n return Module[\"asm\"][\"_SNet_InitWebsocket\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_WebsocketStatus = Module[\"_SNet_WebsocketStatus\"] = function() {\r\n return Module[\"asm\"][\"_SNet_WebsocketStatus\"].apply(null, arguments)\r\n};\r\n\r\nvar __ZSt18uncaught_exceptionv = Module[\"__ZSt18uncaught_exceptionv\"] = function() {\r\n return Module[\"asm\"][\"__ZSt18uncaught_exceptionv\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() {\r\n return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() {\r\n return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_close_keyboard = Module[\"___em_js___api_close_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_close_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_open_keyboard = Module[\"___em_js___api_open_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_open_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound = Module[\"___em_js__api_create_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound_float = Module[\"___em_js__api_create_sound_float\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound_float\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_delete_sound = Module[\"___em_js__api_delete_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_delete_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_begin = Module[\"___em_js__api_draw_begin\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_begin\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_belt = Module[\"___em_js__api_draw_belt\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_belt\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_blit = Module[\"___em_js__api_draw_blit\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_blit\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_clip_text = Module[\"___em_js__api_draw_clip_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_clip_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_end = Module[\"___em_js__api_draw_end\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_end\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_text = Module[\"___em_js__api_draw_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_duplicate_sound = Module[\"___em_js__api_duplicate_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_duplicate_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_exit_game = Module[\"___em_js__api_exit_game\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_exit_game\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_play_sound = Module[\"___em_js__api_play_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_play_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_cursor = Module[\"___em_js__api_set_cursor\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_cursor\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_volume = Module[\"___em_js__api_set_volume\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_volume\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_stop_sound = Module[\"___em_js__api_stop_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_stop_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_use_websocket = Module[\"___em_js__api_use_websocket\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_use_websocket\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_closed = Module[\"___em_js__api_websocket_closed\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_closed\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_send = Module[\"___em_js__api_websocket_send\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_send\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__exit_error = Module[\"___em_js__exit_error\"] = function() {\r\n return Module[\"asm\"][\"___em_js__exit_error\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_size = Module[\"___em_js__get_file_size\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_size\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__remove_file = Module[\"___em_js__remove_file\"] = function() {\r\n return Module[\"asm\"][\"___em_js__remove_file\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__show_alert = Module[\"___em_js__show_alert\"] = function() {\r\n return Module[\"asm\"][\"___em_js__show_alert\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_pop = Module[\"___em_js__trace_pop\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_pop\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_push = Module[\"___em_js__trace_push\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_push\"].apply(null, arguments)\r\n};\r\n\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() {\r\n return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments)\r\n};\r\n\r\nvar _free = Module[\"_free\"] = function() {\r\n return Module[\"asm\"][\"_free\"].apply(null, arguments)\r\n};\r\n\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() {\r\n return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments)\r\n};\r\n\r\nvar _malloc = Module[\"_malloc\"] = function() {\r\n return Module[\"asm\"][\"_malloc\"].apply(null, arguments)\r\n};\r\n\r\nvar _memcpy = Module[\"_memcpy\"] = function() {\r\n return Module[\"asm\"][\"_memcpy\"].apply(null, arguments)\r\n};\r\n\r\nvar _memmove = Module[\"_memmove\"] = function() {\r\n return Module[\"asm\"][\"_memmove\"].apply(null, arguments)\r\n};\r\n\r\nvar _memset = Module[\"_memset\"] = function() {\r\n return Module[\"asm\"][\"_memset\"].apply(null, arguments)\r\n};\r\n\r\nvar _sbrk = Module[\"_sbrk\"] = function() {\r\n return Module[\"asm\"][\"_sbrk\"].apply(null, arguments)\r\n};\r\n\r\nvar _setThrew = Module[\"_setThrew\"] = function() {\r\n return Module[\"asm\"][\"_setThrew\"].apply(null, arguments)\r\n};\r\n\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() {\r\n return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments)\r\n};\r\n\r\nvar globalCtors = Module[\"globalCtors\"] = function() {\r\n return Module[\"asm\"][\"globalCtors\"].apply(null, arguments)\r\n};\r\n\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() {\r\n return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments)\r\n};\r\n\r\nvar stackRestore = Module[\"stackRestore\"] = function() {\r\n return Module[\"asm\"][\"stackRestore\"].apply(null, arguments)\r\n};\r\n\r\nvar stackSave = Module[\"stackSave\"] = function() {\r\n return Module[\"asm\"][\"stackSave\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_i = Module[\"dynCall_i\"] = function() {\r\n return Module[\"asm\"][\"dynCall_i\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iidiiii = Module[\"dynCall_iidiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iidiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_jiji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() {\r\n return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiii = Module[\"dynCall_viiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiii = Module[\"dynCall_viiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiiii = Module[\"dynCall_viiiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viij = Module[\"dynCall_viij\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viij\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments)\r\n};\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n}\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n initRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n what += '';\r\n out(what);\r\n err(what);\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\n Module[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return DiabloSpawn\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = DiabloSpawn;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return DiabloSpawn; });\r\n else if (typeof exports === 'object')\r\n exports[\"DiabloSpawn\"] = DiabloSpawn;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","module.exports = require('./lib/axios');","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar runtime = function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\"; // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n prototype[method] = function (arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && typeof value === \"object\" && hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n Gp[toStringTagSymbol] = \"Generator\"; // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n}( // If this script is executing as a CommonJS module, use module.exports\n// as the regeneratorRuntime namespace. Otherwise create a new empty\n// object. Either way, the resulting object will be used to initialize\n// the regeneratorRuntime variable at the top of this file.\ntypeof module === \"object\" ? module.exports : {});\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}","'use strict';\n\nvar utils = require('./utils');\n\nvar bind = require('./helpers/bind');\n\nvar Axios = require('./core/Axios');\n\nvar mergeConfig = require('./core/mergeConfig');\n\nvar defaults = require('./defaults');\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\n\n\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context); // Copy axios.prototype to instance\n\n utils.extend(instance, Axios.prototype, context); // Copy context to instance\n\n utils.extend(instance, context);\n return instance;\n} // Create the default instance to be exported\n\n\nvar axios = createInstance(defaults); // Expose Axios class to allow class inheritance\n\naxios.Axios = Axios; // Factory for creating new instances\n\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n}; // Expose Cancel & CancelToken\n\n\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel'); // Expose all/spread\n\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = require('./helpers/spread');\nmodule.exports = axios; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = axios;","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nmodule.exports = function isBuffer(obj) {\n return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);\n};","'use strict';\n\nvar utils = require('./../utils');\n\nvar buildURL = require('../helpers/buildURL');\n\nvar InterceptorManager = require('./InterceptorManager');\n\nvar dispatchRequest = require('./dispatchRequest');\n\nvar mergeConfig = require('./mergeConfig');\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\n\n\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\n\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n config.method = config.method ? config.method.toLowerCase() : 'get'; // Hook up interceptors middleware\n\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n}; // Provide aliases for supported request methods\n\n\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\nmodule.exports = Axios;","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n\n\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\n\n\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\n\n\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;","'use strict';\n\nvar utils = require('./../utils');\n\nvar transformData = require('./transformData');\n\nvar isCancel = require('../cancel/isCancel');\n\nvar defaults = require('../defaults');\n\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\n\nvar combineURLs = require('./../helpers/combineURLs');\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\n\n\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config); // Support baseURL config\n\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n } // Ensure headers exist\n\n\n config.headers = config.headers || {}; // Transform request data\n\n config.data = transformData(config.data, config.headers, config.transformRequest); // Flatten headers\n\n config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {});\n utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) {\n delete config.headers[method];\n });\n var adapter = config.adapter || defaults.adapter;\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config); // Transform response data\n\n response.data = transformData(response.data, response.headers, config.transformResponse);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config); // Transform response data\n\n if (reason && reason.response) {\n reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);\n }\n }\n\n return Promise.reject(reason);\n });\n};","'use strict';\n\nvar utils = require('./../utils');\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\n\n\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n return data;\n};","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};","'use strict';\n\nvar createError = require('./createError');\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\n\n\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));\n }\n};","'use strict';\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\n\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function () {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n\n return error;\n};","'use strict';\n\nvar utils = require('./../utils'); // Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\n\n\nvar ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent'];\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\n\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) {\n return parsed;\n }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n return parsed;\n};","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href); // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n\n return function isURLSameOrigin(requestURL) {\n var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() : // Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}();","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs support document.cookie\nfunction standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n}() : // Non standard browser env (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() {\n return null;\n },\n remove: function remove() {}\n };\n}();","'use strict';\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\n\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};","'use strict';\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\n\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n};","'use strict';\n\nvar Cancel = require('./Cancel');\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\n\n\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n\n\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;","'use strict';\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\n\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","async function do_websocket_open(url, handler) {\r\n const socket = new WebSocket(url);\r\n socket.binaryType = \"arraybuffer\";\r\n let versionCbk = null;\r\n socket.addEventListener(\"message\", ({data}) => {\r\n if (versionCbk) {\r\n versionCbk(data);\r\n }\r\n handler(data);\r\n });\r\n await new Promise((resolve, reject) => {\r\n const onError = err => reject(1);\r\n socket.addEventListener(\"error\", onError);\r\n socket.addEventListener(\"open\", () => {\r\n socket.removeEventListener(\"error\", onError);\r\n resolve();\r\n });\r\n });\r\n await new Promise((resolve, reject) => {\r\n const to = setTimeout(() => {\r\n versionCbk = null;\r\n reject(1);\r\n }, 5000);\r\n versionCbk = data => {\r\n clearTimeout(to);\r\n const u8 = new Uint8Array(data);\r\n if (u8[0] === 0x32) {\r\n versionCbk = null;\r\n const version = u8[1] | (u8[2] << 8) | (u8[3] << 16) | (u8[4] << 24);\r\n if (version === 1) {\r\n resolve();\r\n } else {\r\n reject(2);\r\n }\r\n }\r\n };\r\n });\r\n\r\n const vers = process.env.VERSION.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\r\n const clientInfo = new Uint8Array(5);\r\n clientInfo[0] = 0x31;\r\n clientInfo[1] = parseInt(vers[3]);\r\n clientInfo[2] = parseInt(vers[2]);\r\n clientInfo[3] = parseInt(vers[1]);\r\n clientInfo[4] = 0;\r\n socket.send(clientInfo);\r\n return socket;\r\n}\r\n\r\nexport default function websocket_open(url, handler, finisher) {\r\n let ws = null, batch = [], intr = null;\r\n const proxy = {\r\n get readyState() {\r\n return ws ? ws.readyState : 0;\r\n },\r\n send(msg) {\r\n batch.push(msg.slice());\r\n },\r\n close() {\r\n if (intr) {\r\n clearInterval(intr);\r\n intr = null;\r\n }\r\n if (ws) {\r\n ws.close();\r\n } else {\r\n batch = null;\r\n }\r\n },\r\n };\r\n do_websocket_open(url, handler).then(sock => {\r\n ws = sock;\r\n if (batch) {\r\n intr = setInterval(() => {\r\n if (!batch.length) {\r\n return;\r\n }\r\n const size = batch.reduce((sum, msg) => sum + msg.byteLength, 3);\r\n const buffer = new Uint8Array(size);\r\n buffer[0] = 0;\r\n buffer[1] = (batch.length & 0xFF);\r\n buffer[2] = batch.length >> 8;\r\n let pos = 3;\r\n for (let msg of batch) {\r\n buffer.set(msg, pos);\r\n pos += msg.byteLength;\r\n }\r\n ws.send(buffer);\r\n batch.length = 0;\r\n }, 100);\r\n } else {\r\n ws.close();\r\n }\r\n finisher(0);\r\n }, err => {\r\n finisher(err);\r\n });\r\n return proxy;\r\n}\r\n","import DiabloBinary from './Diablo.wasm';\r\nimport DiabloModule from './Diablo.jscc';\r\nimport SpawnBinary from './DiabloSpawn.wasm';\r\nimport SpawnModule from './DiabloSpawn.jscc';\r\nimport axios from 'axios';\r\n\r\nimport websocket_open from './websocket';\r\n\r\nconst DiabloSize = 1466809;\r\nconst SpawnSize = 1337416;\r\n\r\n/* eslint-disable-next-line no-restricted-globals */\r\nconst worker = self;\r\n\r\nlet canvas = null, context = null;\r\nlet imageData = null;\r\nlet files = null;\r\nlet renderBatch = null;\r\nlet drawBelt = null;\r\nlet is_spawn = false;\r\nlet websocket = null;\r\n\r\nconst ChunkSize = 1 << 20;\r\nclass RemoteFile {\r\n constructor(url) {\r\n const request = new XMLHttpRequest();\r\n request.open('HEAD', url, false);\r\n request.send();\r\n if (request.status < 200 || request.status >= 300) {\r\n worker.postMessage({action: \"error\", error: `Failed to load remote file`});\r\n }\r\n this.byteLength = parseInt(request.getResponseHeader('Content-Length'));\r\n\r\n this.url = url;\r\n\r\n this.buffer = new Uint8Array(this.byteLength);\r\n this.chunks = new Uint8Array(((this.byteLength + ChunkSize - 1) >> 20) | 0);\r\n }\r\n\r\n subarray(start, end) {\r\n let chunk0 = (start / ChunkSize) | 0;\r\n let chunk1 = ((end + ChunkSize - 1) / ChunkSize) | 0;\r\n let missing0 = chunk1, missing1 = chunk0;\r\n for (let i = chunk0; i < chunk1; ++i) {\r\n if (!this.chunks[i]) {\r\n missing0 = Math.min(missing0, i);\r\n missing1 = Math.max(missing1, i);\r\n }\r\n }\r\n if (missing0 <= missing1) {\r\n const request = new XMLHttpRequest();\r\n request.open('GET', this.url, false);\r\n request.setRequestHeader('Range', `bytes=${missing0 * ChunkSize}-${Math.min(missing1 * ChunkSize + ChunkSize - 1, this.byteLength - 1)}`);\r\n request.responseType = 'arraybuffer';\r\n request.send();\r\n if (request.status < 200 || request.status >= 300) {\r\n worker.postMessage({action: \"error\", error: `Failed to load remote file`});\r\n } else {\r\n const header = request.getResponseHeader('Content-Range');\r\n let m, start = 0;\r\n if (header && (m = header.match(/bytes (\\d+)-(\\d+)\\/(\\d+)/))) {\r\n start = parseInt(m[1]);\r\n }\r\n this.buffer.set(new Uint8Array(request.response), start);\r\n chunk0 = ((start + ChunkSize - 1) / ChunkSize) | 0;\r\n chunk1 = ((start + request.response.byteLength + ChunkSize - 1) / ChunkSize) | 0;\r\n for (let i = chunk0; i < chunk1; ++i) {\r\n this.chunks[i] = 1;\r\n }\r\n }\r\n }\r\n return this.buffer.subarray(start, end);\r\n }\r\n}\r\n\r\nconst DApi = {\r\n exit_error(error) {\r\n worker.postMessage({action: \"error\", error});\r\n },\r\n\r\n exit_game() {\r\n worker.postMessage({action: \"exit\"});\r\n },\r\n current_save_id(id) {\r\n worker.postMessage({action: \"current_save\", name: id >= 0 ? (is_spawn ? `spawn${id}.sv` : `single_${id}.sv`) : null});\r\n },\r\n\r\n get_file_size(path) {\r\n const data = files.get(path.toLowerCase());\r\n return data ? data.byteLength : 0;\r\n },\r\n get_file_contents(path, array, offset) {\r\n const data = files.get(path.toLowerCase());\r\n if (data) {\r\n array.set(data.subarray(offset, offset + array.byteLength));\r\n }\r\n },\r\n put_file_contents(path, array) {\r\n path = path.toLowerCase();\r\n // if (!path.match(/^(spawn\\d+\\.sv|single_\\d+\\.sv|config\\.ini)$/i)) {\r\n // alert(`Bad file name: ${path}`);\r\n // }\r\n files.set(path, array);\r\n worker.postMessage({action: \"fs\", func: \"update\", params: [path, array]});\r\n },\r\n remove_file(path) {\r\n path = path.toLowerCase();\r\n files.delete(path);\r\n worker.postMessage({action: \"fs\", func: \"delete\", params: [path]});\r\n },\r\n\r\n set_cursor(x, y) {\r\n worker.postMessage({action: \"cursor\", x, y});\r\n },\r\n open_keyboard(...args) {\r\n worker.postMessage({action: \"keyboard\", rect: [...args]});\r\n },\r\n close_keyboard() {\r\n worker.postMessage({action: \"keyboard\", rect: null});\r\n },\r\n\r\n use_websocket(flag) {\r\n if (flag) {\r\n if (!websocket || websocket.readyState !== 1) {\r\n const sock = websocket = websocket_open('wss://diablo.rivsoft.net/websocket', data => {\r\n if (websocket === sock) {\r\n try_api(() => {\r\n const ptr = wasm._DApi_AllocPacket(data.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(data), ptr);\r\n });\r\n }\r\n }, code => {\r\n if (typeof code !== \"number\") {\r\n worker.postMessage({action: \"error\", error: code.toString(), stack: code.stack});\r\n code = 3;\r\n }\r\n call_api(\"SNet_WebsocketStatus\", code);\r\n });\r\n } else {\r\n call_api(\"SNet_WebsocketStatus\", 0);\r\n }\r\n } else {\r\n if (websocket) {\r\n websocket.close();\r\n }\r\n websocket = null;\r\n }\r\n },\r\n websocket_closed() {\r\n return websocket ? websocket.readyState !== 1 : false;\r\n },\r\n};\r\n\r\nlet frameTime = 0, lastTime = 0;\r\nfunction getFPS() {\r\n const time = performance.now();\r\n if (!lastTime) {\r\n lastTime = time;\r\n }\r\n frameTime = 0.9 * frameTime + 0.1 * (time - lastTime);\r\n lastTime = time;\r\n return frameTime ? 1000.0 / frameTime : 0.0;\r\n}\r\n\r\nconst DApi_renderLegacy = {\r\n draw_begin() {\r\n renderBatch = {\r\n images: [],\r\n text: [],\r\n clip: null,\r\n belt: drawBelt,\r\n };\r\n drawBelt = null;\r\n },\r\n draw_blit(x, y, w, h, data) {\r\n renderBatch.images.push({x, y, w, h, data: data.slice()});\r\n },\r\n draw_clip_text(x0, y0, x1, y1) {\r\n renderBatch.clip = {x0, y0, x1, y1};\r\n },\r\n draw_text(x, y, text, color) {\r\n renderBatch.text.push({x, y, text, color});\r\n },\r\n draw_end() {\r\n //DApi.draw_text(10, 10, `FPS: ${getFPS().toFixed(1)} (Transfer)`, 0xFFCC00);\r\n const transfer = renderBatch.images.map(({data}) => data.buffer);\r\n if (renderBatch.belt) {\r\n transfer.push(renderBatch.belt.buffer);\r\n }\r\n worker.postMessage({action: \"render\", batch: renderBatch}, transfer);\r\n renderBatch = null;\r\n },\r\n draw_belt(items) {\r\n drawBelt = items.slice();\r\n },\r\n};\r\n\r\nconst DApi_renderOffscreen = {\r\n draw_begin() {\r\n context.save();\r\n context.font = 'bold 13px Times New Roman';\r\n },\r\n draw_blit(x, y, w, h, data) {\r\n imageData.data.set(data);\r\n context.putImageData(imageData, x, y);\r\n },\r\n draw_clip_text(x0, y0, x1, y1) {\r\n context.beginPath();\r\n context.rect(x0, y0, x1 - x0, y1 - y0);\r\n context.clip();\r\n },\r\n draw_text(x, y, text, color) {\r\n const r = ((color >> 16) & 0xFF);\r\n const g = ((color >> 8) & 0xFF);\r\n const b = (color & 0xFF);\r\n context.fillStyle = `rgb(${r}, ${g}, ${b})`;\r\n context.fillText(text, x, y + 22);\r\n },\r\n draw_end() {\r\n //DApi.draw_text(10, 10, `FPS: ${getFPS().toFixed(1)} (Offscreen)`, 0xFFCC00);\r\n context.restore();\r\n const bitmap = canvas.transferToImageBitmap();\r\n const transfer = [bitmap];\r\n if (drawBelt) {\r\n transfer.push(drawBelt.buffer);\r\n }\r\n worker.postMessage({action: \"render\", batch: {bitmap, belt: drawBelt}}, transfer);\r\n drawBelt = null;\r\n },\r\n draw_belt(items) {\r\n drawBelt = items.slice();\r\n },\r\n};\r\n\r\nlet audioBatch = null, audioTransfer = null;\r\nlet maxSoundId = 0, maxBatchId = 0;\r\n[\"create_sound_raw\", \"create_sound\", \"duplicate_sound\"].forEach(func => {\r\n DApi[func] = function(...params) {\r\n if (audioBatch) {\r\n maxBatchId = params[0] + 1;\r\n audioBatch.push({func, params});\r\n if (func !== \"duplicate_sound\") {\r\n audioTransfer.push(params[1].buffer);\r\n }\r\n } else {\r\n maxSoundId = params[0] + 1;\r\n const transfer = [];\r\n if (func !== \"duplicate_sound\") {\r\n transfer.push(params[1].buffer);\r\n }\r\n worker.postMessage({action: \"audio\", func, params}, transfer);\r\n }\r\n };\r\n});\r\n[\"play_sound\", \"set_volume\", \"stop_sound\", \"delete_sound\"].forEach(func => {\r\n DApi[func] = function(...params) {\r\n if (audioBatch && params[0] >= maxSoundId) {\r\n audioBatch.push({func, params});\r\n } else {\r\n worker.postMessage({action: \"audio\", func, params});\r\n }\r\n }\r\n});\r\n\r\nlet packetBatch = null;\r\nDApi.websocket_send = function(data) {\r\n if (websocket) {\r\n websocket.send(data);\r\n } else if (packetBatch) {\r\n packetBatch.push(data.slice().buffer);\r\n } else {\r\n worker.postMessage({action: \"packet\", buffer: data});\r\n }\r\n};\r\n\r\nworker.DApi = DApi;\r\n\r\nlet wasm = null;\r\n\r\nfunction try_api(func) {\r\n try {\r\n func();\r\n } catch (e) {\r\n worker.postMessage({action: \"error\", error: e.toString(), stack: e.stack});\r\n }\r\n}\r\n\r\nfunction call_api(func, ...params) {\r\n try_api(() => {\r\n audioBatch = [];\r\n audioTransfer = [];\r\n packetBatch = [];\r\n if (func !== \"text\") {\r\n wasm[\"_\" + func](...params);\r\n } else {\r\n const ptr = wasm._DApi_SyncTextPtr();\r\n const text = params[0];\r\n const length = Math.min(text.length, 255);\r\n const heap = wasm.HEAPU8;\r\n for (let i = 0; i < length; ++i) {\r\n heap[ptr + i] = text.charCodeAt(i);\r\n }\r\n heap[ptr + length] = 0;\r\n wasm._DApi_SyncText(params[1]);\r\n }\r\n if (audioBatch.length) {\r\n maxSoundId = maxBatchId;\r\n worker.postMessage({action: \"audioBatch\", batch: audioBatch}, audioTransfer);\r\n }\r\n if (packetBatch.length) {\r\n worker.postMessage({action: \"packetBatch\", batch: packetBatch}, packetBatch);\r\n }\r\n audioBatch = null;\r\n audioTransfer = null;\r\n packetBatch = null;\r\n });\r\n}\r\n\r\nfunction progress(text, loaded, total) {\r\n worker.postMessage({action: \"progress\", text, loaded, total});\r\n}\r\n\r\nconst readFile = (file, progress) => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n if (progress) {\r\n progress({loaded: file.size});\r\n }\r\n resolve(reader.result);\r\n };\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n if (progress) {\r\n reader.addEventListener(\"progress\", progress);\r\n }\r\n reader.readAsArrayBuffer(file);\r\n});\r\n\r\nasync function initWasm(spawn, progress) {\r\n const binary = await axios.request({\r\n url: spawn ? SpawnBinary : DiabloBinary,\r\n responseType: 'arraybuffer',\r\n onDownloadProgress: progress,\r\n });\r\n const result = await (spawn ? SpawnModule : DiabloModule)({wasmBinary: binary.data}).ready;\r\n progress({loaded: 2000000});\r\n return result;\r\n}\r\n\r\nasync function init_game(mpq, spawn, offscreen) {\r\n is_spawn = spawn;\r\n if (offscreen) {\r\n canvas = new OffscreenCanvas(640, 480);\r\n context = canvas.getContext(\"2d\");\r\n imageData = context.createImageData(640, 480);\r\n Object.assign(DApi, DApi_renderOffscreen);\r\n } else {\r\n Object.assign(DApi, DApi_renderLegacy);\r\n }\r\n\r\n if (!mpq) {\r\n const name = (spawn ? 'spawn.mpq' : 'diabdat.mpq');\r\n if (!files.has(name)) {\r\n // This should never happen, but we do support remote loading\r\n files.set(name, new RemoteFile(`${process.env.PUBLIC_URL}/${name}`));\r\n }\r\n }\r\n\r\n progress(\"Loading...\");\r\n let mpqLoaded = 0, mpqTotal = (mpq ? mpq.size : 0), wasmLoaded = 0, wasmTotal = (spawn ? SpawnSize : DiabloSize);\r\n const wasmWeight = 5;\r\n function updateProgress() {\r\n progress(\"Loading...\", mpqLoaded + wasmLoaded * wasmWeight, mpqTotal + wasmTotal * wasmWeight);\r\n }\r\n const loadWasm = initWasm(spawn, e => {\r\n wasmLoaded = Math.min(e.loaded, wasmTotal);\r\n updateProgress();\r\n });\r\n let loadMpq = mpq ? readFile(mpq, e => {\r\n mpqLoaded = e.loaded;\r\n updateProgress();\r\n }) : Promise.resolve(null);\r\n [wasm, mpq] = await Promise.all([loadWasm, loadMpq]);\r\n\r\n if (mpq) {\r\n files.set(spawn ? 'spawn.mpq' : 'diabdat.mpq', new Uint8Array(mpq));\r\n }\r\n\r\n progress(\"Initializing...\");\r\n\r\n const vers = process.env.VERSION.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\r\n\r\n wasm._SNet_InitWebsocket();\r\n wasm._DApi_Init(Math.floor(performance.now()), offscreen ? 1 : 0, parseInt(vers[1]), parseInt(vers[2]), parseInt(vers[3]));\r\n\r\n setInterval(() => {\r\n call_api(\"DApi_Render\", Math.floor(performance.now())); \r\n }, 50);\r\n}\r\n\r\nworker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"init\":\r\n files = data.files;\r\n init_game(data.mpq, data.spawn, data.offscreen).then(\r\n () => worker.postMessage({action: \"loaded\"}),\r\n e => worker.postMessage({action: \"failed\", error: e.toString(), stack: e.stack}));\r\n break;\r\n case \"event\":\r\n call_api(data.func, ...data.params);\r\n break;\r\n case \"packet\":\r\n try_api(() => {\r\n const ptr = wasm._DApi_AllocPacket(data.buffer.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(data.buffer), ptr);\r\n });\r\n break;\r\n case \"packetBatch\":\r\n try_api(() => {\r\n for (let packet of data.batch) {\r\n const ptr = wasm._DApi_AllocPacket(packet.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(packet), ptr);\r\n }\r\n });\r\n break;\r\n default:\r\n }\r\n});\r\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["../webpack/bootstrap","../node_modules/axios/lib/utils.js","../node_modules/@babel/runtime/regenerator/index.js","../node_modules/process/browser.js","../node_modules/path-browserify/index.js","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/defaults.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/core/createError.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/cancel/Cancel.js","api/Diablo.wasm","api/Diablo.jscc","api/DiabloSpawn.wasm","api/DiabloSpawn.jscc","../node_modules/axios/index.js","../node_modules/regenerator-runtime/runtime.js","../node_modules/axios/lib/axios.js","../node_modules/axios/node_modules/is-buffer/index.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/core/enhanceError.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../node_modules/@babel/runtime/helpers/esm/createClass.js","api/websocket.js","api/game.worker.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","isBuffer","toString","isArray","val","isObject","isFunction","forEach","obj","fn","length","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isUndefined","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","arguments","deepMerge","extend","a","b","thisArg","trim","str","replace","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","setTimeout","e","this","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","timeout","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","push","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","normalizeArray","parts","allowAboveRoot","up","last","splice","unshift","filter","xs","f","res","resolve","resolvedPath","resolvedAbsolute","path","TypeError","charAt","split","join","normalize","isAbsolute","trailingSlash","substr","paths","slice","index","relative","from","to","arr","start","end","fromParts","toParts","Math","min","samePartsLength","outputParts","sep","delimiter","dirname","code","charCodeAt","hasRoot","matchedSlash","basename","ext","extname","startDot","startPart","preDotState","utils","encode","encodeURIComponent","url","params","paramsSerializer","serializedParams","v","toISOString","JSON","stringify","hashmarkIndex","indexOf","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","setContentTypeIfUnset","headers","defaults","adapter","XMLHttpRequest","getDefaultAdapter","transformRequest","data","transformResponse","parse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","Accept","method","settle","buildURL","parseHeaders","isURLSameOrigin","createError","config","Promise","reject","requestData","requestHeaders","request","auth","username","password","Authorization","btoa","open","toUpperCase","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","response","responseType","responseText","statusText","onabort","onerror","ontimeout","cookies","xsrfValue","withCredentials","read","undefined","toLowerCase","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","promise","then","cancel","abort","send","enhanceError","message","error","config1","config2","prop","Cancel","Diablo","_scriptDir","currentScript","src","Module","moduleOverrides","toThrow","ENVIRONMENT_IS_NODE","ENVIRONMENT_IS_SHELL","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","importScripts","node","read_","readBinary","nodeFS","nodePath","scriptDirectory","__dirname","filename","binary","ret","Uint8Array","assert","ex","ExitStatus","readbuffer","scriptArgs","quit","self","location","href","lastIndexOf","xhr","onload","out","console","log","print","err","printErr","warn","asm2wasmImports","f64-rem","x","y","debugger","wasmMemory","tempRet0","setTempRet0","WebAssembly","ABORT","condition","text","UTF8Decoder","TextDecoder","UTF8ArrayToString","u8Array","idx","maxBytesToRead","endIdx","endPtr","subarray","decode","u0","u1","u2","String","fromCharCode","ch","UTF8ToString","ptr","HEAPU8","HEAP8","HEAP32","HEAPF32","alignUp","multiple","updateGlobalBufferViews","Int8Array","Int16Array","Int32Array","Uint16Array","Uint32Array","Float32Array","Float64Array","DYNAMICTOP_PTR","INITIAL_TOTAL_MEMORY","callRuntimeCallbacks","callbacks","callback","shift","func","arg","Memory","initial","byteLength","__ATPRERUN__","__ATINIT__","__ATMAIN__","__ATPOSTRUN__","addOnPostRun","cb","abs","cos","sin","tan","acos","asin","atan","atan2","exp","sqrt","ceil","floor","pow","imul","fround","round","max","clz32","trunc","runDependencies","runDependencyWatcher","dependenciesFulfilled","dataURIPrefix","isDataURI","startsWith","wasmBinaryFile","getBinary","createWasm","info","global","NaN","Infinity","global.Math","asm2wasm","receiveInstance","instance","id","clearInterval","removeRunDependency","receiveInstantiatedSource","output","instantiateArrayBuffer","receiver","fetch","credentials","catch","instantiate","reason","instantiateStreaming","instantiateAsync","providedBuffer","Table","maximum","element","ASM_CONSTS","$0","DApi","current_save_id","globalCtors","tempDoublePtr","___exception_infos","___exception_caught","___exception_addRef","refcount","___exception_deAdjust","adjusted","adj","___exception_last","___cxa_free_exception","_free","___exception_decRef","rethrown","destructor","___cxa_find_matching_catch","thrown","throwntype","type","typeArray","___cxa_is_pointer_type","___cxa_can_catch","SYSCALLS","buffers","printChar","stream","curr","varargs","getStr","get64","low","getZero","_emscripten_get_heap_size","emscripten_realloc_buffer","size","oldSize","grow","asmLibraryArg","getTempRet0","invoke_i","sp","stackSave","dynCall_i","stackRestore","_setThrew","invoke_ii","a1","dynCall_ii","invoke_iii","a2","dynCall_iii","invoke_iiii","a3","dynCall_iiii","invoke_iiiii","a4","dynCall_iiiii","invoke_iiiiii","a5","dynCall_iiiiii","invoke_ji","dynCall_ji","invoke_v","dynCall_v","invoke_vi","dynCall_vi","invoke_vii","dynCall_vii","invoke_viii","dynCall_viii","invoke_viiii","dynCall_viiii","invoke_viiiii","dynCall_viiiii","invoke_viiiiiii","a6","a7","dynCall_viiiiiii","invoke_viij","dynCall_viij","invoke_viji","dynCall_viji","___assert_fail","line","___cxa_allocate_exception","_malloc","___cxa_begin_catch","caught","__ZSt18uncaught_exceptionv","uncaught_exceptions","___cxa_end_catch","pop","___cxa_find_matching_catch_2","a0","___cxa_find_matching_catch_3","___cxa_get_exception_ptr","___cxa_pure_virtual","___cxa_throw","___cxa_uncaught_exceptions","___gxx_personality_v0","___lock","___resumeException","___setErrNo","___syscall140","which","getStreamFromFD","FS","ErrnoError","errno","___syscall146","iov","iovcnt","j","___syscall54","___syscall6","___unlock","__api_close_keyboard","close_keyboard","__api_open_keyboard","x0","y0","x1","y1","open_keyboard","_abort","_api_create_sound","create_sound","_api_create_sound_float","samples","channels","rate","create_sound_raw","_api_delete_sound","delete_sound","_api_draw_begin","draw_begin","_api_draw_belt","items","draw_belt","_api_draw_blit","w","h","draw_blit","_api_draw_clip_text","draw_clip_text","_api_draw_end","draw_end","_api_draw_text","color","draw_text","_api_duplicate_sound","srcId","duplicate_sound","_api_exit_game","exit_game","_api_play_sound","volume","pan","loop","play_sound","_api_set_cursor","set_cursor","_api_set_volume","set_volume","_api_stop_sound","stop_sound","_api_use_websocket","use","use_websocket","_api_websocket_closed","websocket_closed","_api_websocket_send","websocket_send","_emscripten_asm_const_ii","_emscripten_memcpy_big","dest","num","set","_emscripten_resize_heap","requestedSize","newSize","_exit","implicit","exit","_exit_error","exit_error","_get_file_contents","offset","get_file_contents","_get_file_size","get_file_size","_llvm_eh_typeid_for","_llvm_trap","_put_file_contents","put_file_contents","_remove_file","remove_file","_show_alert","alert","_time","Date","now","_trace_pop","WASM_TRACE","_trace_push","abortOnCannotGrowMemory","flush_NO_FILESYSTEM","fflush","asm","old","constructor","doRun","postRun","preRun","runCaller","what","DiabloSpawn","runtime","Op","hasOwn","$Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","context","Context","_invoke","state","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","done","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","AsyncIterator","previousPromise","callInvokeWithMethodAndArg","invoke","__await","unwrapped","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","async","iter","keys","reverse","skipTempReset","prev","stop","rootRecord","rval","exception","handle","loc","hasCatch","hasFinally","finallyEntry","complete","finish","delegateYield","regeneratorRuntime","accidentalStrictMode","Function","Axios","mergeConfig","createInstance","defaultConfig","axios","instanceConfig","CancelToken","isCancel","all","promises","spread","default","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","fulfilled","rejected","getUri","handlers","eject","transformData","isAbsoluteURL","combineURLs","throwIfCancellationRequested","throwIfRequested","baseURL","fns","normalizedName","isAxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","stack","ignoreDuplicateOf","parsed","originURL","msie","test","userAgent","urlParsingNode","createElement","resolveURL","setAttribute","protocol","host","search","hash","hostname","port","pathname","requestURL","write","expires","domain","secure","cookie","toGMTString","match","RegExp","decodeURIComponent","remove","relativeURL","executor","resolvePromise","token","source","_slicedToArray","_arrayWithHoles","_arr","_n","_d","_e","_s","_i","_iterableToArrayLimit","_nonIterableRest","_toConsumableArray","arr2","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","asyncGeneratorStep","gen","_next","_throw","_asyncToGenerator","_defineProperties","target","props","descriptor","configurable","writable","_callee","handler","socket","_versionCbk","vers","clientInfo","regenerator_default","_context","WebSocket","binaryType","versionCbk","_ref","onError","removeEventListener","u8","parseInt","websocket_open","finisher","ws","batch","intr","proxy","msg","close","do_websocket_open","sock","setInterval","reduce","sum","pos","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","return","DiabloSize","SpawnSize","worker","canvas","imageData","files","renderBatch","drawBelt","is_spawn","websocket","ChunkSize","RemoteFile","Constructor","_classCallCheck","postMessage","action","getResponseHeader","chunks","protoProps","staticProps","chunk0","chunk1","missing0","missing1","header","delete","_len","_key","rect","flag","call_api","try_api","wasm","_DApi_AllocPacket","DApi_renderLegacy","images","clip","belt","transfer","map","DApi_renderOffscreen","save","font","putImageData","beginPath","g","fillStyle","fillText","restore","bitmap","transferToImageBitmap","audioBatch","audioTransfer","maxSoundId","maxBatchId","_len2","_key2","_len3","_key3","packetBatch","_len4","_key4","_wasm","_DApi_SyncTextPtr","heap","_DApi_SyncText","progress","loaded","total","readFile","file","reader","FileReader","readAsArrayBuffer","initWasm","spawn","SpawnBinary","DiabloBinary","SpawnModule","DiabloModule","wasmBinary","ready","_callee2","mpq","offscreen","mpqLoaded","mpqTotal","wasmLoaded","wasmTotal","wasmWeight","updateProgress","loadWasm","loadMpq","_ref3","_ref4","_context2","OffscreenCanvas","getContext","createImageData","assign","has","_SNet_InitWebsocket","_DApi_Init","performance","_ref2","init_game","packet"],"mappings":"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","file":"ad404bc1f12303f5575d.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/diabloweb/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 35);\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\nvar isBuffer = require('is-buffer');\n/*global toString:true*/\n// utils is a library of generic helper functions non-specific to axios\n\n\nvar toString = Object.prototype.toString;\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\n\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\n\n\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\n\n\nfunction isFormData(val) {\n return typeof FormData !== 'undefined' && val instanceof FormData;\n}\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\n\n\nfunction isArrayBufferView(val) {\n var result;\n\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && val.buffer instanceof ArrayBuffer;\n }\n\n return result;\n}\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\n\n\nfunction isString(val) {\n return typeof val === 'string';\n}\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\n\n\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\n\n\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\n\n\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\n\n\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\n\n\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\n\n\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\n\n\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\n\n\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\n\n\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\n\n\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\n\n\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {\n return false;\n }\n\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\n\n\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n } // Force an array if not already something iterable\n\n\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction merge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\n\n\nfunction deepMerge()\n/* obj1, obj2, obj3, ... */\n{\n var result = {};\n\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n\n return result;\n}\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\n\n\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};","module.exports = require(\"regenerator-runtime\");\n","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\n\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n } // if setTimeout wasn't available but was latter defined\n\n\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\n\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n } // if clearTimeout wasn't available but was latter defined\n\n\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n\n draining = false;\n\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n\n while (len) {\n currentQueue = queue;\n queue = [];\n\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n\n queueIndex = -1;\n len = queue.length;\n }\n\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n\n queue.push(new Item(fun, args));\n\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\n\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\n\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n return 0;\n};","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n} // path.resolve([from ...], to)\n// posix version\n\n\nexports.resolve = function () {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = i >= 0 ? arguments[i] : process.cwd(); // Skip empty and invalid entries\n\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n } // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n\n\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function (p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n return (resolvedAbsolute ? '/' : '') + resolvedPath || '.';\n}; // path.normalize(path)\n// posix version\n\n\nexports.normalize = function (path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/'; // Normalize the path\n\n path = normalizeArray(filter(path.split('/'), function (p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n}; // posix version\n\n\nexports.isAbsolute = function (path) {\n return path.charAt(0) === '/';\n}; // posix version\n\n\nexports.join = function () {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function (p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n\n return p;\n }).join('/'));\n}; // path.relative(from, to)\n// posix version\n\n\nexports.relative = function (from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n if (typeof path !== 'string') path = path + '';\n if (path.length === 0) return '.';\n var code = path.charCodeAt(0);\n var hasRoot = code === 47\n /*/*/\n ;\n var end = -1;\n var matchedSlash = true;\n\n for (var i = path.length - 1; i >= 1; --i) {\n code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n if (end === -1) return hasRoot ? '/' : '.';\n\n if (hasRoot && end === 1) {\n // return '//';\n // Backwards-compat fix:\n return '/';\n }\n\n return path.slice(0, end);\n};\n\nfunction basename(path) {\n if (typeof path !== 'string') path = path + '';\n var start = 0;\n var end = -1;\n var matchedSlash = true;\n var i;\n\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n return path.slice(start, end);\n} // Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\n\n\nexports.basename = function (path, ext) {\n var f = basename(path);\n\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n\n return f;\n};\n\nexports.extname = function (path) {\n if (typeof path !== 'string') path = path + '';\n var startDot = -1;\n var startPart = 0;\n var end = -1;\n var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n\n var preDotState = 0;\n\n for (var i = path.length - 1; i >= 0; --i) {\n var code = path.charCodeAt(i);\n\n if (code === 47\n /*/*/\n ) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n\n continue;\n }\n\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n\n if (code === 46\n /*.*/\n ) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot\n preDotState === 0 || // The (right-most) trimmed path component is exactly '..'\n preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return '';\n }\n\n return path.slice(startDot, end);\n};\n\nfunction filter(xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n\n return res;\n} // String.prototype.substr - negative index don't work in IE8\n\n\nvar substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) {\n return str.substr(start, len);\n} : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n};","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n return fn.apply(thisArg, args);\n };\n};","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\n\n\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};","'use strict';\n\nvar utils = require('./utils');\n\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter; // Only Node.JS has a process variable that is of [[Class]] process\n\n if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n } else if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n }\n\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) {\n /* Ignore */\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\nmodule.exports = defaults;","'use strict';\n\nvar utils = require('./../utils');\n\nvar settle = require('./../core/settle');\n\nvar buildURL = require('./../helpers/buildURL');\n\nvar parseHeaders = require('./../helpers/parseHeaders');\n\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\n\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest(); // HTTP basic authentication\n\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true); // Set the request timeout in MS\n\n request.timeout = config.timeout; // Listen for ready state\n\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n } // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n\n\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n } // Prepare the response\n\n\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n settle(resolve, reject, response); // Clean up request\n\n request = null;\n }; // Handle browser request cancellation (as opposed to a manual cancellation)\n\n\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Handle low level network errors\n\n\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request)); // Clean up request\n\n request = null;\n }; // Handle timeout\n\n\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request)); // Clean up request\n\n request = null;\n }; // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies'); // Add xsrf header\n\n\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n } // Add headers to the request\n\n\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n } // Add withCredentials to request if needed\n\n\n if (config.withCredentials) {\n request.withCredentials = true;\n } // Add responseType to request if needed\n\n\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n } // Handle progress if needed\n\n\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n } // Not all browsers support upload events\n\n\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel); // Clean up request\n\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n } // Send the request\n\n\n request.send(requestData);\n });\n};","'use strict';\n\nvar enhanceError = require('./enhanceError');\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\n\n\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};","'use strict';\n\nvar utils = require('../utils');\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\n\n\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n utils.forEach(['headers', 'auth', 'proxy'], function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n utils.forEach(['baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath'], function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n return config;\n};","'use strict';\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\n\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\nmodule.exports = Cancel;","module.exports = __webpack_public_path__ + \"static/media/Diablo.570bd59a.wasm\";","\r\nvar Diablo = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(Diablo) {\r\n Diablo = Diablo || {};\r\n\r\n// Copyright 2010 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof Diablo !== 'undefined' ? Diablo : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// Determine the runtime environment we are in. You can customize this by\r\n// setting the ENVIRONMENT setting at compile time (see settings.js).\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_HAS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n// A web environment like Electron.js can have Node enabled, so we must\r\n// distinguish between Node-enabled environments and Node environments per se.\r\n// This will allow the former to do things like mount NODEFS.\r\n// Extended check using process.versions fixes issue #8816.\r\n// (Also makes redundant the original check that 'require' is a function.)\r\nENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\r\nENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\n// Hooks that are implemented differently in different runtime environments.\r\nvar read_,\r\n readAsync,\r\n readBinary,\r\n setWindowTitle;\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n read_ = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n readBinary = function readBinary(filename) {\r\n var ret = read_(filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', abort);\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n read_ = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n readBinary = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\r\n scriptDirectory = self.location.href;\r\n } else if (document.currentScript) { // web\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\r\n // and scriptDirectory will correctly be replaced with an empty string.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n read_ = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n readBinary = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n readAsync = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n setWindowTitle = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\r\n\r\n// TODO remove when SDL2 is fixed; also add the above assertion\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n if (end > _emscripten_get_heap_size()) {\r\n abort();\r\n }\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n return Math.ceil(size / factor) * factor;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// Wraps a JS function as a wasm function with a given signature.\r\n// In the future, we may get a WebAssembly.Function constructor. Until then,\r\n// we create a wasm module that takes the JS function as an import with a given\r\n// signature, and re-exports that as a wasm function.\r\nfunction convertJsFunctionToWasm(func, sig) {\r\n\r\n // The module is static, with the exception of the type section, which is\r\n // generated based on the signature passed in.\r\n var typeSection = [\r\n 0x01, // id: section,\r\n 0x00, // length: 0 (placeholder)\r\n 0x01, // count: 1\r\n 0x60, // form: func\r\n ];\r\n var sigRet = sig.slice(0, 1);\r\n var sigParam = sig.slice(1);\r\n var typeCodes = {\r\n 'i': 0x7f, // i32\r\n 'j': 0x7e, // i64\r\n 'f': 0x7d, // f32\r\n 'd': 0x7c, // f64\r\n };\r\n\r\n // Parameters, length + signatures\r\n typeSection.push(sigParam.length);\r\n for (var i = 0; i < sigParam.length; ++i) {\r\n typeSection.push(typeCodes[sigParam[i]]);\r\n }\r\n\r\n // Return values, length + signatures\r\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\r\n if (sigRet == 'v') {\r\n typeSection.push(0x00);\r\n } else {\r\n typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\r\n }\r\n\r\n // Write the overall length of the type section back into the section header\r\n // (excepting the 2 bytes for the section id and length)\r\n typeSection[1] = typeSection.length - 2;\r\n\r\n // Rest of the module is static\r\n var bytes = new Uint8Array([\r\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\r\n 0x01, 0x00, 0x00, 0x00, // version: 1\r\n ].concat(typeSection, [\r\n 0x02, 0x07, // import section\r\n // (import \"e\" \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\r\n 0x07, 0x05, // export section\r\n // (export \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x66, 0x00, 0x00,\r\n ]));\r\n\r\n // We can compile this wasm module synchronously because it is very small.\r\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\r\n var module = new WebAssembly.Module(bytes);\r\n var instance = new WebAssembly.Instance(module, {\r\n e: {\r\n f: func\r\n }\r\n });\r\n var wrappedFunc = instance.exports.f;\r\n return wrappedFunc;\r\n}\r\n\r\n// Add a wasm function to the table.\r\nfunction addFunctionWasm(func, sig) {\r\n var table = wasmTable;\r\n var ret = table.length;\r\n\r\n // Grow the table\r\n try {\r\n table.grow(1);\r\n } catch (err) {\r\n if (!err instanceof RangeError) {\r\n throw err;\r\n }\r\n throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.';\r\n }\r\n\r\n // Insert new element\r\n try {\r\n // Attempting to call this with JS function will cause of table.set() to fail\r\n table.set(ret, func);\r\n } catch (err) {\r\n if (!err instanceof TypeError) {\r\n throw err;\r\n }\r\n assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');\r\n var wrapped = convertJsFunctionToWasm(func, sig);\r\n table.set(ret, wrapped);\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction removeFunctionWasm(index) {\r\n // TODO(sbc): Look into implementing this to allow re-using of table slots\r\n}\r\n\r\n// 'sig' parameter is required for the llvm backend but only when func is not\r\n// already a WebAssembly function.\r\nfunction addFunction(func, sig) {\r\n\r\n\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n\r\n}\r\n\r\nfunction removeFunction(index) {\r\n\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\nvar tempRet0 = 0;\r\n\r\nvar setTempRet0 = function(value) {\r\n tempRet0 = value;\r\n};\r\n\r\nvar getTempRet0 = function() {\r\n return tempRet0;\r\n};\r\n\r\n\r\nvar Runtime = {\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\nif (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n}\r\n\r\n\r\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\r\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// Wasm globals\r\n\r\nvar wasmMemory;\r\n\r\n// Potentially used for direct table calls.\r\nvar wasmTable;\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\n// whether we are quitting the application. no code should run after this.\r\n// set in exit() and abort()\r\nvar ABORT = false;\r\n\r\n// set by exit() and abort(). Passed to 'onExit' handler.\r\n// NOTE: This is also used as the process return code code in shell environments\r\n// but only when noExitRuntime is false.\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n // For fast lookup of conversion functions\r\n var toC = {\r\n 'string': function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n },\r\n 'array': function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n }\r\n };\r\n\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return UTF8ToString(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 3; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [_malloc,\r\n stackAlloc,\r\n dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n\r\n\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n abort(\"this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!\");\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAPU8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\n\r\n/**\r\n * @param {number} idx\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\r\n var endIdx = idx + maxBytesToRead;\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\r\n while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var str = '';\r\n // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\r\n while (idx < endPtr) {\r\n // For UTF8 byte structure, see:\r\n // http://en.wikipedia.org/wiki/UTF-8#Description\r\n // https://www.ietf.org/rfc/rfc2279.txt\r\n // https://tools.ietf.org/html/rfc3629\r\n var u0 = u8Array[idx++];\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n var u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n var u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);\r\n }\r\n\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\r\n// copy of that string as a Javascript String object.\r\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\r\n// this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\r\n// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\r\n// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\r\n// not produce a string of exact length [ptr, ptr+maxBytesToRead[)\r\n// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\r\n// throw JS JIT optimizations off, so it is worth to consider consistently using one\r\n// style or the other.\r\n/**\r\n * @param {number} ptr\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ToString(ptr, maxBytesToRead) {\r\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) ++len;\r\n else if (u <= 0x7FF) len += 2;\r\n else if (u <= 0xFFFF) len += 3;\r\n else len += 4;\r\n }\r\n return len;\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (y + ' [' + x + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\n\r\nvar STATIC_BASE = 1024,\r\n STACK_BASE = 1875744,\r\n STACKTOP = STACK_BASE,\r\n STACK_MAX = 7118624,\r\n DYNAMIC_BASE = 7118624,\r\n DYNAMICTOP_PTR = 1875712;\r\n\r\n\r\n\r\n\r\nvar TOTAL_STACK = 5242880;\r\n\r\nvar INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (INITIAL_TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n\r\n\r\n\r\n if (Module['wasmMemory']) {\r\n wasmMemory = Module['wasmMemory'];\r\n } else {\r\n wasmMemory = new WebAssembly.Memory({\r\n 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE\r\n });\r\n }\r\n\r\n\r\nif (wasmMemory) {\r\n buffer = wasmMemory.buffer;\r\n}\r\n\r\n// If the user provides an incorrect length, just use that length instead rather than providing the user to\r\n// specifically provide the memory length with Module['TOTAL_MEMORY'].\r\nINITIAL_TOTAL_MEMORY = buffer.byteLength;\r\nupdateGlobalBufferViews();\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction initRuntime() {\r\n runtimeInitialized = true;\r\n \r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n \r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// Module.preRun (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nvar wasmBinaryFile = 'Diablo.wasm';\r\nif (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n}\r\n\r\nfunction getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (readBinary) {\r\n return readBinary(wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n}\r\n\r\nfunction getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n}\r\n\r\n\r\n\r\n// Create the wasm instance.\r\n// Receives the wasm imports, returns the exports.\r\nfunction createWasm(env) {\r\n\r\n // prepare imports\r\n var info = {\r\n 'env': env\r\n ,\r\n 'global': {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n },\r\n 'global.Math': Math,\r\n 'asm2wasm': asm2wasmImports\r\n };\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n var exports = instance.exports;\r\n Module['asm'] = exports;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\r\n // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\r\n receiveInstance(output['instance']);\r\n }\r\n\r\n\r\n function instantiateArrayBuffer(receiver) {\r\n return getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver, function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n\r\n // Prefer streaming instantiation if available.\r\n function instantiateAsync() {\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\r\n return WebAssembly.instantiateStreaming(response, info)\r\n .then(receiveInstantiatedSource, function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n });\r\n } else {\r\n return instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n }\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n var exports = Module['instantiateWasm'](info, receiveInstance);\r\n return exports;\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n instantiateAsync();\r\n return {}; // no exports yet; we'll fill them in later\r\n}\r\n\r\n// Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n// the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n// doesn't need to care that it is wasm or asm.js.\r\n\r\nModule['asm'] = function(global, env, providedBuffer) {\r\n // memory was already allocated (so js could use the buffer)\r\n env['memory'] = wasmMemory\r\n ;\r\n // import table\r\n env['table'] = wasmTable = new WebAssembly.Table({\r\n 'initial': 1116,\r\n 'maximum': 1116,\r\n 'element': 'anyfunc'\r\n });\r\n // With the wasm backend __memory_base and __table_base and only needed for\r\n // relocatable output.\r\n env['__memory_base'] = 1024; // tell the memory segments where to place themselves\r\n // table starts at 0 by default (even in dynamic linking, for the main module)\r\n env['__table_base'] = 0;\r\n\r\n var exports = createWasm(env);\r\n return exports;\r\n};\r\n\r\n// Globals used by JS i64 conversions\r\nvar tempDouble;\r\nvar tempI64;\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [function($0) { self.DApi.current_save_id($0); }];\r\n\r\nfunction _emscripten_asm_const_ii(code, a0) {\r\n return ASM_CONSTS[code](a0);\r\n}\r\nfunction __api_close_keyboard(){ self.DApi.close_keyboard(); }\r\nfunction __api_open_keyboard(x0,y0,x1,y1,len){ self.DApi.open_keyboard(x0, y0, x1, y1, len); }\r\nfunction _api_create_sound(id,ptr,size){ self.DApi.create_sound(id, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _api_create_sound_float(id,ptr,samples,channels,rate){ self.DApi.create_sound_raw(id, HEAPF32.slice(ptr / 4, ptr / 4 + samples * channels), samples, channels, rate); }\r\nfunction _api_delete_sound(id){ self.DApi.delete_sound(id); }\r\nfunction _api_draw_begin(){ self.DApi.draw_begin(); }\r\nfunction _api_draw_belt(items){ self.DApi.draw_belt(HEAP32.subarray(items / 4, items / 4 + 8)); }\r\nfunction _api_draw_blit(x,y,w,h,ptr){ self.DApi.draw_blit(x, y, w, h, HEAPU8.subarray(ptr, ptr + w * h * 4)); }\r\nfunction _api_draw_clip_text(x0,y0,x1,y1){ self.DApi.draw_clip_text(x0, y0, x1, y1); }\r\nfunction _api_draw_end(){ self.DApi.draw_end(); }\r\nfunction _api_draw_text(x,y,ptr,color){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); self.DApi.draw_text(x, y, text, color); }\r\nfunction _api_duplicate_sound(id,srcId){ self.DApi.duplicate_sound(id, srcId); }\r\nfunction _api_exit_game(){ self.DApi.exit_game(); }\r\nfunction _api_play_sound(id,volume,pan,loop){ self.DApi.play_sound(id, volume, pan, loop); }\r\nfunction _api_set_cursor(x,y){ self.DApi.set_cursor(x, y); }\r\nfunction _api_set_volume(id,volume){ self.DApi.set_volume(id, volume); }\r\nfunction _api_stop_sound(id){ self.DApi.stop_sound(id); }\r\nfunction _api_use_websocket(use){ self.DApi.use_websocket(use); }\r\nfunction _api_websocket_closed(){ return self.DApi.websocket_closed(); }\r\nfunction _api_websocket_send(ptr,size){ self.DApi.websocket_send(HEAPU8.subarray(ptr, ptr + size)); }\r\nfunction _exit_error(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply(null, HEAPU8.subarray( err, end )); self.DApi.exit_error( text ); }\r\nfunction _get_file_contents(path,ptr,offset,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.get_file_contents(text, HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _get_file_size(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); return self.DApi.get_file_size(text); }\r\nfunction _put_file_contents(path,ptr,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end)); self.DApi.put_file_contents(text, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _remove_file(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.remove_file( text ); }\r\nfunction _show_alert(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply( null, HEAPU8.subarray( err, end ) ); self.alert( text ); }\r\nfunction _trace_pop(){ if (self.WASM_TRACE) { self.WASM_TRACE.pop(); } }\r\nfunction _trace_push(ptr){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); console.log(text); self.WASM_TRACE = self.WASM_TRACE || []; self.WASM_TRACE.push(text); }\r\n\r\n\r\n\r\n// STATICTOP = STATIC_BASE + 1874720;\r\n/* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } });\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = 1875728\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + UTF8ToString(condition) + ', at: ' + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n \r\n var ___exception_infos={};\r\n \r\n var ___exception_caught= [];\r\n \r\n function ___exception_addRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount++;\r\n }\r\n \r\n function ___exception_deAdjust(adjusted) {\r\n if (!adjusted || ___exception_infos[adjusted]) return adjusted;\r\n for (var key in ___exception_infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var adj = ___exception_infos[ptr].adjusted;\r\n var len = adj.length;\r\n for (var i = 0; i < len; i++) {\r\n if (adj[i] === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n }\r\n return adjusted;\r\n }function ___cxa_begin_catch(ptr) {\r\n var info = ___exception_infos[ptr];\r\n if (info && !info.caught) {\r\n info.caught = true;\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions--;\r\n }\r\n if (info) info.rethrown = false;\r\n ___exception_caught.push(ptr);\r\n ___exception_addRef(___exception_deAdjust(ptr));\r\n return ptr;\r\n }\r\n\r\n \r\n var ___exception_last=0;\r\n \r\n \r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) {\r\n }\r\n }function ___exception_decRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete ___exception_infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n }\r\n \r\n function ___cxa_end_catch() {\r\n // Clear state flag.\r\n _setThrew(0);\r\n // Call destructor if one is registered then clear it.\r\n var ptr = ___exception_caught.pop();\r\n if (ptr) {\r\n ___exception_decRef(___exception_deAdjust(ptr));\r\n ___exception_last = 0; // XXX in decRef?\r\n }\r\n }\r\n\r\n \r\n \r\n function ___resumeException(ptr) {\r\n if (!___exception_last) { ___exception_last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = ___exception_last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = ___exception_infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = ___cxa_is_pointer_type(throwntype);\r\n // can_catch receives a **, add indirection\r\n var buffer = 1875696;\r\n HEAP32[((buffer)>>2)]=thrown;\r\n thrown = buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && ___cxa_can_catch(typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted.push(thrown);\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }\r\n Module[\"___cxa_find_matching_catch\"] = ___cxa_find_matching_catch;function ___cxa_find_matching_catch_2(a0,a1\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1);\r\n }\r\n\r\n function ___cxa_find_matching_catch_3(a0,a1,a2\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1,a2);\r\n }\r\n\r\n\r\n function ___cxa_get_exception_ptr(ptr) {\r\n // TODO: use info.adjusted?\r\n return ptr;\r\n }\r\n\r\n function ___cxa_pure_virtual() {\r\n ABORT = true;\r\n throw 'Pure virtual function called!';\r\n }\r\n\r\n function ___cxa_throw(ptr, type, destructor) {\r\n ___exception_infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: [ptr],\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n ___exception_last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___cxa_uncaught_exceptions() {\r\n return __ZSt18uncaught_exceptionv.uncaught_exceptions;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n function ___lock() {}\r\n\r\n\r\n \r\n \r\n var PATH={splitPath:function (filename) {\r\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\n return splitPathRe.exec(filename).slice(1);\r\n },normalizeArray:function (parts, allowAboveRoot) {\r\n // if the path tries to go above the root, `up` ends up > 0\r\n var up = 0;\r\n for (var i = parts.length - 1; i >= 0; i--) {\r\n var last = parts[i];\r\n if (last === '.') {\r\n parts.splice(i, 1);\r\n } else if (last === '..') {\r\n parts.splice(i, 1);\r\n up++;\r\n } else if (up) {\r\n parts.splice(i, 1);\r\n up--;\r\n }\r\n }\r\n // if the path is allowed to go above the root, restore leading ..s\r\n if (allowAboveRoot) {\r\n for (; up; up--) {\r\n parts.unshift('..');\r\n }\r\n }\r\n return parts;\r\n },normalize:function (path) {\r\n var isAbsolute = path.charAt(0) === '/',\r\n trailingSlash = path.substr(-1) === '/';\r\n // Normalize the path\r\n path = PATH.normalizeArray(path.split('/').filter(function(p) {\r\n return !!p;\r\n }), !isAbsolute).join('/');\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n return (isAbsolute ? '/' : '') + path;\r\n },dirname:function (path) {\r\n var result = PATH.splitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n return root + dir;\r\n },basename:function (path) {\r\n // EMSCRIPTEN return '/'' for '/', not an empty string\r\n if (path === '/') return '/';\r\n var lastSlash = path.lastIndexOf('/');\r\n if (lastSlash === -1) return path;\r\n return path.substr(lastSlash+1);\r\n },extname:function (path) {\r\n return PATH.splitPath(path)[3];\r\n },join:function () {\r\n var paths = Array.prototype.slice.call(arguments, 0);\r\n return PATH.normalize(paths.join('/'));\r\n },join2:function (l, r) {\r\n return PATH.normalize(l + '/' + r);\r\n }};var SYSCALLS={buffers:[null,[],[]],printChar:function (stream, curr) {\r\n var buffer = SYSCALLS.buffers[stream];\r\n if (curr === 0 || curr === 10) {\r\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\r\n buffer.length = 0;\r\n } else {\r\n buffer.push(curr);\r\n }\r\n },varargs:0,get:function (varargs) {\r\n SYSCALLS.varargs += 4;\r\n var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\r\n return ret;\r\n },getStr:function () {\r\n var ret = UTF8ToString(SYSCALLS.get());\r\n return ret;\r\n },get64:function () {\r\n var low = SYSCALLS.get(), high = SYSCALLS.get();\r\n return low;\r\n },getZero:function () {\r\n SYSCALLS.get();\r\n }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // llseek\r\n var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n \r\n function flush_NO_FILESYSTEM() {\r\n // flush anything remaining in the buffers during shutdown\r\n var fflush = Module[\"_fflush\"];\r\n if (fflush) fflush(0);\r\n var buffers = SYSCALLS.buffers;\r\n if (buffers[1].length) SYSCALLS.printChar(1, 10);\r\n if (buffers[2].length) SYSCALLS.printChar(2, 10);\r\n }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // writev\r\n // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0\r\n var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\r\n var ret = 0;\r\n for (var i = 0; i < iovcnt; i++) {\r\n var ptr = HEAP32[(((iov)+(i*8))>>2)];\r\n var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\r\n for (var j = 0; j < len; j++) {\r\n SYSCALLS.printChar(stream, HEAPU8[ptr+j]);\r\n }\r\n ret += len;\r\n }\r\n return ret;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // ioctl\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // close\r\n var stream = SYSCALLS.getStreamFromFD();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___unlock() {}\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n var _emscripten_asm_const_int=true;\r\n\r\n function _emscripten_get_heap_size() {\r\n return HEAP8.length;\r\n }\r\n\r\n function _exit(status) {\r\n // void _exit(int status);\r\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\r\n exit(status);\r\n }\r\n\r\n \r\n\r\n function _llvm_eh_typeid_for(type) {\r\n return type;\r\n }\r\n\r\n function _llvm_trap() {\r\n abort('trap!');\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n }\r\n \r\n \r\n function abortOnCannotGrowMemory(requestedSize) {\r\n abort('OOM');\r\n }\r\n \r\n function emscripten_realloc_buffer(size) {\r\n var PAGE_MULTIPLE = 65536;\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var oldSize = buffer.byteLength;\r\n // native wasm support\r\n // note that this is *not* threadsafe. multiple threads can call .grow(), and each\r\n // presents a delta, so in theory we may over-allocate here (e.g. if two threads\r\n // ask to grow from 256MB to 512MB, we get 2 requests to add +256MB, and may end\r\n // up growing to 768MB (even though we may have been able to make do with 512MB).\r\n // TODO: consider decreasing the step sizes in emscripten_resize_heap\r\n try {\r\n var result = wasmMemory.grow((size - oldSize) / 65536); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n buffer = wasmMemory.buffer;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n }function _emscripten_resize_heap(requestedSize) {\r\n var oldSize = _emscripten_get_heap_size();\r\n // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\r\n \r\n \r\n var PAGE_MULTIPLE = 65536;\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n \r\n if (requestedSize > LIMIT) {\r\n return false;\r\n }\r\n \r\n var MIN_TOTAL_MEMORY = 16777216;\r\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n \r\n // TODO: see realloc_buffer - for PTHREADS we may want to decrease these jumps\r\n while (newSize < requestedSize) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (newSize <= 536870912) {\r\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n if (!emscripten_realloc_buffer(newSize)) {\r\n return false;\r\n }\r\n \r\n updateGlobalBufferViews();\r\n \r\n \r\n \r\n return true;\r\n } \r\n\r\n function _time(ptr) {\r\n var ret = (Date.now()/1000)|0;\r\n if (ptr) {\r\n HEAP32[((ptr)>>2)]=ret;\r\n }\r\n return ret;\r\n }\r\nvar ASSERTIONS = false;\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array\r\n\r\n\r\nfunction invoke_i(index) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_i(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ii(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ji(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_v(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vi(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viij(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viij(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viji(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nvar asmGlobalArg = {};\r\n\r\nvar asmLibraryArg = {\r\n \"abort\": abort,\r\n \"setTempRet0\": setTempRet0,\r\n \"getTempRet0\": getTempRet0,\r\n \"invoke_i\": invoke_i,\r\n \"invoke_ii\": invoke_ii,\r\n \"invoke_iii\": invoke_iii,\r\n \"invoke_iiii\": invoke_iiii,\r\n \"invoke_iiiii\": invoke_iiiii,\r\n \"invoke_iiiiii\": invoke_iiiiii,\r\n \"invoke_ji\": invoke_ji,\r\n \"invoke_v\": invoke_v,\r\n \"invoke_vi\": invoke_vi,\r\n \"invoke_vii\": invoke_vii,\r\n \"invoke_viii\": invoke_viii,\r\n \"invoke_viiii\": invoke_viiii,\r\n \"invoke_viiiii\": invoke_viiiii,\r\n \"invoke_viiiiiii\": invoke_viiiiiii,\r\n \"invoke_viij\": invoke_viij,\r\n \"invoke_viji\": invoke_viji,\r\n \"___assert_fail\": ___assert_fail,\r\n \"___cxa_allocate_exception\": ___cxa_allocate_exception,\r\n \"___cxa_begin_catch\": ___cxa_begin_catch,\r\n \"___cxa_end_catch\": ___cxa_end_catch,\r\n \"___cxa_find_matching_catch\": ___cxa_find_matching_catch,\r\n \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\r\n \"___cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\r\n \"___cxa_free_exception\": ___cxa_free_exception,\r\n \"___cxa_get_exception_ptr\": ___cxa_get_exception_ptr,\r\n \"___cxa_pure_virtual\": ___cxa_pure_virtual,\r\n \"___cxa_throw\": ___cxa_throw,\r\n \"___cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\r\n \"___exception_addRef\": ___exception_addRef,\r\n \"___exception_deAdjust\": ___exception_deAdjust,\r\n \"___exception_decRef\": ___exception_decRef,\r\n \"___gxx_personality_v0\": ___gxx_personality_v0,\r\n \"___lock\": ___lock,\r\n \"___resumeException\": ___resumeException,\r\n \"___setErrNo\": ___setErrNo,\r\n \"___syscall140\": ___syscall140,\r\n \"___syscall146\": ___syscall146,\r\n \"___syscall54\": ___syscall54,\r\n \"___syscall6\": ___syscall6,\r\n \"___unlock\": ___unlock,\r\n \"__api_close_keyboard\": __api_close_keyboard,\r\n \"__api_open_keyboard\": __api_open_keyboard,\r\n \"_abort\": _abort,\r\n \"_api_create_sound\": _api_create_sound,\r\n \"_api_create_sound_float\": _api_create_sound_float,\r\n \"_api_delete_sound\": _api_delete_sound,\r\n \"_api_draw_begin\": _api_draw_begin,\r\n \"_api_draw_belt\": _api_draw_belt,\r\n \"_api_draw_blit\": _api_draw_blit,\r\n \"_api_draw_clip_text\": _api_draw_clip_text,\r\n \"_api_draw_end\": _api_draw_end,\r\n \"_api_draw_text\": _api_draw_text,\r\n \"_api_duplicate_sound\": _api_duplicate_sound,\r\n \"_api_exit_game\": _api_exit_game,\r\n \"_api_play_sound\": _api_play_sound,\r\n \"_api_set_cursor\": _api_set_cursor,\r\n \"_api_set_volume\": _api_set_volume,\r\n \"_api_stop_sound\": _api_stop_sound,\r\n \"_api_use_websocket\": _api_use_websocket,\r\n \"_api_websocket_closed\": _api_websocket_closed,\r\n \"_api_websocket_send\": _api_websocket_send,\r\n \"_emscripten_asm_const_ii\": _emscripten_asm_const_ii,\r\n \"_emscripten_get_heap_size\": _emscripten_get_heap_size,\r\n \"_emscripten_memcpy_big\": _emscripten_memcpy_big,\r\n \"_emscripten_resize_heap\": _emscripten_resize_heap,\r\n \"_exit\": _exit,\r\n \"_exit_error\": _exit_error,\r\n \"_get_file_contents\": _get_file_contents,\r\n \"_get_file_size\": _get_file_size,\r\n \"_llvm_eh_typeid_for\": _llvm_eh_typeid_for,\r\n \"_llvm_trap\": _llvm_trap,\r\n \"_put_file_contents\": _put_file_contents,\r\n \"_remove_file\": _remove_file,\r\n \"_show_alert\": _show_alert,\r\n \"_time\": _time,\r\n \"_trace_pop\": _trace_pop,\r\n \"_trace_push\": _trace_push,\r\n \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory,\r\n \"emscripten_realloc_buffer\": emscripten_realloc_buffer,\r\n \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM,\r\n \"tempDoublePtr\": tempDoublePtr,\r\n \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR\r\n};\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(asmGlobalArg, asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_AllocPacket = Module[\"_DApi_AllocPacket\"] = function() {\r\n return Module[\"asm\"][\"_DApi_AllocPacket\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Char = Module[\"_DApi_Char\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Char\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Init = Module[\"_DApi_Init\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Init\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Key = Module[\"_DApi_Key\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Key\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Mouse = Module[\"_DApi_Mouse\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Mouse\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Render = Module[\"_DApi_Render\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Render\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncText = Module[\"_DApi_SyncText\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncText\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncTextPtr = Module[\"_DApi_SyncTextPtr\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncTextPtr\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_InitWebsocket = Module[\"_SNet_InitWebsocket\"] = function() {\r\n return Module[\"asm\"][\"_SNet_InitWebsocket\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_WebsocketStatus = Module[\"_SNet_WebsocketStatus\"] = function() {\r\n return Module[\"asm\"][\"_SNet_WebsocketStatus\"].apply(null, arguments)\r\n};\r\n\r\nvar __ZSt18uncaught_exceptionv = Module[\"__ZSt18uncaught_exceptionv\"] = function() {\r\n return Module[\"asm\"][\"__ZSt18uncaught_exceptionv\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() {\r\n return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() {\r\n return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_close_keyboard = Module[\"___em_js___api_close_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_close_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_open_keyboard = Module[\"___em_js___api_open_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_open_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound = Module[\"___em_js__api_create_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound_float = Module[\"___em_js__api_create_sound_float\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound_float\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_delete_sound = Module[\"___em_js__api_delete_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_delete_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_begin = Module[\"___em_js__api_draw_begin\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_begin\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_belt = Module[\"___em_js__api_draw_belt\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_belt\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_blit = Module[\"___em_js__api_draw_blit\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_blit\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_clip_text = Module[\"___em_js__api_draw_clip_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_clip_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_end = Module[\"___em_js__api_draw_end\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_end\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_text = Module[\"___em_js__api_draw_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_duplicate_sound = Module[\"___em_js__api_duplicate_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_duplicate_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_exit_game = Module[\"___em_js__api_exit_game\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_exit_game\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_play_sound = Module[\"___em_js__api_play_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_play_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_cursor = Module[\"___em_js__api_set_cursor\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_cursor\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_volume = Module[\"___em_js__api_set_volume\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_volume\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_stop_sound = Module[\"___em_js__api_stop_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_stop_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_use_websocket = Module[\"___em_js__api_use_websocket\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_use_websocket\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_closed = Module[\"___em_js__api_websocket_closed\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_closed\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_send = Module[\"___em_js__api_websocket_send\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_send\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__exit_error = Module[\"___em_js__exit_error\"] = function() {\r\n return Module[\"asm\"][\"___em_js__exit_error\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_size = Module[\"___em_js__get_file_size\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_size\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__remove_file = Module[\"___em_js__remove_file\"] = function() {\r\n return Module[\"asm\"][\"___em_js__remove_file\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__show_alert = Module[\"___em_js__show_alert\"] = function() {\r\n return Module[\"asm\"][\"___em_js__show_alert\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_pop = Module[\"___em_js__trace_pop\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_pop\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_push = Module[\"___em_js__trace_push\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_push\"].apply(null, arguments)\r\n};\r\n\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() {\r\n return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments)\r\n};\r\n\r\nvar _free = Module[\"_free\"] = function() {\r\n return Module[\"asm\"][\"_free\"].apply(null, arguments)\r\n};\r\n\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() {\r\n return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments)\r\n};\r\n\r\nvar _malloc = Module[\"_malloc\"] = function() {\r\n return Module[\"asm\"][\"_malloc\"].apply(null, arguments)\r\n};\r\n\r\nvar _memcpy = Module[\"_memcpy\"] = function() {\r\n return Module[\"asm\"][\"_memcpy\"].apply(null, arguments)\r\n};\r\n\r\nvar _memmove = Module[\"_memmove\"] = function() {\r\n return Module[\"asm\"][\"_memmove\"].apply(null, arguments)\r\n};\r\n\r\nvar _memset = Module[\"_memset\"] = function() {\r\n return Module[\"asm\"][\"_memset\"].apply(null, arguments)\r\n};\r\n\r\nvar _sbrk = Module[\"_sbrk\"] = function() {\r\n return Module[\"asm\"][\"_sbrk\"].apply(null, arguments)\r\n};\r\n\r\nvar _setThrew = Module[\"_setThrew\"] = function() {\r\n return Module[\"asm\"][\"_setThrew\"].apply(null, arguments)\r\n};\r\n\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() {\r\n return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments)\r\n};\r\n\r\nvar globalCtors = Module[\"globalCtors\"] = function() {\r\n return Module[\"asm\"][\"globalCtors\"].apply(null, arguments)\r\n};\r\n\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() {\r\n return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments)\r\n};\r\n\r\nvar stackRestore = Module[\"stackRestore\"] = function() {\r\n return Module[\"asm\"][\"stackRestore\"].apply(null, arguments)\r\n};\r\n\r\nvar stackSave = Module[\"stackSave\"] = function() {\r\n return Module[\"asm\"][\"stackSave\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_i = Module[\"dynCall_i\"] = function() {\r\n return Module[\"asm\"][\"dynCall_i\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iidiiii = Module[\"dynCall_iidiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iidiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_jiji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() {\r\n return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiii = Module[\"dynCall_viiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiii = Module[\"dynCall_viiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiiii = Module[\"dynCall_viiiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viij = Module[\"dynCall_viij\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viij\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments)\r\n};\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n}\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n initRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n what += '';\r\n out(what);\r\n err(what);\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\n Module[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return Diablo\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = Diablo;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return Diablo; });\r\n else if (typeof exports === 'object')\r\n exports[\"Diablo\"] = Diablo;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","module.exports = __webpack_public_path__ + \"static/media/DiabloSpawn.9c2373b2.wasm\";","\r\nvar DiabloSpawn = (function() {\r\n var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined;\r\n return (\r\nfunction(DiabloSpawn) {\r\n DiabloSpawn = DiabloSpawn || {};\r\n\r\n// Copyright 2010 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// The Module object: Our interface to the outside world. We import\r\n// and export values on it. There are various ways Module can be used:\r\n// 1. Not defined. We create it here\r\n// 2. A function parameter, function(Module) { ..generated code.. }\r\n// 3. pre-run appended it, var Module = {}; ..generated code..\r\n// 4. External script tag defines var Module.\r\n// We need to check if Module already exists (e.g. case 3 above).\r\n// Substitution will be replaced with actual code on later stage of the build,\r\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\r\n// Note that if you want to run closure, and also to use Module\r\n// after the generated code, you will need to define var Module = {};\r\n// before the code. Then that object will be used in the code, and you\r\n// can continue to use Module afterwards as well.\r\nvar Module = typeof DiabloSpawn !== 'undefined' ? DiabloSpawn : {};\r\n\r\n// --pre-jses are emitted after the Module integration code, so that they can\r\n// refer to Module (if they choose; they can also define Module)\r\n\r\n\r\n// Sometimes an existing Module object exists with properties\r\n// meant to overwrite the default module functionality. Here\r\n// we collect those properties and reapply _after_ we configure\r\n// the current environment's defaults to avoid having to be so\r\n// defensive during initialization.\r\nvar moduleOverrides = {};\r\nvar key;\r\nfor (key in Module) {\r\n if (Module.hasOwnProperty(key)) {\r\n moduleOverrides[key] = Module[key];\r\n }\r\n}\r\n\r\nModule['arguments'] = [];\r\nModule['thisProgram'] = './this.program';\r\nModule['quit'] = function(status, toThrow) {\r\n throw toThrow;\r\n};\r\nModule['preRun'] = [];\r\nModule['postRun'] = [];\r\n\r\n// Determine the runtime environment we are in. You can customize this by\r\n// setting the ENVIRONMENT setting at compile time (see settings.js).\r\n\r\nvar ENVIRONMENT_IS_WEB = false;\r\nvar ENVIRONMENT_IS_WORKER = false;\r\nvar ENVIRONMENT_IS_NODE = false;\r\nvar ENVIRONMENT_HAS_NODE = false;\r\nvar ENVIRONMENT_IS_SHELL = false;\r\nENVIRONMENT_IS_WEB = typeof window === 'object';\r\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\r\n// A web environment like Electron.js can have Node enabled, so we must\r\n// distinguish between Node-enabled environments and Node environments per se.\r\n// This will allow the former to do things like mount NODEFS.\r\n// Extended check using process.versions fixes issue #8816.\r\n// (Also makes redundant the original check that 'require' is a function.)\r\nENVIRONMENT_HAS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\r\nENVIRONMENT_IS_NODE = ENVIRONMENT_HAS_NODE && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;\r\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\r\n\r\n\r\n\r\n// Three configurations we can be running in:\r\n// 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false)\r\n// 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false)\r\n// 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true)\r\n\r\n\r\n\r\n\r\n// `/` should be present at the end if `scriptDirectory` is not empty\r\nvar scriptDirectory = '';\r\nfunction locateFile(path) {\r\n if (Module['locateFile']) {\r\n return Module['locateFile'](path, scriptDirectory);\r\n } else {\r\n return scriptDirectory + path;\r\n }\r\n}\r\n\r\n// Hooks that are implemented differently in different runtime environments.\r\nvar read_,\r\n readAsync,\r\n readBinary,\r\n setWindowTitle;\r\n\r\nif (ENVIRONMENT_IS_NODE) {\r\n scriptDirectory = __dirname + '/';\r\n\r\n // Expose functionality in the same simple way that the shells work\r\n // Note that we pollute the global namespace here, otherwise we break in node\r\n var nodeFS;\r\n var nodePath;\r\n\r\n read_ = function shell_read(filename, binary) {\r\n var ret;\r\n if (!nodeFS) nodeFS = require('fs');\r\n if (!nodePath) nodePath = require('path');\r\n filename = nodePath['normalize'](filename);\r\n ret = nodeFS['readFileSync'](filename);\r\n return binary ? ret : ret.toString();\r\n };\r\n\r\n readBinary = function readBinary(filename) {\r\n var ret = read_(filename, true);\r\n if (!ret.buffer) {\r\n ret = new Uint8Array(ret);\r\n }\r\n assert(ret.buffer);\r\n return ret;\r\n };\r\n\r\n if (process['argv'].length > 1) {\r\n Module['thisProgram'] = process['argv'][1].replace(/\\\\/g, '/');\r\n }\r\n\r\n Module['arguments'] = process['argv'].slice(2);\r\n\r\n // MODULARIZE will export the module in the proper place outside, we don't need to export here\r\n\r\n process['on']('uncaughtException', function(ex) {\r\n // suppress ExitStatus exceptions from showing an error\r\n if (!(ex instanceof ExitStatus)) {\r\n throw ex;\r\n }\r\n });\r\n // Currently node will swallow unhandled rejections, but this behavior is\r\n // deprecated, and in the future it will exit with error status.\r\n process['on']('unhandledRejection', abort);\r\n\r\n Module['quit'] = function(status) {\r\n process['exit'](status);\r\n };\r\n\r\n Module['inspect'] = function () { return '[Emscripten Module object]'; };\r\n} else\r\nif (ENVIRONMENT_IS_SHELL) {\r\n\r\n\r\n if (typeof read != 'undefined') {\r\n read_ = function shell_read(f) {\r\n return read(f);\r\n };\r\n }\r\n\r\n readBinary = function readBinary(f) {\r\n var data;\r\n if (typeof readbuffer === 'function') {\r\n return new Uint8Array(readbuffer(f));\r\n }\r\n data = read(f, 'binary');\r\n assert(typeof data === 'object');\r\n return data;\r\n };\r\n\r\n if (typeof scriptArgs != 'undefined') {\r\n Module['arguments'] = scriptArgs;\r\n } else if (typeof arguments != 'undefined') {\r\n Module['arguments'] = arguments;\r\n }\r\n\r\n if (typeof quit === 'function') {\r\n Module['quit'] = function(status) {\r\n quit(status);\r\n }\r\n }\r\n} else\r\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\r\n if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\r\n scriptDirectory = self.location.href;\r\n } else if (document.currentScript) { // web\r\n scriptDirectory = document.currentScript.src;\r\n }\r\n // When MODULARIZE (and not _INSTANCE), this JS may be executed later, after document.currentScript\r\n // is gone, so we saved it, and we use it here instead of any other info.\r\n if (_scriptDir) {\r\n scriptDirectory = _scriptDir;\r\n }\r\n // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\r\n // otherwise, slice off the final part of the url to find the script directory.\r\n // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\r\n // and scriptDirectory will correctly be replaced with an empty string.\r\n if (scriptDirectory.indexOf('blob:') !== 0) {\r\n scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\r\n } else {\r\n scriptDirectory = '';\r\n }\r\n\r\n\r\n read_ = function shell_read(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.send(null);\r\n return xhr.responseText;\r\n };\r\n\r\n if (ENVIRONMENT_IS_WORKER) {\r\n readBinary = function readBinary(url) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, false);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.send(null);\r\n return new Uint8Array(xhr.response);\r\n };\r\n }\r\n\r\n readAsync = function readAsync(url, onload, onerror) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open('GET', url, true);\r\n xhr.responseType = 'arraybuffer';\r\n xhr.onload = function xhr_onload() {\r\n if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\r\n onload(xhr.response);\r\n return;\r\n }\r\n onerror();\r\n };\r\n xhr.onerror = onerror;\r\n xhr.send(null);\r\n };\r\n\r\n setWindowTitle = function(title) { document.title = title };\r\n} else\r\n{\r\n}\r\n\r\n// Set up the out() and err() hooks, which are how we can print to stdout or\r\n// stderr, respectively.\r\n// If the user provided Module.print or printErr, use that. Otherwise,\r\n// console.log is checked first, as 'print' on the web will open a print dialogue\r\n// printErr is preferable to console.warn (works better in shells)\r\n// bind(console) is necessary to fix IE/Edge closed dev tools panel behavior.\r\nvar out = Module['print'] || (typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null));\r\nvar err = Module['printErr'] || (typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || out));\r\n\r\n// Merge back in the overrides\r\nfor (key in moduleOverrides) {\r\n if (moduleOverrides.hasOwnProperty(key)) {\r\n Module[key] = moduleOverrides[key];\r\n }\r\n}\r\n// Free the object hierarchy contained in the overrides, this lets the GC\r\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\r\nmoduleOverrides = undefined;\r\n\r\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\r\n\r\n// TODO remove when SDL2 is fixed; also add the above assertion\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// {{PREAMBLE_ADDITIONS}}\r\n\r\nvar STACK_ALIGN = 16;\r\n\r\n\r\nfunction dynamicAlloc(size) {\r\n var ret = HEAP32[DYNAMICTOP_PTR>>2];\r\n var end = (ret + size + 15) & -16;\r\n if (end > _emscripten_get_heap_size()) {\r\n abort();\r\n }\r\n HEAP32[DYNAMICTOP_PTR>>2] = end;\r\n return ret;\r\n}\r\n\r\nfunction alignMemory(size, factor) {\r\n if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\r\n return Math.ceil(size / factor) * factor;\r\n}\r\n\r\nfunction getNativeTypeSize(type) {\r\n switch (type) {\r\n case 'i1': case 'i8': return 1;\r\n case 'i16': return 2;\r\n case 'i32': return 4;\r\n case 'i64': return 8;\r\n case 'float': return 4;\r\n case 'double': return 8;\r\n default: {\r\n if (type[type.length-1] === '*') {\r\n return 4; // A pointer\r\n } else if (type[0] === 'i') {\r\n var bits = parseInt(type.substr(1));\r\n assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\r\n return bits / 8;\r\n } else {\r\n return 0;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction warnOnce(text) {\r\n if (!warnOnce.shown) warnOnce.shown = {};\r\n if (!warnOnce.shown[text]) {\r\n warnOnce.shown[text] = 1;\r\n err(text);\r\n }\r\n}\r\n\r\nvar asm2wasmImports = { // special asm2wasm imports\r\n \"f64-rem\": function(x, y) {\r\n return x % y;\r\n },\r\n \"debugger\": function() {\r\n debugger;\r\n }\r\n};\r\n\r\n\r\n\r\nvar jsCallStartIndex = 1;\r\nvar functionPointers = new Array(0);\r\n\r\n// Wraps a JS function as a wasm function with a given signature.\r\n// In the future, we may get a WebAssembly.Function constructor. Until then,\r\n// we create a wasm module that takes the JS function as an import with a given\r\n// signature, and re-exports that as a wasm function.\r\nfunction convertJsFunctionToWasm(func, sig) {\r\n\r\n // The module is static, with the exception of the type section, which is\r\n // generated based on the signature passed in.\r\n var typeSection = [\r\n 0x01, // id: section,\r\n 0x00, // length: 0 (placeholder)\r\n 0x01, // count: 1\r\n 0x60, // form: func\r\n ];\r\n var sigRet = sig.slice(0, 1);\r\n var sigParam = sig.slice(1);\r\n var typeCodes = {\r\n 'i': 0x7f, // i32\r\n 'j': 0x7e, // i64\r\n 'f': 0x7d, // f32\r\n 'd': 0x7c, // f64\r\n };\r\n\r\n // Parameters, length + signatures\r\n typeSection.push(sigParam.length);\r\n for (var i = 0; i < sigParam.length; ++i) {\r\n typeSection.push(typeCodes[sigParam[i]]);\r\n }\r\n\r\n // Return values, length + signatures\r\n // With no multi-return in MVP, either 0 (void) or 1 (anything else)\r\n if (sigRet == 'v') {\r\n typeSection.push(0x00);\r\n } else {\r\n typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\r\n }\r\n\r\n // Write the overall length of the type section back into the section header\r\n // (excepting the 2 bytes for the section id and length)\r\n typeSection[1] = typeSection.length - 2;\r\n\r\n // Rest of the module is static\r\n var bytes = new Uint8Array([\r\n 0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\r\n 0x01, 0x00, 0x00, 0x00, // version: 1\r\n ].concat(typeSection, [\r\n 0x02, 0x07, // import section\r\n // (import \"e\" \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\r\n 0x07, 0x05, // export section\r\n // (export \"f\" (func 0 (type 0)))\r\n 0x01, 0x01, 0x66, 0x00, 0x00,\r\n ]));\r\n\r\n // We can compile this wasm module synchronously because it is very small.\r\n // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\r\n var module = new WebAssembly.Module(bytes);\r\n var instance = new WebAssembly.Instance(module, {\r\n e: {\r\n f: func\r\n }\r\n });\r\n var wrappedFunc = instance.exports.f;\r\n return wrappedFunc;\r\n}\r\n\r\n// Add a wasm function to the table.\r\nfunction addFunctionWasm(func, sig) {\r\n var table = wasmTable;\r\n var ret = table.length;\r\n\r\n // Grow the table\r\n try {\r\n table.grow(1);\r\n } catch (err) {\r\n if (!err instanceof RangeError) {\r\n throw err;\r\n }\r\n throw 'Unable to grow wasm table. Use a higher value for RESERVED_FUNCTION_POINTERS or set ALLOW_TABLE_GROWTH.';\r\n }\r\n\r\n // Insert new element\r\n try {\r\n // Attempting to call this with JS function will cause of table.set() to fail\r\n table.set(ret, func);\r\n } catch (err) {\r\n if (!err instanceof TypeError) {\r\n throw err;\r\n }\r\n assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction');\r\n var wrapped = convertJsFunctionToWasm(func, sig);\r\n table.set(ret, wrapped);\r\n }\r\n\r\n return ret;\r\n}\r\n\r\nfunction removeFunctionWasm(index) {\r\n // TODO(sbc): Look into implementing this to allow re-using of table slots\r\n}\r\n\r\n// 'sig' parameter is required for the llvm backend but only when func is not\r\n// already a WebAssembly function.\r\nfunction addFunction(func, sig) {\r\n\r\n\r\n var base = 0;\r\n for (var i = base; i < base + 0; i++) {\r\n if (!functionPointers[i]) {\r\n functionPointers[i] = func;\r\n return jsCallStartIndex + i;\r\n }\r\n }\r\n throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.';\r\n\r\n}\r\n\r\nfunction removeFunction(index) {\r\n\r\n functionPointers[index-jsCallStartIndex] = null;\r\n}\r\n\r\nvar funcWrappers = {};\r\n\r\nfunction getFuncWrapper(func, sig) {\r\n if (!func) return; // on null pointer, return undefined\r\n assert(sig);\r\n if (!funcWrappers[sig]) {\r\n funcWrappers[sig] = {};\r\n }\r\n var sigCache = funcWrappers[sig];\r\n if (!sigCache[func]) {\r\n // optimize away arguments usage in common cases\r\n if (sig.length === 1) {\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func);\r\n };\r\n } else if (sig.length === 2) {\r\n sigCache[func] = function dynCall_wrapper(arg) {\r\n return dynCall(sig, func, [arg]);\r\n };\r\n } else {\r\n // general case\r\n sigCache[func] = function dynCall_wrapper() {\r\n return dynCall(sig, func, Array.prototype.slice.call(arguments));\r\n };\r\n }\r\n }\r\n return sigCache[func];\r\n}\r\n\r\n\r\nfunction makeBigInt(low, high, unsigned) {\r\n return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0));\r\n}\r\n\r\nfunction dynCall(sig, ptr, args) {\r\n if (args && args.length) {\r\n return Module['dynCall_' + sig].apply(null, [ptr].concat(args));\r\n } else {\r\n return Module['dynCall_' + sig].call(null, ptr);\r\n }\r\n}\r\n\r\nvar tempRet0 = 0;\r\n\r\nvar setTempRet0 = function(value) {\r\n tempRet0 = value;\r\n};\r\n\r\nvar getTempRet0 = function() {\r\n return tempRet0;\r\n};\r\n\r\n\r\nvar Runtime = {\r\n};\r\n\r\n// The address globals begin at. Very low in memory, for code size and optimization opportunities.\r\n// Above 0 is static memory, starting with globals.\r\n// Then the stack.\r\n// Then 'dynamic' memory for sbrk.\r\nvar GLOBAL_BASE = 1024;\r\n\r\n\r\n\r\n\r\n// === Preamble library stuff ===\r\n\r\n// Documentation for the public APIs defined in this file must be updated in:\r\n// site/source/docs/api_reference/preamble.js.rst\r\n// A prebuilt local version of the documentation is available at:\r\n// site/build/text/docs/api_reference/preamble.js.txt\r\n// You can also build docs locally as HTML or other formats in site/\r\n// An online HTML version (which may be of a different version of Emscripten)\r\n// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\r\n\r\n\r\n\r\nif (typeof WebAssembly !== 'object') {\r\n err('no native wasm support detected');\r\n}\r\n\r\n\r\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\r\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\r\n\r\n/** @type {function(number, number, string, boolean=)} */\r\nfunction setValue(ptr, value, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i8': HEAP8[((ptr)>>0)]=value; break;\r\n case 'i16': HEAP16[((ptr)>>1)]=value; break;\r\n case 'i32': HEAP32[((ptr)>>2)]=value; break;\r\n case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break;\r\n case 'float': HEAPF32[((ptr)>>2)]=value; break;\r\n case 'double': HEAPF64[((ptr)>>3)]=value; break;\r\n default: abort('invalid type for setValue: ' + type);\r\n }\r\n}\r\n\r\n/** @type {function(number, string, boolean=)} */\r\nfunction getValue(ptr, type, noSafe) {\r\n type = type || 'i8';\r\n if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\r\n switch(type) {\r\n case 'i1': return HEAP8[((ptr)>>0)];\r\n case 'i8': return HEAP8[((ptr)>>0)];\r\n case 'i16': return HEAP16[((ptr)>>1)];\r\n case 'i32': return HEAP32[((ptr)>>2)];\r\n case 'i64': return HEAP32[((ptr)>>2)];\r\n case 'float': return HEAPF32[((ptr)>>2)];\r\n case 'double': return HEAPF64[((ptr)>>3)];\r\n default: abort('invalid type for getValue: ' + type);\r\n }\r\n return null;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n// Wasm globals\r\n\r\nvar wasmMemory;\r\n\r\n// Potentially used for direct table calls.\r\nvar wasmTable;\r\n\r\n\r\n//========================================\r\n// Runtime essentials\r\n//========================================\r\n\r\n// whether we are quitting the application. no code should run after this.\r\n// set in exit() and abort()\r\nvar ABORT = false;\r\n\r\n// set by exit() and abort(). Passed to 'onExit' handler.\r\n// NOTE: This is also used as the process return code code in shell environments\r\n// but only when noExitRuntime is false.\r\nvar EXITSTATUS = 0;\r\n\r\n/** @type {function(*, string=)} */\r\nfunction assert(condition, text) {\r\n if (!condition) {\r\n abort('Assertion failed: ' + text);\r\n }\r\n}\r\n\r\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\r\nfunction getCFunc(ident) {\r\n var func = Module['_' + ident]; // closure exported function\r\n assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\r\n return func;\r\n}\r\n\r\n// C calling interface.\r\nfunction ccall(ident, returnType, argTypes, args, opts) {\r\n // For fast lookup of conversion functions\r\n var toC = {\r\n 'string': function(str) {\r\n var ret = 0;\r\n if (str !== null && str !== undefined && str !== 0) { // null string\r\n // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\r\n var len = (str.length << 2) + 1;\r\n ret = stackAlloc(len);\r\n stringToUTF8(str, ret, len);\r\n }\r\n return ret;\r\n },\r\n 'array': function(arr) {\r\n var ret = stackAlloc(arr.length);\r\n writeArrayToMemory(arr, ret);\r\n return ret;\r\n }\r\n };\r\n\r\n function convertReturnValue(ret) {\r\n if (returnType === 'string') return UTF8ToString(ret);\r\n if (returnType === 'boolean') return Boolean(ret);\r\n return ret;\r\n }\r\n\r\n var func = getCFunc(ident);\r\n var cArgs = [];\r\n var stack = 0;\r\n if (args) {\r\n for (var i = 0; i < args.length; i++) {\r\n var converter = toC[argTypes[i]];\r\n if (converter) {\r\n if (stack === 0) stack = stackSave();\r\n cArgs[i] = converter(args[i]);\r\n } else {\r\n cArgs[i] = args[i];\r\n }\r\n }\r\n }\r\n var ret = func.apply(null, cArgs);\r\n ret = convertReturnValue(ret);\r\n if (stack !== 0) stackRestore(stack);\r\n return ret;\r\n}\r\n\r\nfunction cwrap(ident, returnType, argTypes, opts) {\r\n argTypes = argTypes || [];\r\n // When the function takes numbers and returns a number, we can just return\r\n // the original function\r\n var numericArgs = argTypes.every(function(type){ return type === 'number'});\r\n var numericRet = returnType !== 'string';\r\n if (numericRet && numericArgs && !opts) {\r\n return getCFunc(ident);\r\n }\r\n return function() {\r\n return ccall(ident, returnType, argTypes, arguments, opts);\r\n }\r\n}\r\n\r\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\r\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\r\nvar ALLOC_DYNAMIC = 2; // Cannot be freed except through sbrk\r\nvar ALLOC_NONE = 3; // Do not allocate\r\n\r\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\r\n// is a little tricky (see docs right below). The reason is that it is optimized\r\n// for multiple syntaxes to save space in generated code. So you should\r\n// normally not use allocate(), and instead allocate memory using _malloc(),\r\n// initialize it with setValue(), and so forth.\r\n// @slab: An array of data, or a number. If a number, then the size of the block to allocate,\r\n// in *bytes* (note that this is sometimes confusing: the next parameter does not\r\n// affect this!)\r\n// @types: Either an array of types, one for each byte (or 0 if no type at that position),\r\n// or a single type which is used for the entire block. This only matters if there\r\n// is initial data - if @slab is a number, then this does not matter at all and is\r\n// ignored.\r\n// @allocator: How to allocate memory, see ALLOC_*\r\n/** @type {function((TypedArray|Array|number), string, number, number=)} */\r\nfunction allocate(slab, types, allocator, ptr) {\r\n var zeroinit, size;\r\n if (typeof slab === 'number') {\r\n zeroinit = true;\r\n size = slab;\r\n } else {\r\n zeroinit = false;\r\n size = slab.length;\r\n }\r\n\r\n var singleType = typeof types === 'string' ? types : null;\r\n\r\n var ret;\r\n if (allocator == ALLOC_NONE) {\r\n ret = ptr;\r\n } else {\r\n ret = [_malloc,\r\n stackAlloc,\r\n dynamicAlloc][allocator](Math.max(size, singleType ? 1 : types.length));\r\n }\r\n\r\n if (zeroinit) {\r\n var stop;\r\n ptr = ret;\r\n assert((ret & 3) == 0);\r\n stop = ret + (size & ~3);\r\n for (; ptr < stop; ptr += 4) {\r\n HEAP32[((ptr)>>2)]=0;\r\n }\r\n stop = ret + size;\r\n while (ptr < stop) {\r\n HEAP8[((ptr++)>>0)]=0;\r\n }\r\n return ret;\r\n }\r\n\r\n if (singleType === 'i8') {\r\n if (slab.subarray || slab.slice) {\r\n HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret);\r\n } else {\r\n HEAPU8.set(new Uint8Array(slab), ret);\r\n }\r\n return ret;\r\n }\r\n\r\n var i = 0, type, typeSize, previousType;\r\n while (i < size) {\r\n var curr = slab[i];\r\n\r\n type = singleType || types[i];\r\n if (type === 0) {\r\n i++;\r\n continue;\r\n }\r\n\r\n if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later\r\n\r\n setValue(ret+i, curr, type);\r\n\r\n // no need to look up size unless type changes, so cache it\r\n if (previousType !== type) {\r\n typeSize = getNativeTypeSize(type);\r\n previousType = type;\r\n }\r\n i += typeSize;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n// Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready\r\nfunction getMemory(size) {\r\n if (!runtimeInitialized) return dynamicAlloc(size);\r\n return _malloc(size);\r\n}\r\n\r\n\r\n\r\n\r\n/** @type {function(number, number=)} */\r\nfunction Pointer_stringify(ptr, length) {\r\n abort(\"this function has been removed - you should use UTF8ToString(ptr, maxBytesToRead) instead!\");\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nfunction AsciiToString(ptr) {\r\n var str = '';\r\n while (1) {\r\n var ch = HEAPU8[((ptr++)>>0)];\r\n if (!ch) return str;\r\n str += String.fromCharCode(ch);\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\r\n\r\nfunction stringToAscii(str, outPtr) {\r\n return writeAsciiToMemory(str, outPtr, false);\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\r\n\r\n/**\r\n * @param {number} idx\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ArrayToString(u8Array, idx, maxBytesToRead) {\r\n var endIdx = idx + maxBytesToRead;\r\n var endPtr = idx;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\r\n while (u8Array[endPtr] && !(endPtr >= endIdx)) ++endPtr;\r\n\r\n if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {\r\n return UTF8Decoder.decode(u8Array.subarray(idx, endPtr));\r\n } else {\r\n var str = '';\r\n // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\r\n while (idx < endPtr) {\r\n // For UTF8 byte structure, see:\r\n // http://en.wikipedia.org/wiki/UTF-8#Description\r\n // https://www.ietf.org/rfc/rfc2279.txt\r\n // https://tools.ietf.org/html/rfc3629\r\n var u0 = u8Array[idx++];\r\n if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\r\n var u1 = u8Array[idx++] & 63;\r\n if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\r\n var u2 = u8Array[idx++] & 63;\r\n if ((u0 & 0xF0) == 0xE0) {\r\n u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (u8Array[idx++] & 63);\r\n }\r\n\r\n if (u0 < 0x10000) {\r\n str += String.fromCharCode(u0);\r\n } else {\r\n var ch = u0 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n }\r\n }\r\n }\r\n return str;\r\n}\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\r\n// copy of that string as a Javascript String object.\r\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\r\n// this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\r\n// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\r\n// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\r\n// not produce a string of exact length [ptr, ptr+maxBytesToRead[)\r\n// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\r\n// throw JS JIT optimizations off, so it is worth to consider consistently using one\r\n// style or the other.\r\n/**\r\n * @param {number} ptr\r\n * @param {number=} maxBytesToRead\r\n * @return {string}\r\n */\r\nfunction UTF8ToString(ptr, maxBytesToRead) {\r\n return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\r\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element.\r\n// outIdx: The starting offset in the array to begin the copying.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array.\r\n// This count should include the null terminator,\r\n// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) {\r\n if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\r\n return 0;\r\n\r\n var startIdx = outIdx;\r\n var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) {\r\n var u1 = str.charCodeAt(++i);\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n if (outIdx >= endIdx) break;\r\n outU8Array[outIdx++] = u;\r\n } else if (u <= 0x7FF) {\r\n if (outIdx + 1 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xC0 | (u >> 6);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else if (u <= 0xFFFF) {\r\n if (outIdx + 2 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xE0 | (u >> 12);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n } else {\r\n if (outIdx + 3 >= endIdx) break;\r\n outU8Array[outIdx++] = 0xF0 | (u >> 18);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63);\r\n outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63);\r\n outU8Array[outIdx++] = 0x80 | (u & 63);\r\n }\r\n }\r\n // Null-terminate the pointer to the buffer.\r\n outU8Array[outIdx] = 0;\r\n return outIdx - startIdx;\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\r\n return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\r\nfunction lengthBytesUTF8(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var u = str.charCodeAt(i); // possibly a lead surrogate\r\n if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n if (u <= 0x7F) ++len;\r\n else if (u <= 0x7FF) len += 2;\r\n else if (u <= 0xFFFF) len += 3;\r\n else len += 4;\r\n }\r\n return len;\r\n}\r\n\r\n\r\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\r\n// a copy of that string as a Javascript String object.\r\n\r\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\r\nfunction UTF16ToString(ptr) {\r\n var endPtr = ptr;\r\n // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\r\n // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\r\n var idx = endPtr >> 1;\r\n while (HEAP16[idx]) ++idx;\r\n endPtr = idx << 1;\r\n\r\n if (endPtr - ptr > 32 && UTF16Decoder) {\r\n return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\r\n } else {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\r\n if (codeUnit == 0) return str;\r\n ++i;\r\n // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\r\n str += String.fromCharCode(codeUnit);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 2) return 0;\r\n maxBytesToWrite -= 2; // Null terminator.\r\n var startPtr = outPtr;\r\n var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\r\n for (var i = 0; i < numCharsToWrite; ++i) {\r\n // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n HEAP16[((outPtr)>>1)]=codeUnit;\r\n outPtr += 2;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP16[((outPtr)>>1)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF16(str) {\r\n return str.length*2;\r\n}\r\n\r\nfunction UTF32ToString(ptr) {\r\n var i = 0;\r\n\r\n var str = '';\r\n while (1) {\r\n var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\r\n if (utf32 == 0)\r\n return str;\r\n ++i;\r\n // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n if (utf32 >= 0x10000) {\r\n var ch = utf32 - 0x10000;\r\n str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\r\n } else {\r\n str += String.fromCharCode(utf32);\r\n }\r\n }\r\n}\r\n\r\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\r\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\r\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\r\n// Parameters:\r\n// str: the Javascript string to copy.\r\n// outPtr: Byte address in Emscripten HEAP where to write the string to.\r\n// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\r\n// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\r\n// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\r\n// Returns the number of bytes written, EXCLUDING the null terminator.\r\n\r\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\r\n // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\r\n if (maxBytesToWrite === undefined) {\r\n maxBytesToWrite = 0x7FFFFFFF;\r\n }\r\n if (maxBytesToWrite < 4) return 0;\r\n var startPtr = outPtr;\r\n var endPtr = startPtr + maxBytesToWrite - 4;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\r\n var trailSurrogate = str.charCodeAt(++i);\r\n codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\r\n }\r\n HEAP32[((outPtr)>>2)]=codeUnit;\r\n outPtr += 4;\r\n if (outPtr + 4 > endPtr) break;\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n HEAP32[((outPtr)>>2)]=0;\r\n return outPtr - startPtr;\r\n}\r\n\r\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\r\n\r\nfunction lengthBytesUTF32(str) {\r\n var len = 0;\r\n for (var i = 0; i < str.length; ++i) {\r\n // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\r\n // See http://unicode.org/faq/utf_bom.html#utf16-3\r\n var codeUnit = str.charCodeAt(i);\r\n if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\r\n len += 4;\r\n }\r\n\r\n return len;\r\n}\r\n\r\n// Allocate heap space for a JS string, and write it there.\r\n// It is the responsibility of the caller to free() that memory.\r\nfunction allocateUTF8(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = _malloc(size);\r\n if (ret) stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Allocate stack space for a JS string, and write it there.\r\nfunction allocateUTF8OnStack(str) {\r\n var size = lengthBytesUTF8(str) + 1;\r\n var ret = stackAlloc(size);\r\n stringToUTF8Array(str, HEAP8, ret, size);\r\n return ret;\r\n}\r\n\r\n// Deprecated: This function should not be called because it is unsafe and does not provide\r\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\r\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\r\n// to be secure from out of bounds writes.\r\n/** @deprecated */\r\nfunction writeStringToMemory(string, buffer, dontAddNull) {\r\n warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\r\n\r\n var /** @type {number} */ lastChar, /** @type {number} */ end;\r\n if (dontAddNull) {\r\n // stringToUTF8Array always appends null. If we don't want to do that, remember the\r\n // character that existed at the location where the null will be placed, and restore\r\n // that after the write (below).\r\n end = buffer + lengthBytesUTF8(string);\r\n lastChar = HEAP8[end];\r\n }\r\n stringToUTF8(string, buffer, Infinity);\r\n if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\r\n}\r\n\r\nfunction writeArrayToMemory(array, buffer) {\r\n HEAP8.set(array, buffer);\r\n}\r\n\r\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\r\n for (var i = 0; i < str.length; ++i) {\r\n HEAP8[((buffer++)>>0)]=str.charCodeAt(i);\r\n }\r\n // Null-terminate the pointer to the HEAP.\r\n if (!dontAddNull) HEAP8[((buffer)>>0)]=0;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nfunction demangle(func) {\r\n return func;\r\n}\r\n\r\nfunction demangleAll(text) {\r\n var regex =\r\n /__Z[\\w\\d_]+/g;\r\n return text.replace(regex,\r\n function(x) {\r\n var y = demangle(x);\r\n return x === y ? x : (y + ' [' + x + ']');\r\n });\r\n}\r\n\r\nfunction jsStackTrace() {\r\n var err = new Error();\r\n if (!err.stack) {\r\n // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\r\n // so try that as a special-case.\r\n try {\r\n throw new Error(0);\r\n } catch(e) {\r\n err = e;\r\n }\r\n if (!err.stack) {\r\n return '(no stack trace available)';\r\n }\r\n }\r\n return err.stack.toString();\r\n}\r\n\r\nfunction stackTrace() {\r\n var js = jsStackTrace();\r\n if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\r\n return demangleAll(js);\r\n}\r\n\r\n\r\n\r\n// Memory management\r\n\r\nvar PAGE_SIZE = 16384;\r\nvar WASM_PAGE_SIZE = 65536;\r\nvar ASMJS_PAGE_SIZE = 16777216;\r\n\r\nfunction alignUp(x, multiple) {\r\n if (x % multiple > 0) {\r\n x += multiple - (x % multiple);\r\n }\r\n return x;\r\n}\r\n\r\nvar HEAP,\r\n/** @type {ArrayBuffer} */\r\n buffer,\r\n/** @type {Int8Array} */\r\n HEAP8,\r\n/** @type {Uint8Array} */\r\n HEAPU8,\r\n/** @type {Int16Array} */\r\n HEAP16,\r\n/** @type {Uint16Array} */\r\n HEAPU16,\r\n/** @type {Int32Array} */\r\n HEAP32,\r\n/** @type {Uint32Array} */\r\n HEAPU32,\r\n/** @type {Float32Array} */\r\n HEAPF32,\r\n/** @type {Float64Array} */\r\n HEAPF64;\r\n\r\nfunction updateGlobalBufferViews() {\r\n Module['HEAP8'] = HEAP8 = new Int8Array(buffer);\r\n Module['HEAP16'] = HEAP16 = new Int16Array(buffer);\r\n Module['HEAP32'] = HEAP32 = new Int32Array(buffer);\r\n Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer);\r\n Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer);\r\n Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer);\r\n Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer);\r\n Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer);\r\n}\r\n\r\n\r\nvar STATIC_BASE = 1024,\r\n STACK_BASE = 1850928,\r\n STACKTOP = STACK_BASE,\r\n STACK_MAX = 7093808,\r\n DYNAMIC_BASE = 7093808,\r\n DYNAMICTOP_PTR = 1850896;\r\n\r\n\r\n\r\n\r\nvar TOTAL_STACK = 5242880;\r\n\r\nvar INITIAL_TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728;\r\nif (INITIAL_TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\r\n\r\n// Initialize the runtime's memory\r\n\r\n\r\n\r\n\r\n\r\n\r\n if (Module['wasmMemory']) {\r\n wasmMemory = Module['wasmMemory'];\r\n } else {\r\n wasmMemory = new WebAssembly.Memory({\r\n 'initial': INITIAL_TOTAL_MEMORY / WASM_PAGE_SIZE\r\n });\r\n }\r\n\r\n\r\nif (wasmMemory) {\r\n buffer = wasmMemory.buffer;\r\n}\r\n\r\n// If the user provides an incorrect length, just use that length instead rather than providing the user to\r\n// specifically provide the memory length with Module['TOTAL_MEMORY'].\r\nINITIAL_TOTAL_MEMORY = buffer.byteLength;\r\nupdateGlobalBufferViews();\r\n\r\nHEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Endianness check (note: assumes compiler arch was little-endian)\r\n\r\nfunction callRuntimeCallbacks(callbacks) {\r\n while(callbacks.length > 0) {\r\n var callback = callbacks.shift();\r\n if (typeof callback == 'function') {\r\n callback();\r\n continue;\r\n }\r\n var func = callback.func;\r\n if (typeof func === 'number') {\r\n if (callback.arg === undefined) {\r\n Module['dynCall_v'](func);\r\n } else {\r\n Module['dynCall_vi'](func, callback.arg);\r\n }\r\n } else {\r\n func(callback.arg === undefined ? null : callback.arg);\r\n }\r\n }\r\n}\r\n\r\nvar __ATPRERUN__ = []; // functions called before the runtime is initialized\r\nvar __ATINIT__ = []; // functions called during startup\r\nvar __ATMAIN__ = []; // functions called when main() is to be run\r\nvar __ATEXIT__ = []; // functions called during shutdown\r\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\r\n\r\nvar runtimeInitialized = false;\r\nvar runtimeExited = false;\r\n\r\n\r\nfunction preRun() {\r\n // compatibility - merge in anything from Module['preRun'] at this time\r\n if (Module['preRun']) {\r\n if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\r\n while (Module['preRun'].length) {\r\n addOnPreRun(Module['preRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPRERUN__);\r\n}\r\n\r\nfunction initRuntime() {\r\n runtimeInitialized = true;\r\n \r\n callRuntimeCallbacks(__ATINIT__);\r\n}\r\n\r\nfunction preMain() {\r\n \r\n callRuntimeCallbacks(__ATMAIN__);\r\n}\r\n\r\nfunction exitRuntime() {\r\n runtimeExited = true;\r\n}\r\n\r\nfunction postRun() {\r\n // compatibility - merge in anything from Module['postRun'] at this time\r\n if (Module['postRun']) {\r\n if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\r\n while (Module['postRun'].length) {\r\n addOnPostRun(Module['postRun'].shift());\r\n }\r\n }\r\n callRuntimeCallbacks(__ATPOSTRUN__);\r\n}\r\n\r\nfunction addOnPreRun(cb) {\r\n __ATPRERUN__.unshift(cb);\r\n}\r\n\r\nfunction addOnInit(cb) {\r\n __ATINIT__.unshift(cb);\r\n}\r\n\r\nfunction addOnPreMain(cb) {\r\n __ATMAIN__.unshift(cb);\r\n}\r\n\r\nfunction addOnExit(cb) {\r\n}\r\n\r\nfunction addOnPostRun(cb) {\r\n __ATPOSTRUN__.unshift(cb);\r\n}\r\n\r\nfunction unSign(value, bits, ignore) {\r\n if (value >= 0) {\r\n return value;\r\n }\r\n return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts\r\n : Math.pow(2, bits) + value;\r\n}\r\nfunction reSign(value, bits, ignore) {\r\n if (value <= 0) {\r\n return value;\r\n }\r\n var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32\r\n : Math.pow(2, bits-1);\r\n if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that\r\n // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors\r\n // TODO: In i64 mode 1, resign the two parts separately and safely\r\n value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts\r\n }\r\n return value;\r\n}\r\n\r\n\r\n\r\nvar Math_abs = Math.abs;\r\nvar Math_cos = Math.cos;\r\nvar Math_sin = Math.sin;\r\nvar Math_tan = Math.tan;\r\nvar Math_acos = Math.acos;\r\nvar Math_asin = Math.asin;\r\nvar Math_atan = Math.atan;\r\nvar Math_atan2 = Math.atan2;\r\nvar Math_exp = Math.exp;\r\nvar Math_log = Math.log;\r\nvar Math_sqrt = Math.sqrt;\r\nvar Math_ceil = Math.ceil;\r\nvar Math_floor = Math.floor;\r\nvar Math_pow = Math.pow;\r\nvar Math_imul = Math.imul;\r\nvar Math_fround = Math.fround;\r\nvar Math_round = Math.round;\r\nvar Math_min = Math.min;\r\nvar Math_max = Math.max;\r\nvar Math_clz32 = Math.clz32;\r\nvar Math_trunc = Math.trunc;\r\n\r\n\r\n\r\n// A counter of dependencies for calling run(). If we need to\r\n// do asynchronous work before running, increment this and\r\n// decrement it. Incrementing must happen in a place like\r\n// Module.preRun (used by emcc to add file preloading).\r\n// Note that you can add dependencies in preRun, even though\r\n// it happens right before run - run will be postponed until\r\n// the dependencies are met.\r\nvar runDependencies = 0;\r\nvar runDependencyWatcher = null;\r\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\r\n\r\nfunction getUniqueRunDependency(id) {\r\n return id;\r\n}\r\n\r\nfunction addRunDependency(id) {\r\n runDependencies++;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n}\r\n\r\nfunction removeRunDependency(id) {\r\n runDependencies--;\r\n if (Module['monitorRunDependencies']) {\r\n Module['monitorRunDependencies'](runDependencies);\r\n }\r\n if (runDependencies == 0) {\r\n if (runDependencyWatcher !== null) {\r\n clearInterval(runDependencyWatcher);\r\n runDependencyWatcher = null;\r\n }\r\n if (dependenciesFulfilled) {\r\n var callback = dependenciesFulfilled;\r\n dependenciesFulfilled = null;\r\n callback(); // can add another dependenciesFulfilled\r\n }\r\n }\r\n}\r\n\r\nModule[\"preloadedImages\"] = {}; // maps url to image data\r\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\r\n\r\n\r\nvar memoryInitializer = null;\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\r\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\r\n\r\n// Indicates whether filename is a base64 data URI.\r\nfunction isDataURI(filename) {\r\n return String.prototype.startsWith ?\r\n filename.startsWith(dataURIPrefix) :\r\n filename.indexOf(dataURIPrefix) === 0;\r\n}\r\n\r\n\r\n\r\n\r\nvar wasmBinaryFile = 'DiabloSpawn.wasm';\r\nif (!isDataURI(wasmBinaryFile)) {\r\n wasmBinaryFile = locateFile(wasmBinaryFile);\r\n}\r\n\r\nfunction getBinary() {\r\n try {\r\n if (Module['wasmBinary']) {\r\n return new Uint8Array(Module['wasmBinary']);\r\n }\r\n if (readBinary) {\r\n return readBinary(wasmBinaryFile);\r\n } else {\r\n throw \"both async and sync fetching of the wasm failed\";\r\n }\r\n }\r\n catch (err) {\r\n abort(err);\r\n }\r\n}\r\n\r\nfunction getBinaryPromise() {\r\n // if we don't have the binary yet, and have the Fetch api, use that\r\n // in some environments, like Electron's render process, Fetch api may be present, but have a different context than expected, let's only use it on the Web\r\n if (!Module['wasmBinary'] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === 'function') {\r\n return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\r\n if (!response['ok']) {\r\n throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\r\n }\r\n return response['arrayBuffer']();\r\n }).catch(function () {\r\n return getBinary();\r\n });\r\n }\r\n // Otherwise, getBinary should be able to get it synchronously\r\n return new Promise(function(resolve, reject) {\r\n resolve(getBinary());\r\n });\r\n}\r\n\r\n\r\n\r\n// Create the wasm instance.\r\n// Receives the wasm imports, returns the exports.\r\nfunction createWasm(env) {\r\n\r\n // prepare imports\r\n var info = {\r\n 'env': env\r\n ,\r\n 'global': {\r\n 'NaN': NaN,\r\n 'Infinity': Infinity\r\n },\r\n 'global.Math': Math,\r\n 'asm2wasm': asm2wasmImports\r\n };\r\n // Load the wasm module and create an instance of using native support in the JS engine.\r\n // handle a generated wasm instance, receiving its exports and\r\n // performing other necessary setup\r\n function receiveInstance(instance, module) {\r\n var exports = instance.exports;\r\n Module['asm'] = exports;\r\n removeRunDependency('wasm-instantiate');\r\n }\r\n addRunDependency('wasm-instantiate');\r\n\r\n\r\n function receiveInstantiatedSource(output) {\r\n // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance.\r\n // receiveInstance() will swap in the exports (to Module.asm) so they can be called\r\n // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\r\n // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\r\n receiveInstance(output['instance']);\r\n }\r\n\r\n\r\n function instantiateArrayBuffer(receiver) {\r\n return getBinaryPromise().then(function(binary) {\r\n return WebAssembly.instantiate(binary, info);\r\n }).then(receiver, function(reason) {\r\n err('failed to asynchronously prepare wasm: ' + reason);\r\n abort(reason);\r\n });\r\n }\r\n\r\n // Prefer streaming instantiation if available.\r\n function instantiateAsync() {\r\n if (!Module['wasmBinary'] &&\r\n typeof WebAssembly.instantiateStreaming === 'function' &&\r\n !isDataURI(wasmBinaryFile) &&\r\n typeof fetch === 'function') {\r\n fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\r\n return WebAssembly.instantiateStreaming(response, info)\r\n .then(receiveInstantiatedSource, function(reason) {\r\n // We expect the most common failure cause to be a bad MIME type for the binary,\r\n // in which case falling back to ArrayBuffer instantiation should work.\r\n err('wasm streaming compile failed: ' + reason);\r\n err('falling back to ArrayBuffer instantiation');\r\n instantiateArrayBuffer(receiveInstantiatedSource);\r\n });\r\n });\r\n } else {\r\n return instantiateArrayBuffer(receiveInstantiatedSource);\r\n }\r\n }\r\n // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\r\n // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\r\n // to any other async startup actions they are performing.\r\n if (Module['instantiateWasm']) {\r\n try {\r\n var exports = Module['instantiateWasm'](info, receiveInstance);\r\n return exports;\r\n } catch(e) {\r\n err('Module.instantiateWasm callback failed with error: ' + e);\r\n return false;\r\n }\r\n }\r\n\r\n instantiateAsync();\r\n return {}; // no exports yet; we'll fill them in later\r\n}\r\n\r\n// Provide an \"asm.js function\" for the application, called to \"link\" the asm.js module. We instantiate\r\n// the wasm module at that time, and it receives imports and provides exports and so forth, the app\r\n// doesn't need to care that it is wasm or asm.js.\r\n\r\nModule['asm'] = function(global, env, providedBuffer) {\r\n // memory was already allocated (so js could use the buffer)\r\n env['memory'] = wasmMemory\r\n ;\r\n // import table\r\n env['table'] = wasmTable = new WebAssembly.Table({\r\n 'initial': 1116,\r\n 'maximum': 1116,\r\n 'element': 'anyfunc'\r\n });\r\n // With the wasm backend __memory_base and __table_base and only needed for\r\n // relocatable output.\r\n env['__memory_base'] = 1024; // tell the memory segments where to place themselves\r\n // table starts at 0 by default (even in dynamic linking, for the main module)\r\n env['__table_base'] = 0;\r\n\r\n var exports = createWasm(env);\r\n return exports;\r\n};\r\n\r\n// Globals used by JS i64 conversions\r\nvar tempDouble;\r\nvar tempI64;\r\n\r\n// === Body ===\r\n\r\nvar ASM_CONSTS = [function($0) { self.DApi.current_save_id($0); }];\r\n\r\nfunction _emscripten_asm_const_ii(code, a0) {\r\n return ASM_CONSTS[code](a0);\r\n}\r\nfunction __api_close_keyboard(){ self.DApi.close_keyboard(); }\r\nfunction __api_open_keyboard(x0,y0,x1,y1,len){ self.DApi.open_keyboard(x0, y0, x1, y1, len); }\r\nfunction _api_create_sound(id,ptr,size){ self.DApi.create_sound(id, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _api_create_sound_float(id,ptr,samples,channels,rate){ self.DApi.create_sound_raw(id, HEAPF32.slice(ptr / 4, ptr / 4 + samples * channels), samples, channels, rate); }\r\nfunction _api_delete_sound(id){ self.DApi.delete_sound(id); }\r\nfunction _api_draw_begin(){ self.DApi.draw_begin(); }\r\nfunction _api_draw_belt(items){ self.DApi.draw_belt(HEAP32.subarray(items / 4, items / 4 + 8)); }\r\nfunction _api_draw_blit(x,y,w,h,ptr){ self.DApi.draw_blit(x, y, w, h, HEAPU8.subarray(ptr, ptr + w * h * 4)); }\r\nfunction _api_draw_clip_text(x0,y0,x1,y1){ self.DApi.draw_clip_text(x0, y0, x1, y1); }\r\nfunction _api_draw_end(){ self.DApi.draw_end(); }\r\nfunction _api_draw_text(x,y,ptr,color){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); self.DApi.draw_text(x, y, text, color); }\r\nfunction _api_duplicate_sound(id,srcId){ self.DApi.duplicate_sound(id, srcId); }\r\nfunction _api_exit_game(){ self.DApi.exit_game(); }\r\nfunction _api_play_sound(id,volume,pan,loop){ self.DApi.play_sound(id, volume, pan, loop); }\r\nfunction _api_set_cursor(x,y){ self.DApi.set_cursor(x, y); }\r\nfunction _api_set_volume(id,volume){ self.DApi.set_volume(id, volume); }\r\nfunction _api_stop_sound(id){ self.DApi.stop_sound(id); }\r\nfunction _api_use_websocket(use){ self.DApi.use_websocket(use); }\r\nfunction _api_websocket_closed(){ return self.DApi.websocket_closed(); }\r\nfunction _api_websocket_send(ptr,size){ self.DApi.websocket_send(HEAPU8.subarray(ptr, ptr + size)); }\r\nfunction _exit_error(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply(null, HEAPU8.subarray( err, end )); self.DApi.exit_error( text ); }\r\nfunction _get_file_contents(path,ptr,offset,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.get_file_contents(text, HEAPU8.subarray(ptr, ptr + size), offset); }\r\nfunction _get_file_size(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); return self.DApi.get_file_size(text); }\r\nfunction _put_file_contents(path,ptr,size){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end)); self.DApi.put_file_contents(text, HEAPU8.slice(ptr, ptr + size)); }\r\nfunction _remove_file(path){ var end = HEAPU8.indexOf( 0, path); var text = String.fromCharCode.apply(null, HEAPU8.subarray(path, end )); self.DApi.remove_file( text ); }\r\nfunction _show_alert(err){ var end = HEAPU8.indexOf( 0, err ); var text = String.fromCharCode.apply( null, HEAPU8.subarray( err, end ) ); self.alert( text ); }\r\nfunction _trace_pop(){ if (self.WASM_TRACE) { self.WASM_TRACE.pop(); } }\r\nfunction _trace_push(ptr){ var end = HEAPU8.indexOf(0, ptr); var text = String.fromCharCode.apply(null, HEAPU8.subarray(ptr, end)); console.log(text); self.WASM_TRACE = self.WASM_TRACE || []; self.WASM_TRACE.push(text); }\r\n\r\n\r\n\r\n// STATICTOP = STATIC_BASE + 1849904;\r\n/* global initializers */ __ATINIT__.push({ func: function() { globalCtors() } });\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n/* no memory initializer */\r\nvar tempDoublePtr = 1850912\r\n\r\nfunction copyTempFloat(ptr) { // functions, because inlining this code increases code size too much\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n}\r\n\r\nfunction copyTempDouble(ptr) {\r\n HEAP8[tempDoublePtr] = HEAP8[ptr];\r\n HEAP8[tempDoublePtr+1] = HEAP8[ptr+1];\r\n HEAP8[tempDoublePtr+2] = HEAP8[ptr+2];\r\n HEAP8[tempDoublePtr+3] = HEAP8[ptr+3];\r\n HEAP8[tempDoublePtr+4] = HEAP8[ptr+4];\r\n HEAP8[tempDoublePtr+5] = HEAP8[ptr+5];\r\n HEAP8[tempDoublePtr+6] = HEAP8[ptr+6];\r\n HEAP8[tempDoublePtr+7] = HEAP8[ptr+7];\r\n}\r\n\r\n// {{PRE_LIBRARY}}\r\n\r\n\r\n function ___assert_fail(condition, filename, line, func) {\r\n abort('Assertion failed: ' + UTF8ToString(condition) + ', at: ' + [filename ? UTF8ToString(filename) : 'unknown filename', line, func ? UTF8ToString(func) : 'unknown function']);\r\n }\r\n\r\n function ___cxa_allocate_exception(size) {\r\n return _malloc(size);\r\n }\r\n\r\n \r\n var ___exception_infos={};\r\n \r\n var ___exception_caught= [];\r\n \r\n function ___exception_addRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount++;\r\n }\r\n \r\n function ___exception_deAdjust(adjusted) {\r\n if (!adjusted || ___exception_infos[adjusted]) return adjusted;\r\n for (var key in ___exception_infos) {\r\n var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for\r\n var adj = ___exception_infos[ptr].adjusted;\r\n var len = adj.length;\r\n for (var i = 0; i < len; i++) {\r\n if (adj[i] === adjusted) {\r\n return ptr;\r\n }\r\n }\r\n }\r\n return adjusted;\r\n }function ___cxa_begin_catch(ptr) {\r\n var info = ___exception_infos[ptr];\r\n if (info && !info.caught) {\r\n info.caught = true;\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions--;\r\n }\r\n if (info) info.rethrown = false;\r\n ___exception_caught.push(ptr);\r\n ___exception_addRef(___exception_deAdjust(ptr));\r\n return ptr;\r\n }\r\n\r\n \r\n var ___exception_last=0;\r\n \r\n \r\n function ___cxa_free_exception(ptr) {\r\n try {\r\n return _free(ptr);\r\n } catch(e) {\r\n }\r\n }function ___exception_decRef(ptr) {\r\n if (!ptr) return;\r\n var info = ___exception_infos[ptr];\r\n info.refcount--;\r\n // A rethrown exception can reach refcount 0; it must not be discarded\r\n // Its next handler will clear the rethrown flag and addRef it, prior to\r\n // final decRef and destruction here\r\n if (info.refcount === 0 && !info.rethrown) {\r\n if (info.destructor) {\r\n Module['dynCall_vi'](info.destructor, ptr);\r\n }\r\n delete ___exception_infos[ptr];\r\n ___cxa_free_exception(ptr);\r\n }\r\n }\r\n \r\n function ___cxa_end_catch() {\r\n // Clear state flag.\r\n _setThrew(0);\r\n // Call destructor if one is registered then clear it.\r\n var ptr = ___exception_caught.pop();\r\n if (ptr) {\r\n ___exception_decRef(___exception_deAdjust(ptr));\r\n ___exception_last = 0; // XXX in decRef?\r\n }\r\n }\r\n\r\n \r\n \r\n function ___resumeException(ptr) {\r\n if (!___exception_last) { ___exception_last = ptr; }\r\n throw ptr;\r\n }function ___cxa_find_matching_catch() {\r\n var thrown = ___exception_last;\r\n if (!thrown) {\r\n // just pass through the null ptr\r\n return ((setTempRet0(0),0)|0);\r\n }\r\n var info = ___exception_infos[thrown];\r\n var throwntype = info.type;\r\n if (!throwntype) {\r\n // just pass through the thrown ptr\r\n return ((setTempRet0(0),thrown)|0);\r\n }\r\n var typeArray = Array.prototype.slice.call(arguments);\r\n \r\n var pointer = ___cxa_is_pointer_type(throwntype);\r\n // can_catch receives a **, add indirection\r\n var buffer = 1850880;\r\n HEAP32[((buffer)>>2)]=thrown;\r\n thrown = buffer;\r\n // The different catch blocks are denoted by different types.\r\n // Due to inheritance, those types may not precisely match the\r\n // type of the thrown object. Find one which matches, and\r\n // return the type of the catch block which should be called.\r\n for (var i = 0; i < typeArray.length; i++) {\r\n if (typeArray[i] && ___cxa_can_catch(typeArray[i], throwntype, thrown)) {\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n info.adjusted.push(thrown);\r\n return ((setTempRet0(typeArray[i]),thrown)|0);\r\n }\r\n }\r\n // Shouldn't happen unless we have bogus data in typeArray\r\n // or encounter a type for which emscripten doesn't have suitable\r\n // typeinfo defined. Best-efforts match just in case.\r\n thrown = HEAP32[((thrown)>>2)]; // undo indirection\r\n return ((setTempRet0(throwntype),thrown)|0);\r\n }\r\n Module[\"___cxa_find_matching_catch\"] = ___cxa_find_matching_catch;function ___cxa_find_matching_catch_2(a0,a1\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1);\r\n }\r\n\r\n function ___cxa_find_matching_catch_3(a0,a1,a2\r\n /*``*/) {\r\n return ___cxa_find_matching_catch(a0,a1,a2);\r\n }\r\n\r\n\r\n function ___cxa_get_exception_ptr(ptr) {\r\n // TODO: use info.adjusted?\r\n return ptr;\r\n }\r\n\r\n function ___cxa_pure_virtual() {\r\n ABORT = true;\r\n throw 'Pure virtual function called!';\r\n }\r\n\r\n function ___cxa_throw(ptr, type, destructor) {\r\n ___exception_infos[ptr] = {\r\n ptr: ptr,\r\n adjusted: [ptr],\r\n type: type,\r\n destructor: destructor,\r\n refcount: 0,\r\n caught: false,\r\n rethrown: false\r\n };\r\n ___exception_last = ptr;\r\n if (!(\"uncaught_exception\" in __ZSt18uncaught_exceptionv)) {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions = 1;\r\n } else {\r\n __ZSt18uncaught_exceptionv.uncaught_exceptions++;\r\n }\r\n throw ptr;\r\n }\r\n\r\n function ___cxa_uncaught_exceptions() {\r\n return __ZSt18uncaught_exceptionv.uncaught_exceptions;\r\n }\r\n\r\n function ___gxx_personality_v0() {\r\n }\r\n\r\n function ___lock() {}\r\n\r\n\r\n \r\n \r\n var PATH={splitPath:function (filename) {\r\n var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\n return splitPathRe.exec(filename).slice(1);\r\n },normalizeArray:function (parts, allowAboveRoot) {\r\n // if the path tries to go above the root, `up` ends up > 0\r\n var up = 0;\r\n for (var i = parts.length - 1; i >= 0; i--) {\r\n var last = parts[i];\r\n if (last === '.') {\r\n parts.splice(i, 1);\r\n } else if (last === '..') {\r\n parts.splice(i, 1);\r\n up++;\r\n } else if (up) {\r\n parts.splice(i, 1);\r\n up--;\r\n }\r\n }\r\n // if the path is allowed to go above the root, restore leading ..s\r\n if (allowAboveRoot) {\r\n for (; up; up--) {\r\n parts.unshift('..');\r\n }\r\n }\r\n return parts;\r\n },normalize:function (path) {\r\n var isAbsolute = path.charAt(0) === '/',\r\n trailingSlash = path.substr(-1) === '/';\r\n // Normalize the path\r\n path = PATH.normalizeArray(path.split('/').filter(function(p) {\r\n return !!p;\r\n }), !isAbsolute).join('/');\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n return (isAbsolute ? '/' : '') + path;\r\n },dirname:function (path) {\r\n var result = PATH.splitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n return root + dir;\r\n },basename:function (path) {\r\n // EMSCRIPTEN return '/'' for '/', not an empty string\r\n if (path === '/') return '/';\r\n var lastSlash = path.lastIndexOf('/');\r\n if (lastSlash === -1) return path;\r\n return path.substr(lastSlash+1);\r\n },extname:function (path) {\r\n return PATH.splitPath(path)[3];\r\n },join:function () {\r\n var paths = Array.prototype.slice.call(arguments, 0);\r\n return PATH.normalize(paths.join('/'));\r\n },join2:function (l, r) {\r\n return PATH.normalize(l + '/' + r);\r\n }};var SYSCALLS={buffers:[null,[],[]],printChar:function (stream, curr) {\r\n var buffer = SYSCALLS.buffers[stream];\r\n if (curr === 0 || curr === 10) {\r\n (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0));\r\n buffer.length = 0;\r\n } else {\r\n buffer.push(curr);\r\n }\r\n },varargs:0,get:function (varargs) {\r\n SYSCALLS.varargs += 4;\r\n var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\r\n return ret;\r\n },getStr:function () {\r\n var ret = UTF8ToString(SYSCALLS.get());\r\n return ret;\r\n },get64:function () {\r\n var low = SYSCALLS.get(), high = SYSCALLS.get();\r\n return low;\r\n },getZero:function () {\r\n SYSCALLS.get();\r\n }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // llseek\r\n var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n \r\n function flush_NO_FILESYSTEM() {\r\n // flush anything remaining in the buffers during shutdown\r\n var fflush = Module[\"_fflush\"];\r\n if (fflush) fflush(0);\r\n var buffers = SYSCALLS.buffers;\r\n if (buffers[1].length) SYSCALLS.printChar(1, 10);\r\n if (buffers[2].length) SYSCALLS.printChar(2, 10);\r\n }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // writev\r\n // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0\r\n var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get();\r\n var ret = 0;\r\n for (var i = 0; i < iovcnt; i++) {\r\n var ptr = HEAP32[(((iov)+(i*8))>>2)];\r\n var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\r\n for (var j = 0; j < len; j++) {\r\n SYSCALLS.printChar(stream, HEAPU8[ptr+j]);\r\n }\r\n ret += len;\r\n }\r\n return ret;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall54(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // ioctl\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___syscall6(which, varargs) {SYSCALLS.varargs = varargs;\r\n try {\r\n // close\r\n var stream = SYSCALLS.getStreamFromFD();\r\n return 0;\r\n } catch (e) {\r\n if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\r\n return -e.errno;\r\n }\r\n }\r\n\r\n function ___unlock() {}\r\n\r\n function _abort() {\r\n Module['abort']();\r\n }\r\n\r\n var _emscripten_asm_const_int=true;\r\n\r\n function _emscripten_get_heap_size() {\r\n return HEAP8.length;\r\n }\r\n\r\n function _exit(status) {\r\n // void _exit(int status);\r\n // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\r\n exit(status);\r\n }\r\n\r\n \r\n\r\n function _llvm_eh_typeid_for(type) {\r\n return type;\r\n }\r\n\r\n function _llvm_trap() {\r\n abort('trap!');\r\n }\r\n\r\n \r\n function _emscripten_memcpy_big(dest, src, num) {\r\n HEAPU8.set(HEAPU8.subarray(src, src+num), dest);\r\n }\r\n \r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n function ___setErrNo(value) {\r\n if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value;\r\n return value;\r\n }\r\n \r\n \r\n function abortOnCannotGrowMemory(requestedSize) {\r\n abort('OOM');\r\n }\r\n \r\n function emscripten_realloc_buffer(size) {\r\n var PAGE_MULTIPLE = 65536;\r\n size = alignUp(size, PAGE_MULTIPLE); // round up to wasm page size\r\n var oldSize = buffer.byteLength;\r\n // native wasm support\r\n // note that this is *not* threadsafe. multiple threads can call .grow(), and each\r\n // presents a delta, so in theory we may over-allocate here (e.g. if two threads\r\n // ask to grow from 256MB to 512MB, we get 2 requests to add +256MB, and may end\r\n // up growing to 768MB (even though we may have been able to make do with 512MB).\r\n // TODO: consider decreasing the step sizes in emscripten_resize_heap\r\n try {\r\n var result = wasmMemory.grow((size - oldSize) / 65536); // .grow() takes a delta compared to the previous size\r\n if (result !== (-1 | 0)) {\r\n // success in native wasm memory growth, get the buffer from the memory\r\n buffer = wasmMemory.buffer;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n } catch(e) {\r\n return false;\r\n }\r\n }function _emscripten_resize_heap(requestedSize) {\r\n var oldSize = _emscripten_get_heap_size();\r\n // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\r\n \r\n \r\n var PAGE_MULTIPLE = 65536;\r\n var LIMIT = 2147483648 - PAGE_MULTIPLE; // We can do one page short of 2GB as theoretical maximum.\r\n \r\n if (requestedSize > LIMIT) {\r\n return false;\r\n }\r\n \r\n var MIN_TOTAL_MEMORY = 16777216;\r\n var newSize = Math.max(oldSize, MIN_TOTAL_MEMORY); // So the loop below will not be infinite, and minimum asm.js memory size is 16MB.\r\n \r\n // TODO: see realloc_buffer - for PTHREADS we may want to decrease these jumps\r\n while (newSize < requestedSize) { // Keep incrementing the heap size as long as it's less than what is requested.\r\n if (newSize <= 536870912) {\r\n newSize = alignUp(2 * newSize, PAGE_MULTIPLE); // Simple heuristic: double until 1GB...\r\n } else {\r\n // ..., but after that, add smaller increments towards 2GB, which we cannot reach\r\n newSize = Math.min(alignUp((3 * newSize + 2147483648) / 4, PAGE_MULTIPLE), LIMIT);\r\n }\r\n \r\n }\r\n \r\n \r\n \r\n \r\n if (!emscripten_realloc_buffer(newSize)) {\r\n return false;\r\n }\r\n \r\n updateGlobalBufferViews();\r\n \r\n \r\n \r\n return true;\r\n } \r\n\r\n function _time(ptr) {\r\n var ret = (Date.now()/1000)|0;\r\n if (ptr) {\r\n HEAP32[((ptr)>>2)]=ret;\r\n }\r\n return ret;\r\n }\r\nvar ASSERTIONS = false;\r\n\r\n// Copyright 2017 The Emscripten Authors. All rights reserved.\r\n// Emscripten is available under two separate licenses, the MIT license and the\r\n// University of Illinois/NCSA Open Source License. Both these licenses can be\r\n// found in the LICENSE file.\r\n\r\n/** @type {function(string, boolean=, number=)} */\r\nfunction intArrayFromString(stringy, dontAddNull, length) {\r\n var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\r\n var u8array = new Array(len);\r\n var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\r\n if (dontAddNull) u8array.length = numBytesWritten;\r\n return u8array;\r\n}\r\n\r\nfunction intArrayToString(array) {\r\n var ret = [];\r\n for (var i = 0; i < array.length; i++) {\r\n var chr = array[i];\r\n if (chr > 0xFF) {\r\n if (ASSERTIONS) {\r\n assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.');\r\n }\r\n chr &= 0xFF;\r\n }\r\n ret.push(String.fromCharCode(chr));\r\n }\r\n return ret.join('');\r\n}\r\n\r\n\r\n// ASM_LIBRARY EXTERN PRIMITIVES: Int8Array,Int32Array\r\n\r\n\r\nfunction invoke_i(index) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_i(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ii(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ii(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_iiiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_ji(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n return dynCall_ji(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_v(index) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_v(index);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vi(index,a1) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vi(index,a1);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_vii(index,a1,a2) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_vii(index,a1,a2);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viii(index,a1,a2,a3) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viii(index,a1,a2,a3);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiii(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiii(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiii(index,a1,a2,a3,a4,a5) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiii(index,a1,a2,a3,a4,a5);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viij(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viij(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nfunction invoke_viji(index,a1,a2,a3,a4) {\r\n var sp = stackSave();\r\n try {\r\n dynCall_viji(index,a1,a2,a3,a4);\r\n } catch(e) {\r\n stackRestore(sp);\r\n if (e !== e+0 && e !== 'longjmp') throw e;\r\n _setThrew(1, 0);\r\n }\r\n}\r\n\r\nvar asmGlobalArg = {};\r\n\r\nvar asmLibraryArg = {\r\n \"abort\": abort,\r\n \"setTempRet0\": setTempRet0,\r\n \"getTempRet0\": getTempRet0,\r\n \"invoke_i\": invoke_i,\r\n \"invoke_ii\": invoke_ii,\r\n \"invoke_iii\": invoke_iii,\r\n \"invoke_iiii\": invoke_iiii,\r\n \"invoke_iiiii\": invoke_iiiii,\r\n \"invoke_iiiiii\": invoke_iiiiii,\r\n \"invoke_ji\": invoke_ji,\r\n \"invoke_v\": invoke_v,\r\n \"invoke_vi\": invoke_vi,\r\n \"invoke_vii\": invoke_vii,\r\n \"invoke_viii\": invoke_viii,\r\n \"invoke_viiii\": invoke_viiii,\r\n \"invoke_viiiii\": invoke_viiiii,\r\n \"invoke_viiiiiii\": invoke_viiiiiii,\r\n \"invoke_viij\": invoke_viij,\r\n \"invoke_viji\": invoke_viji,\r\n \"___assert_fail\": ___assert_fail,\r\n \"___cxa_allocate_exception\": ___cxa_allocate_exception,\r\n \"___cxa_begin_catch\": ___cxa_begin_catch,\r\n \"___cxa_end_catch\": ___cxa_end_catch,\r\n \"___cxa_find_matching_catch\": ___cxa_find_matching_catch,\r\n \"___cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\r\n \"___cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\r\n \"___cxa_free_exception\": ___cxa_free_exception,\r\n \"___cxa_get_exception_ptr\": ___cxa_get_exception_ptr,\r\n \"___cxa_pure_virtual\": ___cxa_pure_virtual,\r\n \"___cxa_throw\": ___cxa_throw,\r\n \"___cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\r\n \"___exception_addRef\": ___exception_addRef,\r\n \"___exception_deAdjust\": ___exception_deAdjust,\r\n \"___exception_decRef\": ___exception_decRef,\r\n \"___gxx_personality_v0\": ___gxx_personality_v0,\r\n \"___lock\": ___lock,\r\n \"___resumeException\": ___resumeException,\r\n \"___setErrNo\": ___setErrNo,\r\n \"___syscall140\": ___syscall140,\r\n \"___syscall146\": ___syscall146,\r\n \"___syscall54\": ___syscall54,\r\n \"___syscall6\": ___syscall6,\r\n \"___unlock\": ___unlock,\r\n \"__api_close_keyboard\": __api_close_keyboard,\r\n \"__api_open_keyboard\": __api_open_keyboard,\r\n \"_abort\": _abort,\r\n \"_api_create_sound\": _api_create_sound,\r\n \"_api_create_sound_float\": _api_create_sound_float,\r\n \"_api_delete_sound\": _api_delete_sound,\r\n \"_api_draw_begin\": _api_draw_begin,\r\n \"_api_draw_belt\": _api_draw_belt,\r\n \"_api_draw_blit\": _api_draw_blit,\r\n \"_api_draw_clip_text\": _api_draw_clip_text,\r\n \"_api_draw_end\": _api_draw_end,\r\n \"_api_draw_text\": _api_draw_text,\r\n \"_api_duplicate_sound\": _api_duplicate_sound,\r\n \"_api_exit_game\": _api_exit_game,\r\n \"_api_play_sound\": _api_play_sound,\r\n \"_api_set_cursor\": _api_set_cursor,\r\n \"_api_set_volume\": _api_set_volume,\r\n \"_api_stop_sound\": _api_stop_sound,\r\n \"_api_use_websocket\": _api_use_websocket,\r\n \"_api_websocket_closed\": _api_websocket_closed,\r\n \"_api_websocket_send\": _api_websocket_send,\r\n \"_emscripten_asm_const_ii\": _emscripten_asm_const_ii,\r\n \"_emscripten_get_heap_size\": _emscripten_get_heap_size,\r\n \"_emscripten_memcpy_big\": _emscripten_memcpy_big,\r\n \"_emscripten_resize_heap\": _emscripten_resize_heap,\r\n \"_exit\": _exit,\r\n \"_exit_error\": _exit_error,\r\n \"_get_file_contents\": _get_file_contents,\r\n \"_get_file_size\": _get_file_size,\r\n \"_llvm_eh_typeid_for\": _llvm_eh_typeid_for,\r\n \"_llvm_trap\": _llvm_trap,\r\n \"_put_file_contents\": _put_file_contents,\r\n \"_remove_file\": _remove_file,\r\n \"_show_alert\": _show_alert,\r\n \"_time\": _time,\r\n \"_trace_pop\": _trace_pop,\r\n \"_trace_push\": _trace_push,\r\n \"abortOnCannotGrowMemory\": abortOnCannotGrowMemory,\r\n \"emscripten_realloc_buffer\": emscripten_realloc_buffer,\r\n \"flush_NO_FILESYSTEM\": flush_NO_FILESYSTEM,\r\n \"tempDoublePtr\": tempDoublePtr,\r\n \"DYNAMICTOP_PTR\": DYNAMICTOP_PTR\r\n};\r\n// EMSCRIPTEN_START_ASM\r\nvar asm =Module[\"asm\"]// EMSCRIPTEN_END_ASM\r\n(asmGlobalArg, asmLibraryArg, buffer);\r\n\r\nModule[\"asm\"] = asm;\r\nvar _DApi_AllocPacket = Module[\"_DApi_AllocPacket\"] = function() {\r\n return Module[\"asm\"][\"_DApi_AllocPacket\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Char = Module[\"_DApi_Char\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Char\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Init = Module[\"_DApi_Init\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Init\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Key = Module[\"_DApi_Key\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Key\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Mouse = Module[\"_DApi_Mouse\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Mouse\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_Render = Module[\"_DApi_Render\"] = function() {\r\n return Module[\"asm\"][\"_DApi_Render\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncText = Module[\"_DApi_SyncText\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncText\"].apply(null, arguments)\r\n};\r\n\r\nvar _DApi_SyncTextPtr = Module[\"_DApi_SyncTextPtr\"] = function() {\r\n return Module[\"asm\"][\"_DApi_SyncTextPtr\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_InitWebsocket = Module[\"_SNet_InitWebsocket\"] = function() {\r\n return Module[\"asm\"][\"_SNet_InitWebsocket\"].apply(null, arguments)\r\n};\r\n\r\nvar _SNet_WebsocketStatus = Module[\"_SNet_WebsocketStatus\"] = function() {\r\n return Module[\"asm\"][\"_SNet_WebsocketStatus\"].apply(null, arguments)\r\n};\r\n\r\nvar __ZSt18uncaught_exceptionv = Module[\"__ZSt18uncaught_exceptionv\"] = function() {\r\n return Module[\"asm\"][\"__ZSt18uncaught_exceptionv\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = function() {\r\n return Module[\"asm\"][\"___cxa_can_catch\"].apply(null, arguments)\r\n};\r\n\r\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = function() {\r\n return Module[\"asm\"][\"___cxa_is_pointer_type\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_close_keyboard = Module[\"___em_js___api_close_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_close_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js___api_open_keyboard = Module[\"___em_js___api_open_keyboard\"] = function() {\r\n return Module[\"asm\"][\"___em_js___api_open_keyboard\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound = Module[\"___em_js__api_create_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_create_sound_float = Module[\"___em_js__api_create_sound_float\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_create_sound_float\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_delete_sound = Module[\"___em_js__api_delete_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_delete_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_begin = Module[\"___em_js__api_draw_begin\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_begin\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_belt = Module[\"___em_js__api_draw_belt\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_belt\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_blit = Module[\"___em_js__api_draw_blit\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_blit\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_clip_text = Module[\"___em_js__api_draw_clip_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_clip_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_end = Module[\"___em_js__api_draw_end\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_end\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_draw_text = Module[\"___em_js__api_draw_text\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_draw_text\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_duplicate_sound = Module[\"___em_js__api_duplicate_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_duplicate_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_exit_game = Module[\"___em_js__api_exit_game\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_exit_game\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_play_sound = Module[\"___em_js__api_play_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_play_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_cursor = Module[\"___em_js__api_set_cursor\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_cursor\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_set_volume = Module[\"___em_js__api_set_volume\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_set_volume\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_stop_sound = Module[\"___em_js__api_stop_sound\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_stop_sound\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_use_websocket = Module[\"___em_js__api_use_websocket\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_use_websocket\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_closed = Module[\"___em_js__api_websocket_closed\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_closed\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__api_websocket_send = Module[\"___em_js__api_websocket_send\"] = function() {\r\n return Module[\"asm\"][\"___em_js__api_websocket_send\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__exit_error = Module[\"___em_js__exit_error\"] = function() {\r\n return Module[\"asm\"][\"___em_js__exit_error\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_contents = Module[\"___em_js__get_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__get_file_size = Module[\"___em_js__get_file_size\"] = function() {\r\n return Module[\"asm\"][\"___em_js__get_file_size\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__put_file_contents = Module[\"___em_js__put_file_contents\"] = function() {\r\n return Module[\"asm\"][\"___em_js__put_file_contents\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__remove_file = Module[\"___em_js__remove_file\"] = function() {\r\n return Module[\"asm\"][\"___em_js__remove_file\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__show_alert = Module[\"___em_js__show_alert\"] = function() {\r\n return Module[\"asm\"][\"___em_js__show_alert\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_pop = Module[\"___em_js__trace_pop\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_pop\"].apply(null, arguments)\r\n};\r\n\r\nvar ___em_js__trace_push = Module[\"___em_js__trace_push\"] = function() {\r\n return Module[\"asm\"][\"___em_js__trace_push\"].apply(null, arguments)\r\n};\r\n\r\nvar _emscripten_replace_memory = Module[\"_emscripten_replace_memory\"] = function() {\r\n return Module[\"asm\"][\"_emscripten_replace_memory\"].apply(null, arguments)\r\n};\r\n\r\nvar _free = Module[\"_free\"] = function() {\r\n return Module[\"asm\"][\"_free\"].apply(null, arguments)\r\n};\r\n\r\nvar _llvm_bswap_i32 = Module[\"_llvm_bswap_i32\"] = function() {\r\n return Module[\"asm\"][\"_llvm_bswap_i32\"].apply(null, arguments)\r\n};\r\n\r\nvar _malloc = Module[\"_malloc\"] = function() {\r\n return Module[\"asm\"][\"_malloc\"].apply(null, arguments)\r\n};\r\n\r\nvar _memcpy = Module[\"_memcpy\"] = function() {\r\n return Module[\"asm\"][\"_memcpy\"].apply(null, arguments)\r\n};\r\n\r\nvar _memmove = Module[\"_memmove\"] = function() {\r\n return Module[\"asm\"][\"_memmove\"].apply(null, arguments)\r\n};\r\n\r\nvar _memset = Module[\"_memset\"] = function() {\r\n return Module[\"asm\"][\"_memset\"].apply(null, arguments)\r\n};\r\n\r\nvar _sbrk = Module[\"_sbrk\"] = function() {\r\n return Module[\"asm\"][\"_sbrk\"].apply(null, arguments)\r\n};\r\n\r\nvar _setThrew = Module[\"_setThrew\"] = function() {\r\n return Module[\"asm\"][\"_setThrew\"].apply(null, arguments)\r\n};\r\n\r\nvar establishStackSpace = Module[\"establishStackSpace\"] = function() {\r\n return Module[\"asm\"][\"establishStackSpace\"].apply(null, arguments)\r\n};\r\n\r\nvar globalCtors = Module[\"globalCtors\"] = function() {\r\n return Module[\"asm\"][\"globalCtors\"].apply(null, arguments)\r\n};\r\n\r\nvar stackAlloc = Module[\"stackAlloc\"] = function() {\r\n return Module[\"asm\"][\"stackAlloc\"].apply(null, arguments)\r\n};\r\n\r\nvar stackRestore = Module[\"stackRestore\"] = function() {\r\n return Module[\"asm\"][\"stackRestore\"].apply(null, arguments)\r\n};\r\n\r\nvar stackSave = Module[\"stackSave\"] = function() {\r\n return Module[\"asm\"][\"stackSave\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_i = Module[\"dynCall_i\"] = function() {\r\n return Module[\"asm\"][\"dynCall_i\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ii = Module[\"dynCall_ii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iidiiii = Module[\"dynCall_iidiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iidiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iii = Module[\"dynCall_iii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiii = Module[\"dynCall_iiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiii = Module[\"dynCall_iiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_iiiiii = Module[\"dynCall_iiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_iiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_ji = Module[\"dynCall_ji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_ji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_jiji\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_v = Module[\"dynCall_v\"] = function() {\r\n return Module[\"asm\"][\"dynCall_v\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vi = Module[\"dynCall_vi\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vi\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_vii = Module[\"dynCall_vii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_vii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viii = Module[\"dynCall_viii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiii = Module[\"dynCall_viiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiii = Module[\"dynCall_viiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiii = Module[\"dynCall_viiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiii = Module[\"dynCall_viiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiii = Module[\"dynCall_viiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viiiiiiiiii = Module[\"dynCall_viiiiiiiiii\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viiiiiiiiii\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viij = Module[\"dynCall_viij\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viij\"].apply(null, arguments)\r\n};\r\n\r\nvar dynCall_viji = Module[\"dynCall_viji\"] = function() {\r\n return Module[\"asm\"][\"dynCall_viji\"].apply(null, arguments)\r\n};\r\n;\r\n\r\n\r\n\r\n// === Auto-generated postamble setup entry stuff ===\r\n\r\nModule['asm'] = asm;\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// Modularize mode returns a function, which can be called to\r\n// create instances. The instances provide a then() method,\r\n// must like a Promise, that receives a callback. The callback\r\n// is called when the module is ready to run, with the module\r\n// as a parameter. (Like a Promise, it also returns the module\r\n// so you can use the output of .then(..)).\r\nModule['then'] = function(func) {\r\n // We may already be ready to run code at this time. if\r\n // so, just queue a call to the callback.\r\n if (Module['calledRun']) {\r\n func(Module);\r\n } else {\r\n // we are not ready to call then() yet. we must call it\r\n // at the same time we would call onRuntimeInitialized.\r\n var old = Module['onRuntimeInitialized'];\r\n Module['onRuntimeInitialized'] = function() {\r\n if (old) old();\r\n func(Module);\r\n };\r\n }\r\n return Module;\r\n};\r\n\r\n/**\r\n * @constructor\r\n * @extends {Error}\r\n * @this {ExitStatus}\r\n */\r\nfunction ExitStatus(status) {\r\n this.name = \"ExitStatus\";\r\n this.message = \"Program terminated with exit(\" + status + \")\";\r\n this.status = status;\r\n}\r\nExitStatus.prototype = new Error();\r\nExitStatus.prototype.constructor = ExitStatus;\r\n\r\nvar calledMain = false;\r\n\r\ndependenciesFulfilled = function runCaller() {\r\n // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\r\n if (!Module['calledRun']) run();\r\n if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\r\n};\r\n\r\n\r\n\r\n\r\n\r\n/** @type {function(Array=)} */\r\nfunction run(args) {\r\n args = args || Module['arguments'];\r\n\r\n if (runDependencies > 0) {\r\n return;\r\n }\r\n\r\n\r\n preRun();\r\n\r\n if (runDependencies > 0) return; // a preRun added a dependency, run will be called later\r\n if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame\r\n\r\n function doRun() {\r\n if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening\r\n Module['calledRun'] = true;\r\n\r\n if (ABORT) return;\r\n\r\n initRuntime();\r\n\r\n preMain();\r\n\r\n if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\r\n\r\n\r\n postRun();\r\n }\r\n\r\n if (Module['setStatus']) {\r\n Module['setStatus']('Running...');\r\n setTimeout(function() {\r\n setTimeout(function() {\r\n Module['setStatus']('');\r\n }, 1);\r\n doRun();\r\n }, 1);\r\n } else {\r\n doRun();\r\n }\r\n}\r\nModule['run'] = run;\r\n\r\n\r\nfunction exit(status, implicit) {\r\n\r\n // if this is just main exit-ing implicitly, and the status is 0, then we\r\n // don't need to do anything here and can just leave. if the status is\r\n // non-zero, though, then we need to report it.\r\n // (we may have warned about this earlier, if a situation justifies doing so)\r\n if (implicit && Module['noExitRuntime'] && status === 0) {\r\n return;\r\n }\r\n\r\n if (Module['noExitRuntime']) {\r\n } else {\r\n\r\n ABORT = true;\r\n EXITSTATUS = status;\r\n\r\n exitRuntime();\r\n\r\n if (Module['onExit']) Module['onExit'](status);\r\n }\r\n\r\n Module['quit'](status, new ExitStatus(status));\r\n}\r\n\r\nvar abortDecorators = [];\r\n\r\nfunction abort(what) {\r\n if (Module['onAbort']) {\r\n Module['onAbort'](what);\r\n }\r\n\r\n what += '';\r\n out(what);\r\n err(what);\r\n\r\n ABORT = true;\r\n EXITSTATUS = 1;\r\n\r\n throw 'abort(' + what + '). Build with -s ASSERTIONS=1 for more info.';\r\n}\r\nModule['abort'] = abort;\r\n\r\nif (Module['preInit']) {\r\n if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\r\n while (Module['preInit'].length > 0) {\r\n Module['preInit'].pop()();\r\n }\r\n}\r\n\r\n\r\n Module[\"noExitRuntime\"] = true;\r\n\r\nrun();\r\n\r\n\r\n\r\n\r\n\r\n// {{MODULE_ADDITIONS}}\r\n\r\n\r\n\r\nModule['ready'] = new Promise(function (resolve, reject) {\r\n delete Module['then']\r\n Module['onAbort'] = function (what) {\r\n reject(what)\r\n }\r\n addOnPostRun(function () {\r\n resolve(Module)\r\n })\r\n});\r\n\r\n\r\n\r\n return DiabloSpawn\r\n}\r\n);\r\n})();\r\nif (typeof exports === 'object' && typeof module === 'object')\r\n module.exports = DiabloSpawn;\r\n else if (typeof define === 'function' && define['amd'])\r\n define([], function() { return DiabloSpawn; });\r\n else if (typeof exports === 'object')\r\n exports[\"DiabloSpawn\"] = DiabloSpawn;\r\n \n\n/*** EXPORTS FROM exports-loader ***/\n","module.exports = require('./lib/axios');","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nvar runtime = function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []); // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n return generator;\n }\n\n exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n\n function tryCatch(fn, obj, arg) {\n try {\n return {\n type: \"normal\",\n arg: fn.call(obj, arg)\n };\n } catch (err) {\n return {\n type: \"throw\",\n arg: err\n };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\"; // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n\n var ContinueSentinel = {}; // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n\n function Generator() {}\n\n function GeneratorFunction() {}\n\n function GeneratorFunctionPrototype() {} // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n\n\n var IteratorPrototype = {};\n\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\n if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\"; // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function (method) {\n prototype[method] = function (arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function (genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\" : false;\n };\n\n exports.mark = function (genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n\n genFun.prototype = Object.create(Gp);\n return genFun;\n }; // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n\n\n exports.awrap = function (arg) {\n return {\n __await: arg\n };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n\n if (value && typeof value === \"object\" && hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function (value) {\n invoke(\"next\", value, resolve, reject);\n }, function (err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function (unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function (error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function (resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise = // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n } // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n\n\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n\n exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n\n exports.async = function (innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));\n return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function (result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n } // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\n\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n var record = tryCatch(innerFn, self, context);\n\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done ? GenStateCompleted : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n } else if (record.type === \"throw\") {\n state = GenStateCompleted; // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n } // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n\n\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (!info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value; // Resume execution at the desired location (see delegateYield).\n\n context.next = delegate.nextLoc; // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n } // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n\n\n context.delegate = null;\n return ContinueSentinel;\n } // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n\n\n defineIteratorMethods(Gp);\n Gp[toStringTagSymbol] = \"Generator\"; // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n\n Gp[iteratorSymbol] = function () {\n return this;\n };\n\n Gp.toString = function () {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = {\n tryLoc: locs[0]\n };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{\n tryLoc: \"root\"\n }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function (object) {\n var keys = [];\n\n for (var key in object) {\n keys.push(key);\n }\n\n keys.reverse(); // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n } // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n\n\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1,\n next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n return next;\n };\n\n return next.next = next;\n }\n } // Return an iterator with no values.\n\n\n return {\n next: doneResult\n };\n }\n\n exports.values = values;\n\n function doneResult() {\n return {\n value: undefined,\n done: true\n };\n }\n\n Context.prototype = {\n constructor: Context,\n reset: function reset(skipTempReset) {\n this.prev = 0;\n this.next = 0; // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n this.method = \"next\";\n this.arg = undefined;\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n stop: function stop() {\n this.done = true;\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n dispatchException: function dispatchException(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !!caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n abrupt: function abrupt(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc <= this.prev && hasOwn.call(entry, \"finallyLoc\") && this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry && (type === \"break\" || type === \"continue\") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n complete: function complete(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" || record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n finish: function finish(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n \"catch\": function _catch(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n\n return thrown;\n }\n } // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n\n\n throw new Error(\"illegal catch attempt\");\n },\n delegateYield: function delegateYield(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n }; // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n\n return exports;\n}( // If this script is executing as a CommonJS module, use module.exports\n// as the regeneratorRuntime namespace. Otherwise create a new empty\n// object. Either way, the resulting object will be used to initialize\n// the regeneratorRuntime variable at the top of this file.\ntypeof module === \"object\" ? module.exports : {});\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}","'use strict';\n\nvar utils = require('./utils');\n\nvar bind = require('./helpers/bind');\n\nvar Axios = require('./core/Axios');\n\nvar mergeConfig = require('./core/mergeConfig');\n\nvar defaults = require('./defaults');\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\n\n\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context); // Copy axios.prototype to instance\n\n utils.extend(instance, Axios.prototype, context); // Copy context to instance\n\n utils.extend(instance, context);\n return instance;\n} // Create the default instance to be exported\n\n\nvar axios = createInstance(defaults); // Expose Axios class to allow class inheritance\n\naxios.Axios = Axios; // Factory for creating new instances\n\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n}; // Expose Cancel & CancelToken\n\n\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel'); // Expose all/spread\n\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = require('./helpers/spread');\nmodule.exports = axios; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = axios;","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nmodule.exports = function isBuffer(obj) {\n return obj != null && obj.constructor != null && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);\n};","'use strict';\n\nvar utils = require('./../utils');\n\nvar buildURL = require('../helpers/buildURL');\n\nvar InterceptorManager = require('./InterceptorManager');\n\nvar dispatchRequest = require('./dispatchRequest');\n\nvar mergeConfig = require('./mergeConfig');\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\n\n\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\n\n\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n config.method = config.method ? config.method.toLowerCase() : 'get'; // Hook up interceptors middleware\n\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n}; // Provide aliases for supported request methods\n\n\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\nmodule.exports = Axios;","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n\n\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\n\n\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\n\n\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;","'use strict';\n\nvar utils = require('./../utils');\n\nvar transformData = require('./transformData');\n\nvar isCancel = require('../cancel/isCancel');\n\nvar defaults = require('../defaults');\n\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\n\nvar combineURLs = require('./../helpers/combineURLs');\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\n\n\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config); // Support baseURL config\n\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n } // Ensure headers exist\n\n\n config.headers = config.headers || {}; // Transform request data\n\n config.data = transformData(config.data, config.headers, config.transformRequest); // Flatten headers\n\n config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {});\n utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) {\n delete config.headers[method];\n });\n var adapter = config.adapter || defaults.adapter;\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config); // Transform response data\n\n response.data = transformData(response.data, response.headers, config.transformResponse);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config); // Transform response data\n\n if (reason && reason.response) {\n reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);\n }\n }\n\n return Promise.reject(reason);\n });\n};","'use strict';\n\nvar utils = require('./../utils');\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\n\n\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n return data;\n};","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};","'use strict';\n\nvar createError = require('./createError');\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\n\n\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));\n }\n};","'use strict';\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\n\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function () {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n\n return error;\n};","'use strict';\n\nvar utils = require('./../utils'); // Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\n\n\nvar ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent'];\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\n\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) {\n return parsed;\n }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n return parsed;\n};","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href); // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n\n return function isURLSameOrigin(requestURL) {\n var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() : // Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}();","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = utils.isStandardBrowserEnv() ? // Standard browser envs support document.cookie\nfunction standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n}() : // Non standard browser env (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() {\n return null;\n },\n remove: function remove() {}\n };\n}();","'use strict';\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\n\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};","'use strict';\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\n\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n};","'use strict';\n\nvar Cancel = require('./Cancel');\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\n\n\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\n\n\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n\n\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;","'use strict';\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\n\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _iterableToArrayLimit(arr, i) {\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","async function do_websocket_open(url, handler) {\r\n const socket = new WebSocket(url);\r\n socket.binaryType = \"arraybuffer\";\r\n let versionCbk = null;\r\n socket.addEventListener(\"message\", ({data}) => {\r\n if (versionCbk) {\r\n versionCbk(data);\r\n }\r\n handler(data);\r\n });\r\n await new Promise((resolve, reject) => {\r\n const onError = err => reject(1);\r\n socket.addEventListener(\"error\", onError);\r\n socket.addEventListener(\"open\", () => {\r\n socket.removeEventListener(\"error\", onError);\r\n resolve();\r\n });\r\n });\r\n await new Promise((resolve, reject) => {\r\n const to = setTimeout(() => {\r\n versionCbk = null;\r\n reject(1);\r\n }, 5000);\r\n versionCbk = data => {\r\n clearTimeout(to);\r\n const u8 = new Uint8Array(data);\r\n if (u8[0] === 0x32) {\r\n versionCbk = null;\r\n const version = u8[1] | (u8[2] << 8) | (u8[3] << 16) | (u8[4] << 24);\r\n if (version === 1) {\r\n resolve();\r\n } else {\r\n reject(2);\r\n }\r\n }\r\n };\r\n });\r\n\r\n const vers = process.env.VERSION.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\r\n const clientInfo = new Uint8Array(5);\r\n clientInfo[0] = 0x31;\r\n clientInfo[1] = parseInt(vers[3]);\r\n clientInfo[2] = parseInt(vers[2]);\r\n clientInfo[3] = parseInt(vers[1]);\r\n clientInfo[4] = 0;\r\n socket.send(clientInfo);\r\n return socket;\r\n}\r\n\r\nexport default function websocket_open(url, handler, finisher) {\r\n let ws = null, batch = [], intr = null;\r\n const proxy = {\r\n get readyState() {\r\n return ws ? ws.readyState : 0;\r\n },\r\n send(msg) {\r\n batch.push(msg.slice());\r\n },\r\n close() {\r\n if (intr) {\r\n clearInterval(intr);\r\n intr = null;\r\n }\r\n if (ws) {\r\n ws.close();\r\n } else {\r\n batch = null;\r\n }\r\n },\r\n };\r\n do_websocket_open(url, handler).then(sock => {\r\n ws = sock;\r\n if (batch) {\r\n intr = setInterval(() => {\r\n if (!batch.length) {\r\n return;\r\n }\r\n const size = batch.reduce((sum, msg) => sum + msg.byteLength, 3);\r\n const buffer = new Uint8Array(size);\r\n buffer[0] = 0;\r\n buffer[1] = (batch.length & 0xFF);\r\n buffer[2] = batch.length >> 8;\r\n let pos = 3;\r\n for (let msg of batch) {\r\n buffer.set(msg, pos);\r\n pos += msg.byteLength;\r\n }\r\n ws.send(buffer);\r\n batch.length = 0;\r\n }, 100);\r\n } else {\r\n ws.close();\r\n }\r\n finisher(0);\r\n }, err => {\r\n finisher(err);\r\n });\r\n return proxy;\r\n}\r\n","import DiabloBinary from './Diablo.wasm';\r\nimport DiabloModule from './Diablo.jscc';\r\nimport SpawnBinary from './DiabloSpawn.wasm';\r\nimport SpawnModule from './DiabloSpawn.jscc';\r\nimport axios from 'axios';\r\n\r\nimport websocket_open from './websocket';\r\n\r\nconst DiabloSize = 1466809;\r\nconst SpawnSize = 1337416;\r\n\r\n/* eslint-disable-next-line no-restricted-globals */\r\nconst worker = self;\r\n\r\nlet canvas = null, context = null;\r\nlet imageData = null;\r\nlet files = null;\r\nlet renderBatch = null;\r\nlet drawBelt = null;\r\nlet is_spawn = false;\r\nlet websocket = null;\r\n\r\nconst ChunkSize = 1 << 20;\r\nclass RemoteFile {\r\n constructor(url) {\r\n const request = new XMLHttpRequest();\r\n request.open('HEAD', url, false);\r\n request.send();\r\n if (request.status < 200 || request.status >= 300) {\r\n worker.postMessage({action: \"error\", error: `Failed to load remote file`});\r\n }\r\n this.byteLength = parseInt(request.getResponseHeader('Content-Length'));\r\n\r\n this.url = url;\r\n\r\n this.buffer = new Uint8Array(this.byteLength);\r\n this.chunks = new Uint8Array(((this.byteLength + ChunkSize - 1) >> 20) | 0);\r\n }\r\n\r\n subarray(start, end) {\r\n let chunk0 = (start / ChunkSize) | 0;\r\n let chunk1 = ((end + ChunkSize - 1) / ChunkSize) | 0;\r\n let missing0 = chunk1, missing1 = chunk0;\r\n for (let i = chunk0; i < chunk1; ++i) {\r\n if (!this.chunks[i]) {\r\n missing0 = Math.min(missing0, i);\r\n missing1 = Math.max(missing1, i);\r\n }\r\n }\r\n if (missing0 <= missing1) {\r\n const request = new XMLHttpRequest();\r\n request.open('GET', this.url, false);\r\n request.setRequestHeader('Range', `bytes=${missing0 * ChunkSize}-${Math.min(missing1 * ChunkSize + ChunkSize - 1, this.byteLength - 1)}`);\r\n request.responseType = 'arraybuffer';\r\n request.send();\r\n if (request.status < 200 || request.status >= 300) {\r\n worker.postMessage({action: \"error\", error: `Failed to load remote file`});\r\n } else {\r\n const header = request.getResponseHeader('Content-Range');\r\n let m, start = 0;\r\n if (header && (m = header.match(/bytes (\\d+)-(\\d+)\\/(\\d+)/))) {\r\n start = parseInt(m[1]);\r\n }\r\n this.buffer.set(new Uint8Array(request.response), start);\r\n chunk0 = ((start + ChunkSize - 1) / ChunkSize) | 0;\r\n chunk1 = ((start + request.response.byteLength + ChunkSize - 1) / ChunkSize) | 0;\r\n for (let i = chunk0; i < chunk1; ++i) {\r\n this.chunks[i] = 1;\r\n }\r\n }\r\n }\r\n return this.buffer.subarray(start, end);\r\n }\r\n}\r\n\r\nconst DApi = {\r\n exit_error(error) {\r\n worker.postMessage({action: \"error\", error});\r\n },\r\n\r\n exit_game() {\r\n worker.postMessage({action: \"exit\"});\r\n },\r\n current_save_id(id) {\r\n worker.postMessage({action: \"current_save\", name: id >= 0 ? (is_spawn ? `spawn${id}.sv` : `single_${id}.sv`) : null});\r\n },\r\n\r\n get_file_size(path) {\r\n const data = files.get(path.toLowerCase());\r\n return data ? data.byteLength : 0;\r\n },\r\n get_file_contents(path, array, offset) {\r\n const data = files.get(path.toLowerCase());\r\n if (data) {\r\n array.set(data.subarray(offset, offset + array.byteLength));\r\n }\r\n },\r\n put_file_contents(path, array) {\r\n path = path.toLowerCase();\r\n // if (!path.match(/^(spawn\\d+\\.sv|single_\\d+\\.sv|config\\.ini)$/i)) {\r\n // alert(`Bad file name: ${path}`);\r\n // }\r\n files.set(path, array);\r\n worker.postMessage({action: \"fs\", func: \"update\", params: [path, array]});\r\n },\r\n remove_file(path) {\r\n path = path.toLowerCase();\r\n files.delete(path);\r\n worker.postMessage({action: \"fs\", func: \"delete\", params: [path]});\r\n },\r\n\r\n set_cursor(x, y) {\r\n worker.postMessage({action: \"cursor\", x, y});\r\n },\r\n open_keyboard(...args) {\r\n worker.postMessage({action: \"keyboard\", rect: [...args]});\r\n },\r\n close_keyboard() {\r\n worker.postMessage({action: \"keyboard\", rect: null});\r\n },\r\n\r\n use_websocket(flag) {\r\n if (flag) {\r\n if (!websocket || websocket.readyState !== 1) {\r\n const sock = websocket = websocket_open('wss://diablo.rivsoft.net/websocket', data => {\r\n if (websocket === sock) {\r\n try_api(() => {\r\n const ptr = wasm._DApi_AllocPacket(data.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(data), ptr);\r\n });\r\n }\r\n }, code => {\r\n if (typeof code !== \"number\") {\r\n worker.postMessage({action: \"error\", error: code.toString(), stack: code.stack});\r\n code = 3;\r\n }\r\n call_api(\"SNet_WebsocketStatus\", code);\r\n });\r\n } else {\r\n call_api(\"SNet_WebsocketStatus\", 0);\r\n }\r\n } else {\r\n if (websocket) {\r\n websocket.close();\r\n }\r\n websocket = null;\r\n }\r\n },\r\n websocket_closed() {\r\n return websocket ? websocket.readyState !== 1 : false;\r\n },\r\n};\r\n\r\nlet frameTime = 0, lastTime = 0;\r\nfunction getFPS() {\r\n const time = performance.now();\r\n if (!lastTime) {\r\n lastTime = time;\r\n }\r\n frameTime = 0.9 * frameTime + 0.1 * (time - lastTime);\r\n lastTime = time;\r\n return frameTime ? 1000.0 / frameTime : 0.0;\r\n}\r\n\r\nconst DApi_renderLegacy = {\r\n draw_begin() {\r\n renderBatch = {\r\n images: [],\r\n text: [],\r\n clip: null,\r\n belt: drawBelt,\r\n };\r\n drawBelt = null;\r\n },\r\n draw_blit(x, y, w, h, data) {\r\n renderBatch.images.push({x, y, w, h, data: data.slice()});\r\n },\r\n draw_clip_text(x0, y0, x1, y1) {\r\n renderBatch.clip = {x0, y0, x1, y1};\r\n },\r\n draw_text(x, y, text, color) {\r\n renderBatch.text.push({x, y, text, color});\r\n },\r\n draw_end() {\r\n //DApi.draw_text(10, 10, `FPS: ${getFPS().toFixed(1)} (Transfer)`, 0xFFCC00);\r\n const transfer = renderBatch.images.map(({data}) => data.buffer);\r\n if (renderBatch.belt) {\r\n transfer.push(renderBatch.belt.buffer);\r\n }\r\n worker.postMessage({action: \"render\", batch: renderBatch}, transfer);\r\n renderBatch = null;\r\n },\r\n draw_belt(items) {\r\n drawBelt = items.slice();\r\n },\r\n};\r\n\r\nconst DApi_renderOffscreen = {\r\n draw_begin() {\r\n context.save();\r\n context.font = 'bold 13px Times New Roman';\r\n },\r\n draw_blit(x, y, w, h, data) {\r\n imageData.data.set(data);\r\n context.putImageData(imageData, x, y);\r\n },\r\n draw_clip_text(x0, y0, x1, y1) {\r\n context.beginPath();\r\n context.rect(x0, y0, x1 - x0, y1 - y0);\r\n context.clip();\r\n },\r\n draw_text(x, y, text, color) {\r\n const r = ((color >> 16) & 0xFF);\r\n const g = ((color >> 8) & 0xFF);\r\n const b = (color & 0xFF);\r\n context.fillStyle = `rgb(${r}, ${g}, ${b})`;\r\n context.fillText(text, x, y + 22);\r\n },\r\n draw_end() {\r\n //DApi.draw_text(10, 10, `FPS: ${getFPS().toFixed(1)} (Offscreen)`, 0xFFCC00);\r\n context.restore();\r\n const bitmap = canvas.transferToImageBitmap();\r\n const transfer = [bitmap];\r\n if (drawBelt) {\r\n transfer.push(drawBelt.buffer);\r\n }\r\n worker.postMessage({action: \"render\", batch: {bitmap, belt: drawBelt}}, transfer);\r\n drawBelt = null;\r\n },\r\n draw_belt(items) {\r\n drawBelt = items.slice();\r\n },\r\n};\r\n\r\nlet audioBatch = null, audioTransfer = null;\r\nlet maxSoundId = 0, maxBatchId = 0;\r\n[\"create_sound_raw\", \"create_sound\", \"duplicate_sound\"].forEach(func => {\r\n DApi[func] = function(...params) {\r\n if (audioBatch) {\r\n maxBatchId = params[0] + 1;\r\n audioBatch.push({func, params});\r\n if (func !== \"duplicate_sound\") {\r\n audioTransfer.push(params[1].buffer);\r\n }\r\n } else {\r\n maxSoundId = params[0] + 1;\r\n const transfer = [];\r\n if (func !== \"duplicate_sound\") {\r\n transfer.push(params[1].buffer);\r\n }\r\n worker.postMessage({action: \"audio\", func, params}, transfer);\r\n }\r\n };\r\n});\r\n[\"play_sound\", \"set_volume\", \"stop_sound\", \"delete_sound\"].forEach(func => {\r\n DApi[func] = function(...params) {\r\n if (audioBatch && params[0] >= maxSoundId) {\r\n audioBatch.push({func, params});\r\n } else {\r\n worker.postMessage({action: \"audio\", func, params});\r\n }\r\n }\r\n});\r\n\r\nlet packetBatch = null;\r\nDApi.websocket_send = function(data) {\r\n if (websocket) {\r\n websocket.send(data);\r\n } else if (packetBatch) {\r\n packetBatch.push(data.slice().buffer);\r\n } else {\r\n worker.postMessage({action: \"packet\", buffer: data});\r\n }\r\n};\r\n\r\nworker.DApi = DApi;\r\n\r\nlet wasm = null;\r\n\r\nfunction try_api(func) {\r\n try {\r\n func();\r\n } catch (e) {\r\n worker.postMessage({action: \"error\", error: e.toString(), stack: e.stack});\r\n }\r\n}\r\n\r\nfunction call_api(func, ...params) {\r\n try_api(() => {\r\n audioBatch = [];\r\n audioTransfer = [];\r\n packetBatch = [];\r\n if (func !== \"text\") {\r\n wasm[\"_\" + func](...params);\r\n } else {\r\n const ptr = wasm._DApi_SyncTextPtr();\r\n const text = params[0];\r\n const length = Math.min(text.length, 255);\r\n const heap = wasm.HEAPU8;\r\n for (let i = 0; i < length; ++i) {\r\n heap[ptr + i] = text.charCodeAt(i);\r\n }\r\n heap[ptr + length] = 0;\r\n wasm._DApi_SyncText(params[1]);\r\n }\r\n if (audioBatch.length) {\r\n maxSoundId = maxBatchId;\r\n worker.postMessage({action: \"audioBatch\", batch: audioBatch}, audioTransfer);\r\n }\r\n if (packetBatch.length) {\r\n worker.postMessage({action: \"packetBatch\", batch: packetBatch}, packetBatch);\r\n }\r\n audioBatch = null;\r\n audioTransfer = null;\r\n packetBatch = null;\r\n });\r\n}\r\n\r\nfunction progress(text, loaded, total) {\r\n worker.postMessage({action: \"progress\", text, loaded, total});\r\n}\r\n\r\nconst readFile = (file, progress) => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => {\r\n if (progress) {\r\n progress({loaded: file.size});\r\n }\r\n resolve(reader.result);\r\n };\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n if (progress) {\r\n reader.addEventListener(\"progress\", progress);\r\n }\r\n reader.readAsArrayBuffer(file);\r\n});\r\n\r\nasync function initWasm(spawn, progress) {\r\n const binary = await axios.request({\r\n url: spawn ? SpawnBinary : DiabloBinary,\r\n responseType: 'arraybuffer',\r\n onDownloadProgress: progress,\r\n });\r\n const result = await (spawn ? SpawnModule : DiabloModule)({wasmBinary: binary.data}).ready;\r\n progress({loaded: 2000000});\r\n return result;\r\n}\r\n\r\nasync function init_game(mpq, spawn, offscreen) {\r\n is_spawn = spawn;\r\n if (offscreen) {\r\n canvas = new OffscreenCanvas(640, 480);\r\n context = canvas.getContext(\"2d\");\r\n imageData = context.createImageData(640, 480);\r\n Object.assign(DApi, DApi_renderOffscreen);\r\n } else {\r\n Object.assign(DApi, DApi_renderLegacy);\r\n }\r\n\r\n if (!mpq) {\r\n const name = (spawn ? 'spawn.mpq' : 'diabdat.mpq');\r\n if (!files.has(name)) {\r\n // This should never happen, but we do support remote loading\r\n files.set(name, new RemoteFile(`${process.env.PUBLIC_URL}/${name}`));\r\n }\r\n }\r\n\r\n progress(\"Loading...\");\r\n let mpqLoaded = 0, mpqTotal = (mpq ? mpq.size : 0), wasmLoaded = 0, wasmTotal = (spawn ? SpawnSize : DiabloSize);\r\n const wasmWeight = 5;\r\n function updateProgress() {\r\n progress(\"Loading...\", mpqLoaded + wasmLoaded * wasmWeight, mpqTotal + wasmTotal * wasmWeight);\r\n }\r\n const loadWasm = initWasm(spawn, e => {\r\n wasmLoaded = Math.min(e.loaded, wasmTotal);\r\n updateProgress();\r\n });\r\n let loadMpq = mpq ? readFile(mpq, e => {\r\n mpqLoaded = e.loaded;\r\n updateProgress();\r\n }) : Promise.resolve(null);\r\n [wasm, mpq] = await Promise.all([loadWasm, loadMpq]);\r\n\r\n if (mpq) {\r\n files.set(spawn ? 'spawn.mpq' : 'diabdat.mpq', new Uint8Array(mpq));\r\n }\r\n\r\n progress(\"Initializing...\");\r\n\r\n const vers = process.env.VERSION.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\r\n\r\n wasm._SNet_InitWebsocket();\r\n wasm._DApi_Init(Math.floor(performance.now()), offscreen ? 1 : 0, parseInt(vers[1]), parseInt(vers[2]), parseInt(vers[3]));\r\n\r\n setInterval(() => {\r\n call_api(\"DApi_Render\", Math.floor(performance.now())); \r\n }, 50);\r\n}\r\n\r\nworker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"init\":\r\n files = data.files;\r\n init_game(data.mpq, data.spawn, data.offscreen).then(\r\n () => worker.postMessage({action: \"loaded\"}),\r\n e => worker.postMessage({action: \"failed\", error: e.toString(), stack: e.stack}));\r\n break;\r\n case \"event\":\r\n call_api(data.func, ...data.params);\r\n break;\r\n case \"packet\":\r\n try_api(() => {\r\n const ptr = wasm._DApi_AllocPacket(data.buffer.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(data.buffer), ptr);\r\n });\r\n break;\r\n case \"packetBatch\":\r\n try_api(() => {\r\n for (let packet of data.batch) {\r\n const ptr = wasm._DApi_AllocPacket(packet.byteLength);\r\n wasm.HEAPU8.set(new Uint8Array(packet), ptr);\r\n }\r\n });\r\n break;\r\n default:\r\n }\r\n});\r\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/asset-manifest.json b/asset-manifest.json index dfc24a8..8c16e42 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -3,8 +3,8 @@ "static/js/0.1560967a.chunk.js": "/diabloweb/static/js/0.1560967a.chunk.js", "static/js/0.1560967a.chunk.js.map": "/diabloweb/static/js/0.1560967a.chunk.js.map", "main.css": "/diabloweb/static/css/main.20f27eda.chunk.css", - "main.js": "/diabloweb/static/js/main.2178d81b.chunk.js", - "main.js.map": "/diabloweb/static/js/main.2178d81b.chunk.js.map", + "main.js": "/diabloweb/static/js/main.bfb40944.chunk.js", + "main.js.map": "/diabloweb/static/js/main.bfb40944.chunk.js.map", "runtime~main.js": "/diabloweb/static/js/runtime~main.bf17ce54.js", "runtime~main.js.map": "/diabloweb/static/js/runtime~main.bf17ce54.js.map", "runtime~storage.js": "/diabloweb/static/js/runtime~storage.83a78cef.js", @@ -13,10 +13,10 @@ "storage.js.map": "/diabloweb/static/js/storage.63e17357.chunk.js.map", "static/js/5.658f752c.chunk.js": "/diabloweb/static/js/5.658f752c.chunk.js", "static/js/5.658f752c.chunk.js.map": "/diabloweb/static/js/5.658f752c.chunk.js.map", - "af24cb7d0fe507aaacf6.worker.js": "/diabloweb/af24cb7d0fe507aaacf6.worker.js", - "af24cb7d0fe507aaacf6.worker.js.map": "/diabloweb/af24cb7d0fe507aaacf6.worker.js.map", + "ad404bc1f12303f5575d.worker.js": "/diabloweb/ad404bc1f12303f5575d.worker.js", + "ad404bc1f12303f5575d.worker.js.map": "/diabloweb/ad404bc1f12303f5575d.worker.js.map", "index.html": "/diabloweb/index.html", - "precache-manifest.9b8f95b60fcbdeff274f0cf38dab9c46.js": "/diabloweb/precache-manifest.9b8f95b60fcbdeff274f0cf38dab9c46.js", + "precache-manifest.183d2d75b56a02854a97184bc2401250.js": "/diabloweb/precache-manifest.183d2d75b56a02854a97184bc2401250.js", "service-worker.js": "/diabloweb/service-worker.js", "static/css/main.20f27eda.chunk.css.map": "/diabloweb/static/css/main.20f27eda.chunk.css.map", "static/media/Diablo.wasm": "/diabloweb/static/media/Diablo.570bd59a.wasm", diff --git a/index.html b/index.html index ae2995c..730679c 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -DIABLO
\ No newline at end of file +DIABLO
\ No newline at end of file diff --git a/precache-manifest.9b8f95b60fcbdeff274f0cf38dab9c46.js b/precache-manifest.183d2d75b56a02854a97184bc2401250.js similarity index 82% rename from precache-manifest.9b8f95b60fcbdeff274f0cf38dab9c46.js rename to precache-manifest.183d2d75b56a02854a97184bc2401250.js index e6d88b1..8596475 100644 --- a/precache-manifest.9b8f95b60fcbdeff274f0cf38dab9c46.js +++ b/precache-manifest.183d2d75b56a02854a97184bc2401250.js @@ -1,14 +1,14 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ { - "revision": "0ab2707bc779a2f7885f96bfe8a2de8b", - "url": "/diabloweb/af24cb7d0fe507aaacf6.worker.js" + "revision": "11b4f45812af1b8bbffa98044523d9e6", + "url": "/diabloweb/ad404bc1f12303f5575d.worker.js" }, { - "revision": "0840de7d276f50f57f2c7c5ec6d23f01", + "revision": "f0f3dbd89cee4a169ab99ee03260f06e", "url": "/diabloweb/index.html" }, { - "revision": "567a4f8e2938091b4792", + "revision": "278d90c47eec00c581a2", "url": "/diabloweb/static/css/main.20f27eda.chunk.css" }, { @@ -20,8 +20,8 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([ "url": "/diabloweb/static/js/5.658f752c.chunk.js" }, { - "revision": "567a4f8e2938091b4792", - "url": "/diabloweb/static/js/main.2178d81b.chunk.js" + "revision": "278d90c47eec00c581a2", + "url": "/diabloweb/static/js/main.bfb40944.chunk.js" }, { "revision": "077fe45e700d7971de0b", diff --git a/service-worker.js b/service-worker.js index e972371..16c8261 100644 --- a/service-worker.js +++ b/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/diabloweb/precache-manifest.9b8f95b60fcbdeff274f0cf38dab9c46.js" + "/diabloweb/precache-manifest.183d2d75b56a02854a97184bc2401250.js" ); self.addEventListener('message', (event) => { diff --git a/static/js/main.2178d81b.chunk.js b/static/js/main.2178d81b.chunk.js deleted file mode 100644 index b4e51e1..0000000 --- a/static/js/main.2178d81b.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{11:function(e,t,n){"use strict";n.d(t,"a",function(){return m});var r=n(6),o=n(1),a=n.n(o),i=n(2),s=n(13),c=n.n(s);function u(e,t){return l.apply(this,arguments)}function l(){return(l=Object(i.a)(a.a.mark(function e(t,n){var r,o,i,s;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.get(n.toLowerCase());case 2:(r=e.sent)?(o=new Blob([r],{type:"binary/octet-stream"}),i=URL.createObjectURL(o),(s=document.createElement("a")).setAttribute("href",i),s.setAttribute("download",n),document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(i)):console.error("File ".concat(n," does not exist"));case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}function d(e){return h.apply(this,arguments)}function h(){return(h=Object(i.a)(a.a.mark(function e(t){var n,r,o,i,s,c;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=!0,r=!1,o=void 0,e.prev=3,e.next=6,t.keys();case 6:e.t0=Symbol.iterator,i=e.sent[e.t0]();case 8:if(n=(s=i.next()).done){e.next=14;break}(c=s.value).match(/\.sv$/i)&&u(t,c);case 11:n=!0,e.next=8;break;case 14:e.next=20;break;case 16:e.prev=16,e.t1=e.catch(3),r=!0,o=e.t1;case 20:e.prev=20,e.prev=21,n||null==i.return||i.return();case 23:if(e.prev=23,!r){e.next=26;break}throw o;case 26:return e.finish(23);case 27:return e.finish(20);case 28:case"end":return e.stop()}},e,null,[[3,16,20,28],[21,,23,27]])}))).apply(this,arguments)}var f=function(e){return new Promise(function(t,n){var r=new FileReader;r.onload=function(){return t(r.result)},r.onerror=function(){return n(r.error)},r.onabort=function(){return n()},r.readAsArrayBuffer(e)})};function p(e,t,n){return v.apply(this,arguments)}function v(){return(v=Object(i.a)(a.a.mark(function e(t,n,r){var o;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=Uint8Array,e.next=3,f(r);case 3:return e.t1=e.sent,o=new e.t0(e.t1),n.set(r.name.toLowerCase(),o),e.abrupt("return",t.set(r.name.toLowerCase(),o));case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}function m(e){return y.apply(this,arguments)}function y(){return(y=Object(i.a)(a.a.mark(function e(t){var n,o,i,s,l,h,f,v;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n=new c.a("diablo_fs"),o=new Map,i=0,e.t0=Object,e.next=7,n.json();case 7:e.t1=e.sent,s=e.t0.entries.call(e.t0,e.t1);case 9:if(!(i=this.buffer.byteLength)throw Error("packet too small");return this.buffer[this.pos++]}},{key:"read16",value:function(){var e=this.pos,t=this.buffer;if(e+2>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8;return this.pos+=2,n}},{key:"read32",value:function(){var e=this.pos,t=this.buffer;if(e+4>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24;return this.pos+=4,n}},{key:"read_str",value:function(){var e=this.read8(),t=this.pos,n=this.buffer;if(t+e>n.byteLength)throw Error("packet too small");var r=String.fromCharCode.apply(String,Object(u.a)(n.subarray(t,t+e)));return this.pos+=e,r}},{key:"read_buf",value:function(){var e=this.read32(),t=this.buffer.subarray(this.pos,this.pos+e);return this.pos+=e,t}}]),e}(),I=function(){function e(t){Object(l.a)(this,e),this.buffer=new Uint8Array(t),this.pos=0}return Object(d.a)(e,[{key:"write8",value:function(e){return this.buffer[this.pos++]=e,this}},{key:"write16",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,this.pos+=2,this}},{key:"write32",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,n[t+2]=e>>16,n[t+3]=e>>24,this.pos+=4,this}},{key:"write_str",value:function(e){var t=e.length;this.write8(t);for(var n=this.pos,r=this.buffer,o=0;o=4?e.send(z(G.join_reject,{cookie:s.cookie,reason:K.JOIN_GAME_FULL})):(t.players[c]=n,n.id=c,e.send(z(G.join_accept,{cookie:s.cookie,index:c,seed:t.seed,difficulty:t.difficulty})),t.send(255,z(G.connect,{id:c})))}break;default:if(null==n.id)return;t.handle(n.id,i.code,s)}if(!o.done())throw Error("packet too large")}),e.on("close",function(){null!=n.id&&t.drop(n.id,1073741830)})}},{key:"send",value:function(e,t){for(var n=1;n<4;++n)e&1<>16&255,N=L>>8&255,P=255&L;t.fillStyle="rgb(".concat(B,", ").concat(N,", ").concat(P,")"),t.fillText(A,O,S+22)}}catch(I){M=!0,C=I}finally{try{E||null==D.return||D.return()}finally{if(M)throw C}}t.restore()}}e.updateBelt(s)}function $(){return($=Object(M.a)(x.a.mark(function e(t,n,r,o){var a,i,s;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.fs;case 2:if(a=e.sent,!o||r){e.next=6;break}return e.next=6,A(t,a);case 6:return i=null,s=!1,i=t.canvas.getContext("2d",{alpha:!1}),e.next=10,new Promise(function(e,c){try{var l=new T.a,d=[],h=H(function(e){d.push(e)});l.addEventListener("message",function(r){var o=r.data;switch(o.action){case"loaded":e(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=32&&1===e.key.length?n.game("DApi_Char",e.key.charCodeAt(0)):8!==e.keyCode&&13!==e.keyCode||n.game("DApi_Char",e.keyCode),n.clearKeySel(),n.showKeyboard||(8===e.keyCode||9===e.keyCode||e.keyCode>=112&&e.keyCode<=119)&&e.preventDefault())},n.onMenu=function(e){e.preventDefault()},n.onKeyUp=function(e){n.canvas&&(n.game("DApi_Key",1,n.eventMods(e),e.keyCode),n.clearKeySel())},n.onKeyboard=function(){n.onKeyboardInner(0)},n.onKeyboardBlur=function(){n.onKeyboardInner(1)},n.parseFile=function(e){var t=e.target.files;t.length>0&&n.start(t[0])},n.touchButton=null,n.touchCanvas=null,n.onTouchStart=function(e){if(n.canvas&&e.target!==n.keyboard&&(n.keyboard.blur(),e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,o=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,o),n.touchMods[ee]||n.game("DApi_Mouse",1,n.touchMods[te]?2:1,n.eventMods(e),r,o)}},n.onTouchMove=function(e){if(n.canvas&&e.target!==n.keyboard&&(e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,o=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,o)}},n.onTouchEnd=function(e){if(n.canvas){e.target===n.keyboard||e.preventDefault();var t=n.touchCanvas;if(n.updateTouchButton(e.touches,!0),t&&!n.touchCanvas){var r=n.mousePos(t),o=r.x,a=r.y;n.game("DApi_Mouse",2,1,n.eventMods(e),o,a),n.game("DApi_Mouse",2,2,n.eventMods(e),o,a),!n.touchMods[te]||n.touchButton&&n.touchButton.index===te||n.setTouchMod(te,!1)}document.fullscreenElement||n.element.requestFullscreen()}},n.setCanvas=function(e){return n.canvas=e},n.setElement=function(e){return n.element=e},n.setKeyboard=function(e){return n.keyboard=e},n.setTouch0=n.setTouch_.bind(Object(p.a)(n),0),n.setTouch1=n.setTouch_.bind(Object(p.a)(n),1),n.setTouch2=n.setTouch_.bind(Object(p.a)(n),2),n.setTouch3=n.setTouchBelt_.bind(Object(p.a)(n),3),n.setTouch4=n.setTouchBelt_.bind(Object(p.a)(n),4),n.setTouch5=n.setTouchBelt_.bind(Object(p.a)(n),5),n}return Object(v.a)(t,e),Object(d.a)(t,[{key:"componentDidMount",value:function(){var e=this;document.addEventListener("drop",this.onDrop,!0),document.addEventListener("dragover",this.onDragOver,!0),document.addEventListener("dragenter",this.onDragEnter,!0),document.addEventListener("dragleave",this.onDragLeave,!0),this.fs.then(function(t){var n=t.files.get("spawn.mpq");n&&S.includes(n.byteLength)&&e.setState({has_spawn:!0})})}},{key:"setDropping",value:function(e){this.setState(function(t){var n=t.dropping;return{dropping:Math.max(n+e,0)}})}},{key:"onError",value:function(e,t){var n=this;t?Object(g.mapStackTrace)(t,function(t){n.setState(function(n){return!n.error&&{error:{message:e,stack:t.join("\n")}}})}):this.setState(function(t){return!t.error&&{error:{message:e}}})}},{key:"openKeyboard",value:function(e){e?(this.showKeyboard={left:"".concat((100*(e[0]-10)/640).toFixed(2),"%"),top:"".concat((100*(e[1]-10)/480).toFixed(2),"%"),width:"".concat((100*(e[2]-e[0]+20)/640).toFixed(2),"%"),height:"".concat((100*(e[3]-e[1]+20)/640).toFixed(2),"%")},this.maxKeyboard=e[4],this.element.classList.add("keyboard"),Object.assign(this.keyboard.style,this.showKeyboard),this.keyboard.focus(),ne&&(ne.style.transform="translate(-50%, ".concat((56.25*-(e[1]+e[3])/960).toFixed(2),"vw)"))):(this.showKeyboard=!1,this.element.classList.remove("keyboard"),this.keyboard.blur(),this.keyboard.value="",this.keyboardNum=0)}},{key:"setCursorPos",value:function(e,t){var n=this,r=this.canvas.getBoundingClientRect();this.cursorPos={x:r.left+(r.right-r.left)*e/640,y:r.top+(r.bottom-r.top)*t/480},setTimeout(function(){n.game("DApi_Mouse",0,0,0,e,t)})}},{key:"onProgress",value:function(e){this.setState({progress:e})}},{key:"onExit",value:function(){this.state.error||window.location.reload()}},{key:"setCurrentSave",value:function(e){this.saveName=e}},{key:"drawBelt",value:function(e,t){this.canvas&&this.touchButtons[e]&&(this.touchBelt[e]=t,t>=0?(this.touchButtons[e].style.display="block",this.touchCtx[e].drawImage(this.canvas,205+29*t,357,28,28,0,0,28,28)):this.touchButtons[e].style.display="none")}},{key:"updateBelt",value:function(e){if(e){for(var t=new Set,n=3,r=0;r=0&&!t.has(e[r])&&(this.drawBelt(n++,r),t.add(e[r]));for(;n<6;++n)this.drawBelt(n,-1)}else this.drawBelt(3,-1),this.drawBelt(4,-1),this.drawBelt(5,-1)}},{key:"start",value:function(e){var t=this;if(e&&e.name.match(/\.sv$/i))this.fs.then(function(t){return t.upload(e)}).then(console.log("Updated ".concat(e.name)));else if(!e||e.name.match(/\.mpq$/i)){document.removeEventListener("drop",this.onDrop,!0),document.removeEventListener("dragover",this.onDragOver,!0),document.removeEventListener("dragenter",this.onDragEnter,!0),document.removeEventListener("dragleave",this.onDragLeave,!0),this.setState({dropping:0});var n=!(!e||!e.name.match(/^diabdat\.mpq$/i));b.a.event({category:"Game",action:n?"Start Retail":"Start Shareware"}),this.setState({loading:!0,retail:n}),Q(this,e,!n).then(function(e){t.game=e,document.addEventListener("mousemove",t.onMouseMove,!0),document.addEventListener("mousedown",t.onMouseDown,!0),document.addEventListener("mouseup",t.onMouseUp,!0),document.addEventListener("keydown",t.onKeyDown,!0),document.addEventListener("keyup",t.onKeyUp,!0),document.addEventListener("contextmenu",t.onMenu,!0),document.addEventListener("touchstart",t.onTouchStart,{passive:!1,capture:!0}),document.addEventListener("touchmove",t.onTouchMove,{passive:!1,capture:!0}),document.addEventListener("touchend",t.onTouchEnd,{passive:!1,capture:!0}),document.addEventListener("pointerlockchange",t.onPointerLockChange),window.addEventListener("resize",t.onResize),t.setState({started:!0})},function(e){return t.onError(e.message,e.stack)})}else window.alert("Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.")}},{key:"pointerLocked",value:function(){return document.pointerLockElement===this.canvas||document.mozPointerLockElement===this.canvas}},{key:"mousePos",value:function(e){var t=this.canvas.getBoundingClientRect();return this.pointerLocked()?(this.cursorPos.x=Math.max(t.left,Math.min(t.right,this.cursorPos.x+e.movementX)),this.cursorPos.y=Math.max(t.top,Math.min(t.bottom,this.cursorPos.y+e.movementY))):this.cursorPos={x:e.clientX,y:e.clientY},{x:Math.max(0,Math.min(Math.round((this.cursorPos.x-t.left)/(t.right-t.left)*640),639)),y:Math.max(0,Math.min(Math.round((this.cursorPos.y-t.top)/(t.bottom-t.top)*480),479))}}},{key:"mouseButton",value:function(e){switch(e.button){case 0:return 1;case 1:return 4;case 2:return 2;case 3:return 5;case 4:return 6;default:return 1}}},{key:"eventMods",value:function(e){return(e.shiftKey||this.touchMods[2]?1:0)+(e.ctrlKey?2:0)+(e.altKey?4:0)+(e.touches?8:0)}},{key:"clearKeySel",value:function(){if(this.showKeyboard){var e=this.keyboard.value.length;this.keyboard.setSelectionRange(e,e)}}},{key:"onKeyboardInner",value:function(e){if(this.showKeyboard){var t,n=this.keyboard.value;if(this.maxKeyboard>0)t=(n.match(/[\x20-\x7E]/g)||[]).join("").substring(0,this.maxKeyboard);else{var r=-this.maxKeyboard;n.match(/^\d*$/)&&(this.keyboardNum=Math.min(n.length?parseInt(n):0,r)),t=this.keyboardNum?this.keyboardNum.toString():""}n!==t&&(this.keyboard.value=t),this.clearKeySel(),this.game("text",t,e)}}},{key:"setTouchMod",value:function(e,t,n){if(e<3)this.touchMods[e]=t,this.touchButtons[e]&&this.touchButtons[e].classList.toggle("active",t);else if(n&&this.touchBelt[e]>=0){var r=performance.now();(!this.beltTime||r-this.beltTime>750)&&(this.game("DApi_Char",49+this.touchBelt[e]),this.beltTime=r)}}},{key:"updateTouchButton",value:function(e,t){var n=this,r=null;this.touchControls||(this.touchControls=!0,this.element.classList.add("touch"));var o=this.touchButton,a=!0,i=!1,s=void 0;try{for(var c,l=function(){var t=c.value,a=t.target,i=t.identifier,s=t.clientX,l=t.clientY;if(o&&o.id===i&&n.touchButtons[o.index]===a)return e.length>1&&(o.stick=!1),o.clientX=s,o.clientY=l,n.touchCanvas=Object(u.a)(e).find(function(e){return e.identifier!==i}),n.touchCanvas&&(n.touchCanvas={clientX:n.touchCanvas.clientX,clientY:n.touchCanvas.clientY}),delete n.panPos,{v:null!=n.touchCanvas};var d=n.touchButtons.indexOf(a);d>=0&&!r&&(r={id:i,index:d,stick:!0,original:n.touchMods[d],clientX:s,clientY:l})},d=e[Symbol.iterator]();!(a=(c=d.next()).done);a=!0){var h=l();if("object"===typeof h)return h.v}}catch(_){i=!0,s=_}finally{try{a||null==d.return||d.return()}finally{if(i)throw s}}if(o&&!r&&t&&o.stick){var f=this.touchButtons[o.index].getBoundingClientRect(),p=o.clientX,v=o.clientY;p>=f.left&&p=f.top&&vk)w=Math.abs(b)>Math.abs(g)?b>0?37:39:g>0?38:40,this.game("DApi_Key",0,0,w),this.panPos={x:m,y:y}}else this.game("DApi_Mouse",0,0,24,320,180),this.game("DApi_Mouse",2,1,24,320,180),this.panPos={x:m,y:y};return this.touchCanvas=null,!1}delete this.panPos}return this.touchCanvas=Object(u.a)(e).find(function(e){return!r||e.identifier!==r.id}),this.touchCanvas&&(this.touchCanvas={clientX:this.touchCanvas.clientX,clientY:this.touchCanvas.clientY}),null!=this.touchCanvas}},{key:"setTouch_",value:function(e,t){this.touchButtons[e]=t}},{key:"setTouchBelt_",value:function(e,t){if(this.touchButtons[e]=t,t){var n=document.createElement("canvas");n.width=28,n.height=28,t.appendChild(n),this.touchCtx[e]=n.getContext("2d")}else this.touchCtx[e]=null}},{key:"render",value:function(){var e=this,t=this.state,n=t.started,r=t.loading,a=t.error,i=t.progress,s=t.dropping,c=t.has_spawn;return o.a.createElement("div",{className:w()("App",{touch:this.touchControls,started:n,dropping:s,keyboard:!!this.showKeyboard}),ref:this.setElement},o.a.createElement("div",{className:"touch-ui touch-mods"},o.a.createElement("div",{className:w()("touch-button","touch-button-0",{active:this.touchMods[0]}),ref:this.setTouch0}),o.a.createElement("div",{className:w()("touch-button","touch-button-1",{active:this.touchMods[1]}),ref:this.setTouch1}),o.a.createElement("div",{className:w()("touch-button","touch-button-2",{active:this.touchMods[2]}),ref:this.setTouch2})),o.a.createElement("div",{className:"touch-ui touch-belt"},o.a.createElement("div",{className:w()("touch-button","touch-button-0"),ref:this.setTouch3}),o.a.createElement("div",{className:w()("touch-button","touch-button-1"),ref:this.setTouch4}),o.a.createElement("div",{className:w()("touch-button","touch-button-2"),ref:this.setTouch5})),o.a.createElement("div",{className:"Body"},o.a.createElement("div",{className:"inner"},!a&&o.a.createElement("canvas",{ref:this.setCanvas,width:640,height:480}),o.a.createElement("input",{type:"text",className:"keyboard",onChange:this.onKeyboard,onBlur:this.onKeyboardBlur,ref:this.setKeyboard,spellCheck:!1,style:this.showKeyboard||{}}))),o.a.createElement("div",{className:"BodyV"},!!a&&o.a.createElement(re,{className:"error",href:Z(a,this.state.retail)},o.a.createElement("p",{className:"header"},"The following error has occurred:"),o.a.createElement("p",{className:"body"},a.message),o.a.createElement("p",{className:"footer"},"Click to create an issue on GitHub"),null!=this.saveName&&o.a.createElement("p",{className:"link",onClick:this.downloadSave},"Download save file")),!!r&&!n&&!a&&o.a.createElement("div",{className:"loading"},i&&i.text||"Loading...",null!=i&&!!i.total&&o.a.createElement("span",{className:"progressBar"},o.a.createElement("span",null,o.a.createElement("span",{style:{width:"".concat(Math.round(100*i.loaded/i.total),"%")}})))),!n&&!r&&!a&&o.a.createElement("div",{className:"start"},o.a.createElement("p",null,"This is a web port of the original Diablo game, based on source code reconstructed by GalaXyHaXz and devilution team. The project page with information and links can be found over here ",o.a.createElement(re,{href:"https://github.com/d07RiV/diabloweb"},"https://github.com/d07RiV/diabloweb")),o.a.createElement("p",null,"If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing. The game can be purchased from ",o.a.createElement(re,{href:"https://www.gog.com/game/diablo"},"GoG"),"."),!c&&o.a.createElement("p",null,"Or you can play the shareware version for free (50MB download)."),o.a.createElement("form",null,o.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Select MPQ"),o.a.createElement("input",{accept:".mpq",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseFile})),o.a.createElement("span",{className:"startButton",onClick:function(){return e.start()}},"Play Shareware"))))}}]),t}(o.a.Component);i.a.render(o.a.createElement(oe,null),document.getElementById("root")),function(e){if("serviceWorker"in navigator){if(new URL("/diabloweb",window.location.href).origin!==window.location.origin)return;window.addEventListener("load",function(){var t="".concat("/diabloweb","/service-worker.js");s?(function(e,t){fetch(e).then(function(n){var r=n.headers.get("content-type");404===n.status||null!=r&&-1===r.indexOf("javascript")?navigator.serviceWorker.ready.then(function(e){e.unregister().then(function(){window.location.reload()})}):c(e,t)}).catch(function(){console.log("No internet connection found. App is running in offline mode.")})}(t,e),navigator.serviceWorker.ready.then(function(){console.log("This web app is being served cache-first by a service worker. To learn more, visit https://bit.ly/CRA-PWA")})):c(t,e)})}}({onUpdate:function(){}})}},[[32,2,0,5]]]); -//# sourceMappingURL=main.2178d81b.chunk.js.map \ No newline at end of file diff --git a/static/js/main.2178d81b.chunk.js.map b/static/js/main.2178d81b.chunk.js.map deleted file mode 100644 index 06f5e7f..0000000 --- a/static/js/main.2178d81b.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["fs.js","api/game.worker.js","../node_modules/peerjs/dist sync","serviceWorker.js","api/sound.js","api/load_spawn.js","api/packet.js","api/webrtc.js","api/loader.js","App.js","index.js"],"names":["downloadFile","_callee","store","name","file","blob","url","lnk","C_Work_diabloweb_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default","a","wrap","_context","prev","next","get","toLowerCase","sent","Blob","type","URL","createObjectURL","document","createElement","setAttribute","body","appendChild","click","removeChild","revokeObjectURL","console","error","concat","stop","downloadSaves","_callee2","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","_context2","undefined","keys","t0","Symbol","iterator","done","value","match","t1","return","finish","readFile","Promise","resolve","reject","reader","FileReader","onload","result","onerror","onabort","readAsArrayBuffer","uploadFile","_callee3","files","data","_context3","Uint8Array","set","abrupt","create_fs","_x7","_create_fs","apply","this","arguments","_callee4","load","_i","_Object$entries","_ref3","_ref2","_context4","IdbKvStore","Map","Object","json","entries","call","length","C_Work_diabloweb_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__","window","DownloadFile","DownloadSaves","update","delete","remove","clear","download","upload","t2","module","exports","Worker","__webpack_require__","p","webpackEmptyContext","req","e","Error","code","id","isLocalhost","Boolean","location","hostname","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","log","onUpdate","onSuccess","catch","init_sound","AudioContext","webkitAudioContext","StereoPannerNode","create_sound","duplicate_sound","play_sound","set_volume","stop_sound","delete_sound","context","sounds","create_sound_raw","channels","rate","buffer","createBuffer","i","getChannelData","subarray","gain","createGain","panner","pan","decodeAudioData","srcId","src","volume","loop","source","Math","pow","relVolume","createBufferSource","node","connect","destination","start","stop_all","sound","slicedToArray","err","SpawnSizes","load_spawn","_x","_x2","_load_spawn","api","fs","spawn","regenerator_default","includes","byteLength","axios","request","process","responseType","onDownloadProgress","onProgress","text","loaded","total","headers","Cache-Control","slice","buffer_reader","classCallCheck","pos","createClass","key","read8","String","fromCharCode","toConsumableArray","size","read32","buffer_writer","write8","charCodeAt","write32","rest","RejectionReason","JOIN_SUCCESS","JOIN_ALREADY_IN_GAME","JOIN_GAME_NOT_FOUND","JOIN_INCORRECT_PASSWORD","JOIN_VERSION_MISMATCH","JOIN_GAME_FULL","CREATE_GAME_EXISTS","read_packet","types","cls","values","find","packet","read","packet_size","write_packet","write","make_batch","count","read16","packets","push","reduce","sum","_ref","writer","write16","server_packet","info","version","_ref4","game_list","games","read_str","_ref5","_ref6","_ref7","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_ref9","write_str","join_accept","cookie","index","seed","difficulty","_ref10","join_reject","reason","_ref11","_ref12","disconnect","_ref13","message","payload","read_buf","_ref14","_ref15","write_buf","turn","_ref16","batch","client_packet","_ref17","create_game","password","_ref18","_ref19","join_game","_ref20","_ref21","leave_game","drop_player","_ref22","_ref23","_ref24","_ref25","PeerID","Options","webrtc_server","onMessage","onClose","_this","peer","Peer","on","conn","onConnect","players","myplr","floor","random","onError","off","onOpen","setTimeout","_this2","_read_packet","pkt","send","handle","drop","mask","destroy","close","webrtc_client","_this3","pending","needUnreg","unreg","clearTimeout","timeout","_read_packet2","webrtc_open","server","client","_read_packet3","onRender","ctx","bitmap","images","clip","belt","transferFromImageBitmap","x","y","w","h","image","createImageData","putImageData","save","font","x0","y0","x1","y1","beginPath","rect","str","color","r","g","b","fillStyle","fillText","restore","updateBelt","audio","mpq","offscreen","canvas","getContext","alpha","worker","packetQueue","webrtc","addEventListener","action","func","_len","params","Array","_key","postMessage","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_ref8","setCursorPos","openKeyboard","stack","onExit","setCurrentSave","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","transfer","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","setInterval","load_game","do_load_game","reportLink","retail","searchParams","split","map","line","join","userAgent","toString","ReactGA","initialize","pageview","TOUCH_MOVE","TOUCH_RMB","keyboardRule","styleSheets","sheet","cssRules","rule","CSSRule","MEDIA_RULE","conditionText","sub","selectorText","findKeyboardRule","Link","children","props","objectWithoutProperties","react_default","assign","target","rel","App","possibleConstructorReturn","getPrototypeOf","started","loading","dropping","has_spawn","cursorPos","touchControls","touchButtons","touchCtx","touchMods","touchBelt","maxKeyboard","onDrop","dataTransfer","items","kind","getAsFile","getDropFile","preventDefault","setState","onDragEnter","setDropping","onDragOver","isDropFile","onDragLeave","downloadSave","saveName","stopPropagation","onResize","exitPointerLock","onPointerLockChange","screen","innerHeight","height","pointerLocked","game","onMouseMove","_this$mousePos","mousePos","eventMods","onMouseDown","keyboard","element","classList","_this$mousePos2","requestPointerLock","mouseButton","onMouseUp","_this$mousePos3","onKeyDown","keyCode","showKeyboard","clearKeySel","onMenu","onKeyUp","onKeyboard","onKeyboardInner","onKeyboardBlur","parseFile","touchButton","touchCanvas","onTouchStart","blur","updateTouchButton","touches","_this$mousePos4","onTouchMove","_this$mousePos5","onTouchEnd","prevTc","_this$mousePos6","setTouchMod","fullscreenElement","requestFullscreen","setCanvas","setElement","setKeyboard","setTouch0","setTouch_","bind","assertThisInitialized","setTouch1","setTouch2","setTouch3","setTouchBelt_","setTouch4","setTouch5","inc","max","mapStackTrace","left","toFixed","top","width","add","style","focus","transform","keyboardNum","_this4","getBoundingClientRect","right","bottom","progress","reload","idx","slot","display","drawImage","used","Set","has","drawBelt","_this5","removeEventListener","event","category","passive","capture","alert","pointerLockElement","mozPointerLockElement","min","movementX","movementY","clientX","clientY","round","button","shiftKey","ctrlKey","altKey","len","setSelectionRange","flags","valid","substring","maxValue","parseInt","use","toggle","now","performance","beltTime","release","_this6","touchOther","btn","_loop","identifier","stick","t","panPos","v","indexOf","original","_ret","dx","dy","step","offsetHeight","abs","_this7","_this$state","className","classNames","touch","ref","active","onChange","onBlur","spellCheck","App_Link","href","onClick","htmlFor","accept","React","Component","ReactDOM","render","src_App_0","getElementById","origin","fetch","response","contentType","status","ready","unregister","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.2178d81b.chunk.js","sourcesContent":["import IdbKvStore from 'idb-kv-store';\r\n\r\n/*const importStorage = () => new Promise((resolve, reject) => {\r\n let done = false;\r\n const frame = document.createElement('iframe');\r\n window.addEventListener('message', ({data}) => {\r\n if (data.method === 'storage' && !done) {\r\n done = true;\r\n resolve(data.files);\r\n frame.contentWindow.postMessage({method: 'clear'}, '*');\r\n }\r\n });\r\n frame.addEventListener('load', () => {\r\n frame.contentWindow.postMessage({method: 'transfer'}, '*');\r\n });\r\n frame.addEventListener('error', () => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n });\r\n frame.src = \"https://diablo.rivsoft.net/storage.html\";\r\n frame.style.display = \"none\";\r\n document.body.appendChild(frame);\r\n setTimeout(() => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n }, 10000);\r\n});*/\r\n\r\nasync function downloadFile(store, name) {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n const url = URL.createObjectURL(blob);\r\n const lnk = document.createElement('a');\r\n lnk.setAttribute('href', url);\r\n lnk.setAttribute('download', name);\r\n document.body.appendChild(lnk);\r\n lnk.click();\r\n document.body.removeChild(lnk);\r\n URL.revokeObjectURL(url);\r\n } else {\r\n console.error(`File ${name} does not exist`);\r\n }\r\n}\r\n\r\nasync function downloadSaves(store) {\r\n for (let name of await store.keys()) {\r\n if (name.match(/\\.sv$/i)) {\r\n downloadFile(store, name);\r\n }\r\n }\r\n}\r\n\r\nconst readFile = file => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n reader.readAsArrayBuffer(file);\r\n});\r\nasync function uploadFile(store, files, file) {\r\n const data = new Uint8Array(await readFile(file));\r\n files.set(file.name.toLowerCase(), data);\r\n return store.set(file.name.toLowerCase(), data);\r\n}\r\n\r\nexport default async function create_fs(load) {\r\n try {\r\n const store = new IdbKvStore('diablo_fs');\r\n const files = new Map();\r\n for (let [name, data] of Object.entries(await store.json())) {\r\n files.set(name, data);\r\n }\r\n /*if (load) {\r\n const files = await importStorage();\r\n if (files) {\r\n for (let [name, data] of files) {\r\n files.set(name, data);\r\n store.set(name, data);\r\n }\r\n }\r\n }*/\r\n window.DownloadFile = name => downloadFile(store, name);\r\n window.DownloadSaves = () => downloadSaves(store);\r\n return {\r\n files,\r\n update: (name, data) => store.set(name, data),\r\n delete: name => store.remove(name),\r\n clear: () => store.clear(),\r\n download: name => downloadFile(store, name),\r\n upload: file => uploadFile(store, files, file),\r\n };\r\n } catch (e) {\r\n window.DownloadFile = () => console.error('IndexedDB is not supported');\r\n window.DownloadSaves = () => console.error('IndexedDB is not supported');\r\n return {\r\n files: new Map(),\r\n update: () => Promise.resolve(),\r\n delete: () => Promise.resolve(),\r\n clear: () => Promise.resolve(),\r\n download: () => Promise.resolve(),\r\n upload: () => Promise.resolve(),\r\n };\r\n } \r\n}\r\n","module.exports = function() {\n return new Worker(__webpack_public_path__ + \"af24cb7d0fe507aaacf6.worker.js\");\n};","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 63;","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","function no_sound() {\r\n return {\r\n create_sound: () => 0,\r\n duplicate_sound: () => 0,\r\n play_sound: () => undefined,\r\n set_volume: () => undefined,\r\n stop_sound: () => undefined,\r\n delete_sound: () => undefined,\r\n };\r\n}\r\n\r\nfunction decodeAudioData(context, buffer) {\r\n return new Promise((resolve, reject) => {\r\n context.decodeAudioData(buffer, resolve, reject);\r\n });\r\n}\r\n\r\nexport default function init_sound() {\r\n const AudioContext = window.AudioContext || window.webkitAudioContext;\r\n const StereoPannerNode = window.StereoPannerNode;\r\n if (!AudioContext) {\r\n return no_sound();\r\n }\r\n\r\n let context = null;\r\n try {\r\n context = new AudioContext();\r\n } catch (e) {\r\n }\r\n const sounds = new Map();\r\n\r\n return {\r\n create_sound_raw(id, data, length, channels, rate) {\r\n if (!context) {\r\n return;\r\n }\r\n const buffer = context.createBuffer(channels, length, rate);\r\n for (let i = 0; i < channels; ++i) {\r\n buffer.getChannelData(i).set(data.subarray(i * length, i * length + length));\r\n }\r\n sounds.set(id, {\r\n buffer: Promise.resolve(buffer),\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n create_sound(id, data) {\r\n if (!context) {\r\n return;\r\n }\r\n const buffer = decodeAudioData(context, data.buffer);\r\n sounds.set(id, {\r\n buffer,\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n duplicate_sound(id, srcId) {\r\n if (!context) {\r\n return;\r\n }\r\n const src = sounds.get(srcId);\r\n if (!src) {\r\n return;\r\n }\r\n sounds.set(id, {\r\n buffer: src.buffer,\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n play_sound(id, volume, pan, loop) {\r\n const src = sounds.get(id);\r\n if (src) {\r\n if (src.source) {\r\n src.source.then(source => source.stop());\r\n }\r\n src.gain.gain.value = Math.pow(2.0, volume / 1000.0);\r\n const relVolume = Math.pow(2.0, pan / 1000.0);\r\n if (src.panner) {\r\n src.panner.pan.value = 1.0 - 2.0 / (1.0 + relVolume);\r\n }\r\n src.source = src.buffer.then(buffer => {\r\n const source = context.createBufferSource();\r\n source.buffer = buffer;\r\n source.loop = !!loop;\r\n let node = source.connect(src.gain);\r\n if (src.panner) {\r\n node = node.connect(src.panner);\r\n }\r\n node.connect(context.destination);\r\n source.start();\r\n return source;\r\n });\r\n }\r\n },\r\n set_volume(id, volume) {\r\n const src = sounds.get(id);\r\n if (src) {\r\n src.gain.gain.value = Math.pow(2.0, volume / 1000.0);\r\n }\r\n },\r\n stop_sound(id) {\r\n const src = sounds.get(id);\r\n if (src && src.source) {\r\n src.source.then(source => source.stop());\r\n delete src.source;\r\n }\r\n },\r\n delete_sound(id) {\r\n const src = sounds.get(id);\r\n if (src && src.source) {\r\n src.source.then(source => source.stop());\r\n }\r\n sounds.delete(id);\r\n },\r\n\r\n stop_all() {\r\n for (let [, sound] of sounds) {\r\n if (sound.source) {\r\n sound.source.then(source => source.stop());\r\n }\r\n }\r\n sounds.clear();\r\n context = null;\r\n }\r\n };\r\n}\r\n","import axios from 'axios';\r\n\r\nconst SpawnSizes = [50274091, 25830791];\r\n\r\nexport { SpawnSizes };\r\n\r\nexport default async function load_spawn(api, fs) {\r\n let file = fs.files.get('spawn.mpq');\r\n if (file && !SpawnSizes.includes(file.byteLength)) {\r\n fs.files.delete('spawn.mpq');\r\n await fs.delete('spawn.mpq');\r\n file = null;\r\n }\r\n if (!file) {\r\n const spawn = await axios.request({\r\n url: process.env.PUBLIC_URL + '/spawn.mpq',\r\n responseType: 'arraybuffer',\r\n onDownloadProgress: e => {\r\n if (api.onProgress) {\r\n api.onProgress({text: 'Downloading...', loaded: e.loaded, total: e.total || SpawnSizes[1]});\r\n }\r\n },\r\n headers: {\r\n 'Cache-Control': 'max-age=31536000'\r\n }\r\n });\r\n if (!SpawnSizes.includes(spawn.data.byteLength)) {\r\n throw Error(\"Invalid spawn.mpq size. Try clearing cache and refreshing the page.\");\r\n }\r\n const data = new Uint8Array(spawn.data);\r\n fs.files.set('spawn.mpq', data);\r\n fs.update('spawn.mpq', data.slice());\r\n }\r\n return fs;\r\n}\r\n","export class buffer_reader {\r\n constructor(buffer) {\r\n this.buffer = (buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer));\r\n this.pos = 0;\r\n }\r\n done() {\r\n return this.pos === this.buffer.byteLength;\r\n }\r\n read8() {\r\n if (this.pos >= this.buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n return this.buffer[this.pos++];\r\n }\r\n read16() {\r\n const {pos, buffer} = this;\r\n if (pos + 2 > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = buffer[pos] | (buffer[pos + 1] << 8);\r\n this.pos += 2;\r\n return result;\r\n }\r\n read32() {\r\n const {pos, buffer} = this;\r\n if (pos + 4 > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = buffer[pos] | (buffer[pos + 1] << 8) | (buffer[pos + 2] << 16) | (buffer[pos + 3] << 24);\r\n this.pos += 4;\r\n return result;\r\n }\r\n read_str() {\r\n const length = this.read8();\r\n const {pos, buffer} = this;\r\n if (pos + length > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = String.fromCharCode(...buffer.subarray(pos, pos + length));\r\n this.pos += length;\r\n return result;\r\n }\r\n read_buf() {\r\n const size = this.read32();\r\n const result = this.buffer.subarray(this.pos, this.pos + size);\r\n this.pos += size;\r\n return result;\r\n }\r\n}\r\nexport class buffer_writer {\r\n constructor(length) {\r\n this.buffer = new Uint8Array(length);\r\n this.pos = 0;\r\n }\r\n get result() {\r\n return this.buffer.buffer;\r\n }\r\n write8(value) {\r\n this.buffer[this.pos++] = value;\r\n return this;\r\n }\r\n write16(value) {\r\n const {pos, buffer} = this;\r\n buffer[pos] = value;\r\n buffer[pos + 1] = value >> 8;\r\n this.pos += 2;\r\n return this;\r\n }\r\n write32(value) {\r\n const {pos, buffer} = this;\r\n buffer[pos] = value;\r\n buffer[pos + 1] = value >> 8;\r\n buffer[pos + 2] = value >> 16;\r\n buffer[pos + 3] = value >> 24;\r\n this.pos += 4;\r\n return this;\r\n }\r\n write_str(value) {\r\n const length = value.length;\r\n this.write8(length);\r\n const {pos, buffer} = this;\r\n for (let i = 0; i < length; ++i) {\r\n buffer[pos + i] = value.charCodeAt(i);\r\n }\r\n this.pos += length;\r\n return this;\r\n }\r\n rest(value) {\r\n this.buffer.set(value, this.pos);\r\n this.pos += value.byteLength;\r\n return this;\r\n }\r\n write_buf(value) {\r\n this.write32(value.byteLength);\r\n this.rest(value);\r\n return this;\r\n }\r\n}\r\n\r\nexport const RejectionReason = {\r\n JOIN_SUCCESS: 0x00,\r\n JOIN_ALREADY_IN_GAME: 0x01,\r\n JOIN_GAME_NOT_FOUND: 0x02,\r\n JOIN_INCORRECT_PASSWORD: 0x03,\r\n JOIN_VERSION_MISMATCH: 0x04,\r\n JOIN_GAME_FULL: 0x05,\r\n CREATE_GAME_EXISTS: 0x06,\r\n};\r\n\r\nexport function read_packet(reader, types) {\r\n const code = reader.read8();\r\n const cls = Object.values(types).find(cls => cls.code === code);\r\n if (!cls) {\r\n throw Error('invalid packet code');\r\n }\r\n return {type: cls, packet: cls.read(reader)};\r\n}\r\nexport function packet_size(type, packet) {\r\n return (typeof type.size === \"function\" ? type.size(packet) : type.size) + 1;\r\n}\r\nexport function write_packet(type, packet) {\r\n const size = packet_size(type, packet);\r\n return type.write(new buffer_writer(size).write8(type.code), packet).result;\r\n}\r\n\r\nexport function make_batch(types) {\r\n return {\r\n code: 0x00,\r\n read: reader => {\r\n const count = reader.read16();\r\n const packets = [];\r\n for (let i = 0; i < count; ++i) {\r\n packets.push(read_packet(reader, types()));\r\n }\r\n return packets;\r\n },\r\n size: packets => packets.reduce((sum, {type, packet}) => sum + packet_size(type, packet), 2),\r\n write: (writer, packets) => {\r\n writer.write16(packets.length);\r\n for (let {type, packet} of packets) {\r\n type.write(writer.write8(type.code), packet);\r\n }\r\n return writer;\r\n },\r\n };\r\n}\r\n\r\nexport const server_packet = {\r\n info: {\r\n code: 0x32,\r\n read: reader => ({version: reader.read32()}),\r\n size: 4,\r\n write: (writer, {version}) => writer.write32(version),\r\n },\r\n game_list: {\r\n code: 0x21,\r\n read: reader => {\r\n const count = reader.read16();\r\n const games = [];\r\n for (let i = 0; i < count; ++i) {\r\n games.push({type: reader.read32(), name: reader.read_str()});\r\n }\r\n return {games};\r\n },\r\n size: ({games}) => games.reduce((sum, {name}) => sum + 5 + name.length, 2),\r\n write: (writer, {games}) => {\r\n writer.write16(games.length);\r\n for (let {type, name} of games) {\r\n writer.write32(type);\r\n writer.write_str(name);\r\n }\r\n return writer;\r\n },\r\n },\r\n join_accept: {\r\n code: 0x12,\r\n read: reader => ({cookie: reader.read32(), index: reader.read8(), seed: reader.read32(), difficulty: reader.read32()}),\r\n size: 13,\r\n write: (writer, {cookie, index, seed, difficulty}) => writer.write32(cookie).write8(index).write32(seed).write32(difficulty),\r\n },\r\n join_reject: {\r\n code: 0x15,\r\n read: reader => ({cookie: reader.read32(), reason: reader.read8()}),\r\n size: 5,\r\n write: (writer, {cookie, reason}) => writer.write32(cookie).write8(reason),\r\n },\r\n connect: {\r\n code: 0x13,\r\n read: reader => ({id: reader.read8()}),\r\n size: 1,\r\n write: (writer, {id}) => writer.write8(id),\r\n },\r\n disconnect: {\r\n code: 0x14,\r\n read: reader => ({id: reader.read8(), reason: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, reason}) => writer.write8(id).write32(reason),\r\n },\r\n message: {\r\n code: 0x01,\r\n read: reader => ({id: reader.read8(), payload: reader.read_buf()}),\r\n size: ({payload}) => 5 + payload.byteLength,\r\n write: (writer, {id, payload}) => writer.write8(id).write_buf(payload),\r\n },\r\n turn: {\r\n code: 0x02,\r\n read: reader => ({id: reader.read8(), turn: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, turn}) => writer.write8(id).write32(turn),\r\n },\r\n batch: make_batch(() => server_packet),\r\n};\r\n\r\nexport const client_packet = {\r\n info: {\r\n code: 0x31,\r\n read: reader => ({version: reader.read32()}),\r\n size: 4,\r\n write: (writer, {version}) => writer.write32(version),\r\n },\r\n game_list: {\r\n code: 0x21,\r\n read: () => ({}),\r\n size: 0,\r\n write: writer => writer,\r\n },\r\n create_game: {\r\n code: 0x22,\r\n read: reader => ({cookie: reader.read32(), name: reader.read_str(), password: reader.read_str(), difficulty: reader.read32()}),\r\n size: ({name, password}) => 10 + name.length + password.length,\r\n write: (writer, {cookie, name, password, difficulty}) => writer.write32(cookie).write_str(name).write_str(password).write32(difficulty),\r\n },\r\n join_game: {\r\n code: 0x23,\r\n read: reader => ({cookie: reader.read32(), name: reader.read_str(), password: reader.read_str()}),\r\n size: ({name, password}) => 6 + name.length + password.length,\r\n write: (writer, {cookie, name, password}) => writer.write32(cookie).write_str(name).write_str(password),\r\n },\r\n leave_game: {\r\n code: 0x24,\r\n read: () => ({}),\r\n size: 0,\r\n write: writer => writer,\r\n },\r\n drop_player: {\r\n code: 0x03,\r\n read: reader => ({id: reader.read8(), reason: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, reason}) => writer.write8(id).write32(reason),\r\n },\r\n message: {\r\n code: 0x01,\r\n read: reader => ({id: reader.read8(), payload: reader.read_buf()}),\r\n size: ({payload}) => 5 + payload.byteLength,\r\n write: (writer, {id, payload}) => writer.write8(id).write_buf(payload),\r\n },\r\n turn: {\r\n code: 0x02,\r\n read: reader => ({turn: reader.read32()}),\r\n size: 4,\r\n write: (writer, {turn}) => writer.write32(turn),\r\n },\r\n batch: make_batch(() => server_packet),\r\n};\r\n","import Peer from 'peerjs';\r\nimport { buffer_reader, read_packet, write_packet, client_packet, server_packet, RejectionReason } from './packet';\r\n\r\n/*function log_packet(data, type) {\r\n const reader = new buffer_reader(data);\r\n const id = reader.read8();\r\n for (let [name, {code, read}] of Object.entries(type)) {\r\n if (code === id && (name !== 'message' && name !== 'turn')) {\r\n console.log(`${type === client_packet ? 'client_packet' : 'server_packet'}.${name} ${JSON.stringify(read(reader))}`);\r\n }\r\n }\r\n}*/\r\n\r\nconst PeerID = name => `diabloweb_${name}`;\r\nconst Options = undefined;//{host: 'diablo.rivsoft.net', port: 80};\r\nconst MAX_PLRS = 4;\r\n\r\nclass webrtc_server {\r\n constructor(version, {cookie, name, password, difficulty}, onMessage, onClose) {\r\n this.version = version;\r\n this.name = name;\r\n this.password = password;\r\n this.difficulty = difficulty;\r\n this.onMessage = onMessage;\r\n this.onClose = onClose;\r\n\r\n this.peer = new Peer(PeerID(name), Options);\r\n this.peer.on('connection', conn => this.onConnect(conn));\r\n this.players = [];\r\n this.myplr = 0;\r\n\r\n this.seed = Math.floor(Math.random() * Math.pow(2, 32));\r\n\r\n const onError = () => {\r\n onMessage(write_packet(server_packet.join_reject, {cookie, reason: RejectionReason.CREATE_GAME_EXISTS}));\r\n onClose();\r\n this.peer.off('error', onError);\r\n this.peer.off('open', onOpen);\r\n };\r\n const onOpen = () => {\r\n //console.log('peer open');\r\n setTimeout(() => {\r\n onMessage(write_packet(server_packet.join_accept, {cookie, index: 0, seed: this.seed, difficulty}));\r\n onMessage(write_packet(server_packet.connect, {id: 0}));\r\n }, 0);\r\n this.peer.off('error', onError);\r\n this.peer.off('open', onOpen);\r\n };\r\n this.peer.on('error', onError);\r\n this.peer.on('open', onOpen);\r\n\r\n //this.peer.on('error', err => console.log('peer error:', err));\r\n }\r\n\r\n onConnect(conn) {\r\n //conn.on('error', err => console.log('conn error:', err));\r\n //console.log('conn open');\r\n const peer = {conn};\r\n conn.on('data', packet => {\r\n const reader = new buffer_reader(packet);\r\n const {type, packet: pkt} = read_packet(reader, client_packet);\r\n switch (type.code) {\r\n case client_packet.info.code:\r\n peer.version = pkt.version;\r\n break;\r\n case client_packet.join_game.code:\r\n if (peer.version !== this.version) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_VERSION_MISMATCH}));\r\n } else if (pkt.name !== this.name) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_GAME_NOT_FOUND}));\r\n } else if (pkt.password !== this.password) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_INCORRECT_PASSWORD}));\r\n } else {\r\n let i = 1;\r\n while (i < MAX_PLRS && this.players[i]) {\r\n ++i;\r\n }\r\n if (i >= MAX_PLRS) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_GAME_FULL})); \r\n } else {\r\n this.players[i] = peer;\r\n peer.id = i;\r\n conn.send(write_packet(server_packet.join_accept, {cookie: pkt.cookie, index: i, seed: this.seed, difficulty: this.difficulty}));\r\n this.send(0xFF, write_packet(server_packet.connect, {id: i}));\r\n }\r\n }\r\n break;\r\n default:\r\n if (peer.id != null) {\r\n this.handle(peer.id, type.code, pkt);\r\n } else {\r\n return;\r\n }\r\n }\r\n if (!reader.done()) {\r\n throw Error('packet too large');\r\n }\r\n });\r\n conn.on('close', () => {\r\n //console.log('conn close');\r\n if (peer.id != null) {\r\n this.drop(peer.id, 0x40000006);\r\n }\r\n });\r\n }\r\n\r\n send(mask, pkt) {\r\n for (let i = 1; i < MAX_PLRS; ++i) {\r\n if ((mask & (1 << i)) && this.players[i]) {\r\n if (this.players[i].conn) {\r\n this.players[i].conn.send(pkt);\r\n }\r\n }\r\n }\r\n // self last since it will destroy the buffer\r\n if (mask & 1) {\r\n this.onMessage(pkt);\r\n }\r\n }\r\n\r\n drop(id, reason) {\r\n if (id === 0) {\r\n for (let i = 1; i < MAX_PLRS; ++i) {\r\n this.drop(i, 0x40000006);\r\n }\r\n this.onMessage(write_packet(server_packet.disconnect, {id, reason}));\r\n this.peer.destroy();\r\n this.onClose();\r\n } else if (this.players[id]) {\r\n this.send(0xFF, write_packet(server_packet.disconnect, {id, reason}));\r\n this.players[id].id = null;\r\n if (this.players[id].conn) {\r\n this.players[id].conn.close();\r\n }\r\n this.players[id] = null;\r\n }\r\n }\r\n\r\n handle(id, code, pkt) {\r\n switch (code) {\r\n case client_packet.leave_game.code:\r\n this.drop(id, 3);\r\n break;\r\n case client_packet.drop_player.code:\r\n this.drop(pkt.id, pkt.reason);\r\n break;\r\n case client_packet.message.code:\r\n this.send(pkt.id === 0xFF ? ~(1 << id) : (1 << pkt.id), write_packet(server_packet.message, {id, payload: pkt.payload}));\r\n break;\r\n case client_packet.turn.code:\r\n this.send(~(1 << id), write_packet(server_packet.turn, {id, turn: pkt.turn}));\r\n break;\r\n default:\r\n throw Error(`invalid packet ${code}`);\r\n }\r\n }\r\n}\r\n\r\nclass webrtc_client {\r\n pending = [];\r\n\r\n constructor(version, {cookie, name, password}, onMessage, onClose) {\r\n this.peer = new Peer(Options);\r\n this.conn = this.peer.connect(PeerID(name));\r\n\r\n let needUnreg = true;\r\n const unreg = () => {\r\n if (!needUnreg) {\r\n return;\r\n }\r\n needUnreg = false;\r\n this.peer.off('error', onError);\r\n this.conn.off('error', onError);\r\n this.conn.off('open', onOpen);\r\n clearTimeout(timeout);\r\n };\r\n const onError = () => {\r\n onMessage(write_packet(server_packet.join_reject, {cookie, reason: RejectionReason.JOIN_GAME_NOT_FOUND}));\r\n onClose();\r\n unreg();\r\n };\r\n const onOpen = () => {\r\n this.conn.send(write_packet(client_packet.info, {version}));\r\n this.conn.send(write_packet(client_packet.join_game, {cookie, name, password}));\r\n for (let pkt of this.pending) {\r\n this.conn.send(pkt);\r\n }\r\n this.pending = null;\r\n this.conn.off('open', onOpen);\r\n };\r\n const timeout = setTimeout(onError, 10000);\r\n this.peer.on('error', onError);\r\n this.conn.on('error', onError);\r\n this.conn.on('open', onOpen);\r\n\r\n //this.peer.on('error', err => console.log('peer error:', err));\r\n //this.conn.on('error', err => console.log('conn error:', err));\r\n\r\n this.conn.on('data', data => {\r\n unreg();\r\n const reader = new buffer_reader(data);\r\n const {type, packet: pkt} = read_packet(reader, server_packet);\r\n switch (type.code) {\r\n case server_packet.join_accept.code:\r\n this.myplr = pkt.index;\r\n break;\r\n case server_packet.join_reject.code:\r\n onClose();\r\n break;\r\n case server_packet.disconnect.code:\r\n if (pkt.id === 'myplr') {\r\n onClose();\r\n }\r\n break;\r\n default:\r\n }\r\n onMessage(data);\r\n });\r\n this.conn.on('close', data => {\r\n onClose();\r\n });\r\n }\r\n\r\n send(packet) {\r\n if (this.pending) {\r\n this.pending.push(packet);\r\n } else {\r\n this.conn.send(packet);\r\n }\r\n }\r\n}\r\n\r\nexport default function webrtc_open(onMessage) {\r\n let server = null, client = null;\r\n\r\n let version = 0;\r\n\r\n /*const prevMessage = onMessage;\r\n onMessage = data => {\r\n log_packet(data, server_packet);\r\n prevMessage(data);\r\n };*/\r\n\r\n return {\r\n send: function(packet) {\r\n //log_packet(packet, client_packet);\r\n const reader = new buffer_reader(packet);\r\n const {type, packet: pkt} = read_packet(reader, client_packet);\r\n switch (type.code) {\r\n case client_packet.info.code:\r\n version = pkt.version;\r\n break;\r\n case client_packet.create_game.code:\r\n if (server || client) {\r\n onMessage(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_ALREADY_IN_GAME}));\r\n } else {\r\n server = new webrtc_server(version, pkt, onMessage, () => server = null);\r\n }\r\n break;\r\n case client_packet.join_game.code:\r\n if (server || client) {\r\n onMessage(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_ALREADY_IN_GAME}));\r\n } else {\r\n client = new webrtc_client(version, pkt, onMessage, () => client = null);\r\n }\r\n break;\r\n default:\r\n if (server) {\r\n server.handle(0, type.code, pkt);\r\n if (type.code === client_packet.leave_game.code) {\r\n server = null;\r\n }\r\n } else if (client) {\r\n client.send(packet);\r\n if (type.code === client_packet.leave_game.code) {\r\n client = null;\r\n }\r\n return;\r\n } else if (type.code !== client_packet.leave_game.code) {\r\n throw Error(`invalid packet ${type.code}`);\r\n }\r\n }\r\n if (!reader.done()) {\r\n throw Error('packet too large');\r\n }\r\n },\r\n };\r\n}\r\n","import Worker from './game.worker.js';\r\nimport init_sound from './sound';\r\nimport load_spawn from './load_spawn';\r\nimport webrtc_open from './webrtc';\r\n\r\nfunction onRender(api, ctx, {bitmap, images, text, clip, belt}) {\r\n if (bitmap) {\r\n ctx.transferFromImageBitmap(bitmap);\r\n } else {\r\n for (let {x, y, w, h, data} of images) {\r\n const image = ctx.createImageData(w, h);\r\n image.data.set(data);\r\n ctx.putImageData(image, x, y);\r\n }\r\n if (text.length) {\r\n ctx.save();\r\n ctx.font = 'bold 13px Times New Roman';\r\n if (clip) {\r\n const {x0, y0, x1, y1} = clip;\r\n ctx.beginPath();\r\n ctx.rect(x0, y0, x1 - x0, y1 - y0);\r\n ctx.clip();\r\n }\r\n for (let {x, y, text: str, color} of text) {\r\n const r = ((color >> 16) & 0xFF);\r\n const g = ((color >> 8) & 0xFF);\r\n const b = (color & 0xFF);\r\n ctx.fillStyle = `rgb(${r}, ${g}, ${b})`;\r\n ctx.fillText(str, x, y + 22);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n\r\n api.updateBelt(belt);\r\n}\r\n\r\nfunction testOffscreen() {\r\n return false;\r\n // This works but I couldn't see any performance difference, and support for 2D canvas in workers is very poor.\r\n // In this mode, instead of sending a batch of areas to draw back to the main thread, the worker does all drawing on its own and sends a complete bitmap object back.\r\n // However, this effectively clears the worker's canvas, so we need to redraw the whole frame every time, which defeats the performance gained from reduced copying.\r\n /*try {\r\n const canvas = document.createElement(\"canvas\");\r\n const offscreen = canvas.transferControlToOffscreen();\r\n const context = offscreen.getContext(\"2d\");\r\n return context != null;\r\n } catch (e) {\r\n return false;\r\n }*/\r\n}\r\n\r\nasync function do_load_game(api, audio, mpq, spawn) {\r\n const fs = await api.fs;\r\n if (spawn && !mpq) {\r\n await load_spawn(api, fs);\r\n }\r\n\r\n let context = null, offscreen = false;\r\n if (testOffscreen()) {\r\n context = api.canvas.getContext(\"bitmaprenderer\");\r\n offscreen = true;\r\n } else {\r\n context = api.canvas.getContext(\"2d\", {alpha: false});\r\n }\r\n return await new Promise((resolve, reject) => {\r\n try {\r\n const worker = new Worker();\r\n\r\n let packetQueue = [];\r\n const webrtc = webrtc_open(data => {\r\n packetQueue.push(data);\r\n });\r\n\r\n worker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"loaded\":\r\n resolve((func, ...params) => worker.postMessage({action: \"event\", func, params}));\r\n break;\r\n case \"render\":\r\n onRender(api, context, data.batch);\r\n break;\r\n case \"audio\":\r\n audio[data.func](...data.params);\r\n break;\r\n case \"audioBatch\":\r\n for (let {func, params} of data.batch) {\r\n audio[func](...params);\r\n }\r\n break;\r\n case \"fs\":\r\n fs[data.func](...data.params);\r\n break;\r\n case \"cursor\":\r\n api.setCursorPos(data.x, data.y);\r\n break;\r\n case \"keyboard\":\r\n api.openKeyboard(data.rect);\r\n break;\r\n case \"error\":\r\n audio.stop_all();\r\n api.onError(data.error, data.stack);\r\n break;\r\n case \"failed\":\r\n reject(Error(data.stack || data.error));\r\n break;\r\n case \"progress\":\r\n api.onProgress({text: data.text, loaded: data.loaded, total: data.total});\r\n break;\r\n case \"exit\":\r\n api.onExit();\r\n break;\r\n case \"current_save\":\r\n api.setCurrentSave(data.name);\r\n break;\r\n case \"packet\":\r\n webrtc.send(data.buffer);\r\n break;\r\n case \"packetBatch\":\r\n for (let packet of data.batch) {\r\n webrtc.send(packet);\r\n }\r\n break;\r\n default:\r\n }\r\n }); \r\n const transfer= [];\r\n for (let [, file] of fs.files) {\r\n transfer.push(file.buffer);\r\n }\r\n worker.postMessage({action: \"init\", files: fs.files, mpq, spawn, offscreen}, transfer);\r\n setInterval(() => {\r\n if (packetQueue.length) {\r\n worker.postMessage({action: \"packetBatch\", batch: packetQueue}, packetQueue);\r\n packetQueue.length = 0;\r\n }\r\n }, 20);\r\n delete fs.files;\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n}\r\n\r\nexport default function load_game(api, mpq, spawn) {\r\n const audio = init_sound();\r\n return do_load_game(api, audio, mpq, spawn);\r\n}\r\n","import React from 'react';\r\nimport './App.scss';\r\nimport classNames from 'classnames';\r\nimport ReactGA from 'react-ga';\r\n\r\nimport { mapStackTrace } from 'sourcemapped-stacktrace';\r\n\r\nimport create_fs from './fs';\r\nimport load_game from './api/loader';\r\nimport { SpawnSizes } from './api/load_spawn';\r\n\r\nimport Peer from 'peerjs';\r\n\r\nwindow.Peer = Peer;\r\n\r\nif (process.env.NODE_ENV === 'production') {\r\n ReactGA.initialize('UA-43123589-6');\r\n ReactGA.pageview('/');\r\n}\r\n\r\nfunction reportLink(e, retail) {\r\n const message = e.stack || e.message || \"Unknown error\";\r\n const url = new URL(\"https://github.com/d07RiV/diabloweb/issues/new\");\r\n url.searchParams.set(\"body\",\r\n`**Description:**\r\n[Please describe what you were doing before the error occurred]\r\n\r\n**App version:**\r\nDiabloWeb ${process.env.VERSION} (${retail ? 'Retail' : 'Shareware'})\r\n\r\n**Error message:**\r\n \r\n${message.split(\"\\n\").map(line => \" \" + line).join(\"\\n\")}\r\n\r\n**User agent:**\r\n\r\n ${navigator.userAgent}\r\n\r\n**Save file:**\r\n[Please attach the save file, if applicable. The error box should have a link to download the current save you were playing; alternatively, you can open dev console on the game page (F12) and type in ${\"`DownloadSaves()`\"}]\r\n`);\r\n return url.toString();\r\n}\r\n\r\nfunction isDropFile(e) {\r\n if (e.dataTransfer.items) {\r\n for (let i = 0; i < e.dataTransfer.items.length; ++i) {\r\n if (e.dataTransfer.items[i].kind === \"file\") {\r\n return true;\r\n }\r\n }\r\n } if (e.dataTransfer.files.length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction getDropFile(e) {\r\n if (e.dataTransfer.items) {\r\n for (let i = 0; i < e.dataTransfer.items.length; ++i) {\r\n if (e.dataTransfer.items[i].kind === \"file\") {\r\n return e.dataTransfer.items[i].getAsFile();\r\n }\r\n }\r\n } if (e.dataTransfer.files.length) {\r\n return e.dataTransfer.files[0];\r\n }\r\n}\r\n\r\nconst TOUCH_MOVE = 0;\r\nconst TOUCH_RMB = 1;\r\nconst TOUCH_SHIFT = 2;\r\n\r\nfunction findKeyboardRule() {\r\n for (let sheet of document.styleSheets) {\r\n for (let rule of sheet.cssRules) {\r\n if (rule.type === CSSRule.MEDIA_RULE && rule.conditionText === '(min-aspect-ratio: 3/1)') {\r\n for (let sub of rule.cssRules) {\r\n if (sub.selectorText === '.App.keyboard .Body .inner') {\r\n return sub;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\nlet keyboardRule = null;\r\ntry {\r\n keyboardRule = findKeyboardRule();\r\n} catch (e) {\r\n}\r\n\r\nconst Link = ({children, ...props}) => {children};\r\n\r\nclass App extends React.Component {\r\n files = new Map();\r\n state = {started: false, loading: false, dropping: 0, has_spawn: false};\r\n cursorPos = {x: 0, y: 0};\r\n\r\n touchControls = false;\r\n touchButtons = [null, null, null, null, null, null];\r\n touchCtx = [null, null, null, null, null, null];\r\n touchMods = [false, false, false, false, false, false];\r\n touchBelt = [-1, -1, -1, -1, -1, -1];\r\n maxKeyboard = 0;\r\n\r\n fs = create_fs(true);\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.setTouch0 = this.setTouch_.bind(this, 0);\r\n this.setTouch1 = this.setTouch_.bind(this, 1);\r\n this.setTouch2 = this.setTouch_.bind(this, 2);\r\n this.setTouch3 = this.setTouchBelt_.bind(this, 3);\r\n this.setTouch4 = this.setTouchBelt_.bind(this, 4);\r\n this.setTouch5 = this.setTouchBelt_.bind(this, 5);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"drop\", this.onDrop, true);\r\n document.addEventListener(\"dragover\", this.onDragOver, true);\r\n document.addEventListener(\"dragenter\", this.onDragEnter, true);\r\n document.addEventListener(\"dragleave\", this.onDragLeave, true);\r\n\r\n this.fs.then(fs => {\r\n const spawn = fs.files.get('spawn.mpq');\r\n if (spawn && SpawnSizes.includes(spawn.byteLength)) {\r\n this.setState({has_spawn: true});\r\n }\r\n });\r\n }\r\n\r\n onDrop = e => {\r\n const file = getDropFile(e);\r\n if (file) {\r\n e.preventDefault();\r\n this.start(file);\r\n }\r\n this.setState({dropping: 0});\r\n }\r\n onDragEnter = e => {\r\n e.preventDefault();\r\n this.setDropping(1);\r\n }\r\n onDragOver = e => {\r\n if (isDropFile(e)) {\r\n e.preventDefault();\r\n }\r\n }\r\n onDragLeave = e => {\r\n this.setDropping(-1);\r\n }\r\n setDropping(inc) {\r\n this.setState(({dropping}) => ({dropping: Math.max(dropping + inc, 0)}));\r\n }\r\n\r\n onError(message, stack) {\r\n if (stack) {\r\n mapStackTrace(stack, stack => {\r\n this.setState(({error}) => !error && {error: {message, stack: stack.join(\"\\n\")}});\r\n });\r\n } else {\r\n this.setState(({error}) => !error && {error: {message}});\r\n }\r\n }\r\n\r\n openKeyboard(rect) {\r\n if (rect) {\r\n this.showKeyboard = {\r\n left: `${(100 * (rect[0] - 10) / 640).toFixed(2)}%`,\r\n top: `${(100 * (rect[1] - 10) / 480).toFixed(2)}%`,\r\n width: `${(100 * (rect[2] - rect[0] + 20) / 640).toFixed(2)}%`,\r\n height: `${(100 * (rect[3] - rect[1] + 20) / 640).toFixed(2)}%`,\r\n };\r\n this.maxKeyboard = rect[4];\r\n this.element.classList.add(\"keyboard\");\r\n Object.assign(this.keyboard.style, this.showKeyboard);\r\n this.keyboard.focus();\r\n if (keyboardRule) {\r\n keyboardRule.style.transform = `translate(-50%, ${(-(rect[1] + rect[3]) * 56.25 / 960).toFixed(2)}vw)`;\r\n }\r\n } else {\r\n this.showKeyboard = false;\r\n this.element.classList.remove(\"keyboard\");\r\n this.keyboard.blur();\r\n this.keyboard.value = \"\";\r\n this.keyboardNum = 0;\r\n }\r\n }\r\n\r\n setCursorPos(x, y) {\r\n const rect = this.canvas.getBoundingClientRect();\r\n this.cursorPos = {\r\n x: rect.left + (rect.right - rect.left) * x / 640,\r\n y: rect.top + (rect.bottom - rect.top) * y / 480,\r\n };\r\n setTimeout(() => {\r\n this.game(\"DApi_Mouse\", 0, 0, 0, x, y);\r\n });\r\n }\r\n\r\n onProgress(progress) {\r\n this.setState({progress});\r\n }\r\n\r\n onExit() {\r\n if (!this.state.error) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n setCurrentSave(name) {\r\n this.saveName = name;\r\n }\r\n downloadSave = e => {\r\n this.fs.then(fs => this.saveName && fs.download(this.saveName));\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n\r\n drawBelt(idx, slot) {\r\n if (!this.canvas) return;\r\n if (!this.touchButtons[idx]) {\r\n return;\r\n }\r\n this.touchBelt[idx] = slot;\r\n if (slot >= 0) {\r\n this.touchButtons[idx].style.display = \"block\";\r\n this.touchCtx[idx].drawImage(this.canvas, 205 + 29 * slot, 357, 28, 28, 0, 0, 28, 28);\r\n } else {\r\n this.touchButtons[idx].style.display = \"none\";\r\n }\r\n }\r\n\r\n updateBelt(belt) {\r\n if (belt) {\r\n const used = new Set();\r\n let pos = 3;\r\n for (let i = 0; i < belt.length && pos < 6; ++i) {\r\n if (belt[i] >= 0 && !used.has(belt[i])) {\r\n this.drawBelt(pos++, i);\r\n used.add(belt[i]);\r\n }\r\n }\r\n for (; pos < 6; ++pos) {\r\n this.drawBelt(pos, -1);\r\n }\r\n } else {\r\n this.drawBelt(3, -1);\r\n this.drawBelt(4, -1);\r\n this.drawBelt(5, -1);\r\n }\r\n }\r\n\r\n start(file) {\r\n if (file && file.name.match(/\\.sv$/i)) {\r\n this.fs.then(fs => fs.upload(file)).then(console.log(`Updated ${file.name}`));\r\n return;\r\n }\r\n if (file && !file.name.match(/\\.mpq$/i)) {\r\n window.alert('Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.');\r\n return;\r\n }\r\n\r\n document.removeEventListener(\"drop\", this.onDrop, true);\r\n document.removeEventListener(\"dragover\", this.onDragOver, true);\r\n document.removeEventListener(\"dragenter\", this.onDragEnter, true);\r\n document.removeEventListener(\"dragleave\", this.onDragLeave, true);\r\n this.setState({dropping: 0});\r\n\r\n const retail = !!(file && file.name.match(/^diabdat\\.mpq$/i));\r\n if (process.env.NODE_ENV === 'production') {\r\n ReactGA.event({\r\n category: 'Game',\r\n action: retail ? 'Start Retail' : 'Start Shareware',\r\n });\r\n }\r\n\r\n this.setState({loading: true, retail});\r\n\r\n load_game(this, file, !retail).then(game => {\r\n this.game = game;\r\n\r\n document.addEventListener('mousemove', this.onMouseMove, true);\r\n document.addEventListener('mousedown', this.onMouseDown, true);\r\n document.addEventListener('mouseup', this.onMouseUp, true);\r\n document.addEventListener('keydown', this.onKeyDown, true);\r\n document.addEventListener('keyup', this.onKeyUp, true);\r\n document.addEventListener('contextmenu', this.onMenu, true);\r\n\r\n document.addEventListener('touchstart', this.onTouchStart, {passive: false, capture: true});\r\n document.addEventListener('touchmove', this.onTouchMove, {passive: false, capture: true});\r\n document.addEventListener('touchend', this.onTouchEnd, {passive: false, capture: true});\r\n\r\n document.addEventListener('pointerlockchange', this.onPointerLockChange);\r\n window.addEventListener('resize', this.onResize);\r\n\r\n this.setState({started: true});\r\n }, e => this.onError(e.message, e.stack));\r\n }\r\n\r\n pointerLocked() {\r\n return document.pointerLockElement === this.canvas || document.mozPointerLockElement === this.canvas;\r\n }\r\n\r\n mousePos(e) {\r\n const rect = this.canvas.getBoundingClientRect();\r\n if (this.pointerLocked()) {\r\n this.cursorPos.x = Math.max(rect.left, Math.min(rect.right, this.cursorPos.x + e.movementX));\r\n this.cursorPos.y = Math.max(rect.top, Math.min(rect.bottom, this.cursorPos.y + e.movementY));\r\n } else {\r\n this.cursorPos = {x: e.clientX, y: e.clientY};\r\n }\r\n return {\r\n x: Math.max(0, Math.min(Math.round((this.cursorPos.x - rect.left) / (rect.right - rect.left) * 640), 639)),\r\n y: Math.max(0, Math.min(Math.round((this.cursorPos.y - rect.top) / (rect.bottom - rect.top) * 480), 479)),\r\n };\r\n }\r\n\r\n mouseButton(e) {\r\n switch (e.button) {\r\n case 0: return 1;\r\n case 1: return 4;\r\n case 2: return 2;\r\n case 3: return 5;\r\n case 4: return 6;\r\n default: return 1;\r\n }\r\n }\r\n eventMods(e) {\r\n return ((e.shiftKey || this.touchMods[TOUCH_SHIFT]) ? 1 : 0) + (e.ctrlKey ? 2 : 0) + (e.altKey ? 4 : 0) + (e.touches ? 8 : 0);\r\n }\r\n\r\n onResize = () => {\r\n document.exitPointerLock();\r\n }\r\n\r\n onPointerLockChange = () => {\r\n if (window.screen && window.innerHeight === window.screen.height && !this.pointerLocked()) {\r\n // assume that the user pressed escape\r\n this.game(\"DApi_Key\", 0, 0, 27);\r\n this.game(\"DApi_Key\", 1, 0, 27);\r\n }\r\n }\r\n\r\n onMouseMove = e => {\r\n if (!this.canvas) return;\r\n const {x, y} = this.mousePos(e);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n e.preventDefault();\r\n }\r\n\r\n onMouseDown = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n }\r\n if (this.touchControls) {\r\n this.touchControls = false;\r\n this.element.classList.remove(\"touch\");\r\n }\r\n const {x, y} = this.mousePos(e);\r\n if (window.screen && window.innerHeight === window.screen.height) {\r\n // we're in fullscreen, let's get pointer lock!\r\n if (!this.pointerLocked()) {\r\n this.canvas.requestPointerLock();\r\n }\r\n }\r\n this.game(\"DApi_Mouse\", 1, this.mouseButton(e), this.eventMods(e), x, y);\r\n e.preventDefault();\r\n }\r\n\r\n onMouseUp = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n //return;\r\n }\r\n const {x, y} = this.mousePos(e);\r\n this.game(\"DApi_Mouse\", 2, this.mouseButton(e), this.eventMods(e), x, y);\r\n if (e.target !== this.keyboard) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n onKeyDown = e => {\r\n if (!this.canvas) return;\r\n this.game(\"DApi_Key\", 0, this.eventMods(e), e.keyCode);\r\n if (!this.showKeyboard && (e.keyCode >= 32 && e.key.length === 1)) {\r\n this.game(\"DApi_Char\", e.key.charCodeAt(0));\r\n } else if (e.keyCode === 8 || e.keyCode === 13) {\r\n this.game(\"DApi_Char\", e.keyCode);\r\n }\r\n this.clearKeySel();\r\n if (!this.showKeyboard) {\r\n if (e.keyCode === 8 || e.keyCode === 9 || (e.keyCode >= 112 && e.keyCode <= 119)) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onMenu = e => {\r\n e.preventDefault();\r\n }\r\n\r\n onKeyUp = e => {\r\n if (!this.canvas) return;\r\n this.game(\"DApi_Key\", 1, this.eventMods(e), e.keyCode);\r\n this.clearKeySel();\r\n }\r\n\r\n clearKeySel() {\r\n if (this.showKeyboard) {\r\n const len = this.keyboard.value.length;\r\n this.keyboard.setSelectionRange(len, len);\r\n }\r\n }\r\n\r\n onKeyboardInner(flags) {\r\n if (this.showKeyboard) {\r\n const text = this.keyboard.value;\r\n let valid;\r\n if (this.maxKeyboard > 0) {\r\n valid = (text.match(/[\\x20-\\x7E]/g) || []).join(\"\").substring(0, this.maxKeyboard);\r\n } else {\r\n const maxValue = -this.maxKeyboard;\r\n if (text.match(/^\\d*$/)) {\r\n this.keyboardNum = Math.min(text.length ? parseInt(text) : 0, maxValue);\r\n }\r\n valid = (this.keyboardNum ? this.keyboardNum.toString() : \"\");\r\n }\r\n if (text !== valid) {\r\n this.keyboard.value = valid;\r\n }\r\n this.clearKeySel();\r\n this.game(\"text\", valid, flags);\r\n }\r\n }\r\n onKeyboard = () => {\r\n this.onKeyboardInner(0);\r\n }\r\n onKeyboardBlur = () => {\r\n this.onKeyboardInner(1);\r\n }\r\n\r\n parseFile = e => {\r\n const files = e.target.files;\r\n if (files.length > 0) {\r\n this.start(files[0]);\r\n }\r\n }\r\n\r\n touchButton = null;\r\n touchCanvas = null;\r\n\r\n setTouchMod(index, value, use) {\r\n if (index < 3) {\r\n this.touchMods[index] = value;\r\n if (this.touchButtons[index]) {\r\n this.touchButtons[index].classList.toggle(\"active\", value);\r\n }\r\n } else if (use && this.touchBelt[index] >= 0) {\r\n const now = performance.now();\r\n if (!this.beltTime || now - this.beltTime > 750) {\r\n this.game(\"DApi_Char\", 49 + this.touchBelt[index]);\r\n this.beltTime = now;\r\n }\r\n }\r\n }\r\n\r\n updateTouchButton(touches, release) {\r\n let touchOther = null;\r\n if (!this.touchControls) {\r\n this.touchControls = true;\r\n this.element.classList.add(\"touch\");\r\n }\r\n const btn = this.touchButton;\r\n for (let {target, identifier, clientX, clientY} of touches) {\r\n if (btn && btn.id === identifier && this.touchButtons[btn.index] === target) {\r\n if (touches.length > 1) {\r\n btn.stick = false;\r\n }\r\n btn.clientX = clientX;\r\n btn.clientY = clientY;\r\n this.touchCanvas = [...touches].find(t => t.identifier !== identifier);\r\n if (this.touchCanvas) {\r\n this.touchCanvas = {clientX: this.touchCanvas.clientX, clientY: this.touchCanvas.clientY};\r\n }\r\n delete this.panPos;\r\n return this.touchCanvas != null;\r\n }\r\n const idx = this.touchButtons.indexOf(target);\r\n if (idx >= 0 && !touchOther) {\r\n touchOther = {id: identifier, index: idx, stick: true, original: this.touchMods[idx], clientX, clientY};\r\n }\r\n }\r\n if (btn && !touchOther && release && btn.stick) {\r\n const rect = this.touchButtons[btn.index].getBoundingClientRect();\r\n const {clientX, clientY} = btn;\r\n if (clientX >= rect.left && clientX < rect.right && clientY >= rect.top && clientY < rect.bottom) {\r\n this.setTouchMod(btn.index, !btn.original, true);\r\n } else {\r\n this.setTouchMod(btn.index, btn.original);\r\n }\r\n } else if (btn) {\r\n this.setTouchMod(btn.index, false);\r\n }\r\n this.touchButton = touchOther;\r\n if (touchOther) {\r\n this.setTouchMod(touchOther.index, true);\r\n if (touchOther.index === TOUCH_MOVE) {\r\n this.setTouchMod(TOUCH_RMB, false);\r\n } else if (touchOther.index === TOUCH_RMB) {\r\n this.setTouchMod(TOUCH_MOVE, false);\r\n }\r\n delete this.panPos;\r\n } else if (touches.length === 2) {\r\n const x = (touches[1].clientX + touches[0].clientX) / 2, y = (touches[1].clientY + touches[0].clientY) / 2;\r\n if (this.panPos) {\r\n const dx = x - this.panPos.x, dy = y - this.panPos.y;\r\n const step = this.canvas.offsetHeight / 12;\r\n if (Math.max(Math.abs(dx), Math.abs(dy)) > step) {\r\n let key;\r\n if (Math.abs(dx) > Math.abs(dy)) {\r\n key = (dx > 0 ? 0x25 : 0x27);\r\n } else {\r\n key = (dy > 0 ? 0x26 : 0x28);\r\n }\r\n this.game(\"DApi_Key\", 0, 0, key);\r\n // key up is ignored anyway\r\n this.panPos = {x, y};\r\n }\r\n } else {\r\n this.game(\"DApi_Mouse\", 0, 0, 24, 320, 180);\r\n this.game(\"DApi_Mouse\", 2, 1, 24, 320, 180);\r\n this.panPos = {x, y};\r\n }\r\n this.touchCanvas = null;\r\n return false;\r\n } else {\r\n delete this.panPos;\r\n }\r\n this.touchCanvas = [...touches].find(t => !touchOther || t.identifier !== touchOther.id);\r\n if (this.touchCanvas) {\r\n this.touchCanvas = {clientX: this.touchCanvas.clientX, clientY: this.touchCanvas.clientY};\r\n }\r\n return this.touchCanvas != null;\r\n }\r\n\r\n onTouchStart = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n } else {\r\n this.keyboard.blur();\r\n }\r\n e.preventDefault();\r\n if (this.updateTouchButton(e.touches, false)) {\r\n const {x, y} = this.mousePos(this.touchCanvas);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n if (!this.touchMods[TOUCH_MOVE]) {\r\n this.game(\"DApi_Mouse\", 1, this.touchMods[TOUCH_RMB] ? 2 : 1, this.eventMods(e), x, y);\r\n }\r\n }\r\n }\r\n onTouchMove = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n }\r\n e.preventDefault();\r\n if (this.updateTouchButton(e.touches, false)) {\r\n const {x, y} = this.mousePos(this.touchCanvas);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n }\r\n }\r\n onTouchEnd = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n //return;\r\n } else {\r\n e.preventDefault();\r\n }\r\n const prevTc = this.touchCanvas;\r\n this.updateTouchButton(e.touches, true);\r\n if (prevTc && !this.touchCanvas) {\r\n const {x, y} = this.mousePos(prevTc);\r\n this.game(\"DApi_Mouse\", 2, 1, this.eventMods(e), x, y);\r\n this.game(\"DApi_Mouse\", 2, 2, this.eventMods(e), x, y);\r\n\r\n if (this.touchMods[TOUCH_RMB] && (!this.touchButton || this.touchButton.index !== TOUCH_RMB)) {\r\n this.setTouchMod(TOUCH_RMB, false);\r\n }\r\n }\r\n if (!document.fullscreenElement) {\r\n this.element.requestFullscreen();\r\n }\r\n }\r\n\r\n setCanvas = e => this.canvas = e;\r\n setElement = e => this.element = e;\r\n setKeyboard = e => this.keyboard = e;\r\n setTouch_(i, e) {\r\n this.touchButtons[i] = e;\r\n }\r\n setTouchBelt_(i, e) {\r\n this.touchButtons[i] = e;\r\n if (e) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = 28;\r\n canvas.height = 28;\r\n e.appendChild(canvas);\r\n this.touchCtx[i] = canvas.getContext(\"2d\");\r\n } else {\r\n this.touchCtx[i] = null;\r\n }\r\n }\r\n\r\n render() {\r\n const {started, loading, error, progress, dropping, has_spawn} = this.state;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {!error && }\r\n \r\n
\r\n
\r\n
\r\n {!!error && (\r\n \r\n

The following error has occurred:

\r\n

{error.message}

\r\n

Click to create an issue on GitHub

\r\n {this.saveName != null &&

Download save file

}\r\n \r\n )}\r\n {!!loading && !started && !error && (\r\n
\r\n {(progress && progress.text) || 'Loading...'}\r\n {progress != null && !!progress.total && (\r\n \r\n )}\r\n
\r\n )}\r\n {!started && !loading && !error && (\r\n
\r\n

\r\n This is a web port of the original Diablo game, based on source code reconstructed by\r\n GalaXyHaXz and devilution team. The project page with information and links can be found over here https://github.com/d07RiV/diabloweb\r\n

\r\n

\r\n If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing.\r\n The game can be purchased from GoG.\r\n

\r\n {!has_spawn && (\r\n

\r\n Or you can play the shareware version for free (50MB download).\r\n

\r\n )}\r\n
\r\n \r\n \r\n
\r\n this.start()}>Play Shareware\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './reset.css';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nimport App from './App';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\nserviceWorker.register({\r\n onUpdate() {\r\n },\r\n});\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.bfb40944.chunk.js b/static/js/main.bfb40944.chunk.js new file mode 100644 index 0000000..a2a5c39 --- /dev/null +++ b/static/js/main.bfb40944.chunk.js @@ -0,0 +1,2 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{11:function(e,t,n){"use strict";n.d(t,"a",function(){return m});var r=n(6),o=n(1),a=n.n(o),i=n(2),s=n(13),c=n.n(s);function u(e,t){return l.apply(this,arguments)}function l(){return(l=Object(i.a)(a.a.mark(function e(t,n){var r,o,i,s;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.get(n.toLowerCase());case 2:(r=e.sent)?(o=new Blob([r],{type:"binary/octet-stream"}),i=URL.createObjectURL(o),(s=document.createElement("a")).setAttribute("href",i),s.setAttribute("download",n),document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(i)):console.error("File ".concat(n," does not exist"));case 4:case"end":return e.stop()}},e)}))).apply(this,arguments)}function d(e){return h.apply(this,arguments)}function h(){return(h=Object(i.a)(a.a.mark(function e(t){var n,r,o,i,s,c;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=!0,r=!1,o=void 0,e.prev=3,e.next=6,t.keys();case 6:e.t0=Symbol.iterator,i=e.sent[e.t0]();case 8:if(n=(s=i.next()).done){e.next=14;break}(c=s.value).match(/\.sv$/i)&&u(t,c);case 11:n=!0,e.next=8;break;case 14:e.next=20;break;case 16:e.prev=16,e.t1=e.catch(3),r=!0,o=e.t1;case 20:e.prev=20,e.prev=21,n||null==i.return||i.return();case 23:if(e.prev=23,!r){e.next=26;break}throw o;case 26:return e.finish(23);case 27:return e.finish(20);case 28:case"end":return e.stop()}},e,null,[[3,16,20,28],[21,,23,27]])}))).apply(this,arguments)}var f=function(e){return new Promise(function(t,n){var r=new FileReader;r.onload=function(){return t(r.result)},r.onerror=function(){return n(r.error)},r.onabort=function(){return n()},r.readAsArrayBuffer(e)})};function p(e,t,n){return v.apply(this,arguments)}function v(){return(v=Object(i.a)(a.a.mark(function e(t,n,r){var o;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=Uint8Array,e.next=3,f(r);case 3:return e.t1=e.sent,o=new e.t0(e.t1),n.set(r.name.toLowerCase(),o),e.abrupt("return",t.set(r.name.toLowerCase(),o));case 7:case"end":return e.stop()}},e)}))).apply(this,arguments)}function m(e){return y.apply(this,arguments)}function y(){return(y=Object(i.a)(a.a.mark(function e(t){var n,o,i,s,l,h,f,v;return a.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,n=new c.a("diablo_fs"),o=new Map,i=0,e.t0=Object,e.next=7,n.json();case 7:e.t1=e.sent,s=e.t0.entries.call(e.t0,e.t1);case 9:if(!(i=this.buffer.byteLength)throw Error("packet too small");return this.buffer[this.pos++]}},{key:"read16",value:function(){var e=this.pos,t=this.buffer;if(e+2>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8;return this.pos+=2,n}},{key:"read32",value:function(){var e=this.pos,t=this.buffer;if(e+4>t.byteLength)throw Error("packet too small");var n=t[e]|t[e+1]<<8|t[e+2]<<16|t[e+3]<<24;return this.pos+=4,n}},{key:"read_str",value:function(){var e=this.read8(),t=this.pos,n=this.buffer;if(t+e>n.byteLength)throw Error("packet too small");var r=String.fromCharCode.apply(String,Object(u.a)(n.subarray(t,t+e)));return this.pos+=e,r}},{key:"read_buf",value:function(){var e=this.read32(),t=this.buffer.subarray(this.pos,this.pos+e);return this.pos+=e,t}}]),e}(),I=function(){function e(t){Object(l.a)(this,e),this.buffer=new Uint8Array(t),this.pos=0}return Object(d.a)(e,[{key:"write8",value:function(e){return this.buffer[this.pos++]=e,this}},{key:"write16",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,this.pos+=2,this}},{key:"write32",value:function(e){var t=this.pos,n=this.buffer;return n[t]=e,n[t+1]=e>>8,n[t+2]=e>>16,n[t+3]=e>>24,this.pos+=4,this}},{key:"write_str",value:function(e){var t=e.length;this.write8(t);for(var n=this.pos,r=this.buffer,o=0;o=4?e.send(z(G.join_reject,{cookie:s.cookie,reason:K.JOIN_GAME_FULL})):(t.players[c]=n,n.id=c,e.send(z(G.join_accept,{cookie:s.cookie,index:c,seed:t.seed,difficulty:t.difficulty})),t.send(255,z(G.connect,{id:c})))}break;default:if(null==n.id)return;t.handle(n.id,i.code,s)}if(!o.done())throw Error("packet too large")}),e.on("close",function(){null!=n.id&&t.drop(n.id,1073741830)})}},{key:"send",value:function(e,t){for(var n=1;n<4;++n)e&1<>16&255,N=L>>8&255,P=255&L;t.fillStyle="rgb(".concat(B,", ").concat(N,", ").concat(P,")"),t.fillText(A,O,S+22)}}catch(I){M=!0,C=I}finally{try{E||null==D.return||D.return()}finally{if(M)throw C}}t.restore()}}e.updateBelt(s)}function $(){return($=Object(M.a)(x.a.mark(function e(t,n,r,o){var a,i,s;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.fs;case 2:if(a=e.sent,!o||r){e.next=6;break}return e.next=6,A(t,a);case 6:return i=null,s=!1,i=t.canvas.getContext("2d",{alpha:!1}),e.next=10,new Promise(function(e,c){try{var l=new T.a,d=[],h=H(function(e){d.push(e)});l.addEventListener("message",function(r){var o=r.data;switch(o.action){case"loaded":e(function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r=32&&1===e.key.length?n.game("DApi_Char",e.key.charCodeAt(0)):8!==e.keyCode&&13!==e.keyCode||n.game("DApi_Char",e.keyCode),n.clearKeySel(),n.showKeyboard||(8===e.keyCode||9===e.keyCode||e.keyCode>=112&&e.keyCode<=119)&&e.preventDefault())},n.onMenu=function(e){e.preventDefault()},n.onKeyUp=function(e){n.canvas&&(n.game("DApi_Key",1,n.eventMods(e),e.keyCode),n.clearKeySel())},n.onKeyboard=function(){n.onKeyboardInner(0)},n.onKeyboardBlur=function(){n.onKeyboardInner(1)},n.parseFile=function(e){var t=e.target.files;t.length>0&&n.start(t[0])},n.touchButton=null,n.touchCanvas=null,n.onTouchStart=function(e){if(n.canvas&&e.target!==n.keyboard&&(n.keyboard.blur(),e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,o=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,o),n.touchMods[ee]||n.game("DApi_Mouse",1,n.touchMods[te]?2:1,n.eventMods(e),r,o)}},n.onTouchMove=function(e){if(n.canvas&&e.target!==n.keyboard&&(e.preventDefault(),n.updateTouchButton(e.touches,!1))){var t=n.mousePos(n.touchCanvas),r=t.x,o=t.y;n.game("DApi_Mouse",0,0,n.eventMods(e),r,o)}},n.onTouchEnd=function(e){if(n.canvas){e.target===n.keyboard||e.preventDefault();var t=n.touchCanvas;if(n.updateTouchButton(e.touches,!0),t&&!n.touchCanvas){var r=n.mousePos(t),o=r.x,a=r.y;n.game("DApi_Mouse",2,1,n.eventMods(e),o,a),n.game("DApi_Mouse",2,2,n.eventMods(e),o,a),!n.touchMods[te]||n.touchButton&&n.touchButton.index===te||n.setTouchMod(te,!1)}document.fullscreenElement||n.element.requestFullscreen()}},n.setCanvas=function(e){return n.canvas=e},n.setElement=function(e){return n.element=e},n.setKeyboard=function(e){return n.keyboard=e},n.setTouch0=n.setTouch_.bind(Object(p.a)(n),0),n.setTouch1=n.setTouch_.bind(Object(p.a)(n),1),n.setTouch2=n.setTouch_.bind(Object(p.a)(n),2),n.setTouch3=n.setTouchBelt_.bind(Object(p.a)(n),3),n.setTouch4=n.setTouchBelt_.bind(Object(p.a)(n),4),n.setTouch5=n.setTouchBelt_.bind(Object(p.a)(n),5),n}return Object(v.a)(t,e),Object(d.a)(t,[{key:"componentDidMount",value:function(){var e=this;document.addEventListener("drop",this.onDrop,!0),document.addEventListener("dragover",this.onDragOver,!0),document.addEventListener("dragenter",this.onDragEnter,!0),document.addEventListener("dragleave",this.onDragLeave,!0),this.fs.then(function(t){var n=t.files.get("spawn.mpq");n&&S.includes(n.byteLength)&&e.setState({has_spawn:!0})})}},{key:"setDropping",value:function(e){this.setState(function(t){var n=t.dropping;return{dropping:Math.max(n+e,0)}})}},{key:"onError",value:function(e,t){var n=this;t?Object(g.mapStackTrace)(t,function(t){n.setState(function(n){return!n.error&&{error:{message:e,stack:t.join("\n")}}})}):this.setState(function(t){return!t.error&&{error:{message:e}}})}},{key:"openKeyboard",value:function(e){e?(this.showKeyboard={left:"".concat((100*(e[0]-10)/640).toFixed(2),"%"),top:"".concat((100*(e[1]-10)/480).toFixed(2),"%"),width:"".concat((100*(e[2]-e[0]+20)/640).toFixed(2),"%"),height:"".concat((100*(e[3]-e[1]+20)/640).toFixed(2),"%")},this.maxKeyboard=e[4],this.element.classList.add("keyboard"),Object.assign(this.keyboard.style,this.showKeyboard),this.keyboard.focus(),ne&&(ne.style.transform="translate(-50%, ".concat((56.25*-(e[1]+e[3])/960).toFixed(2),"vw)"))):(this.showKeyboard=!1,this.element.classList.remove("keyboard"),this.keyboard.blur(),this.keyboard.value="",this.keyboardNum=0)}},{key:"setCursorPos",value:function(e,t){var n=this,r=this.canvas.getBoundingClientRect();this.cursorPos={x:r.left+(r.right-r.left)*e/640,y:r.top+(r.bottom-r.top)*t/480},setTimeout(function(){n.game("DApi_Mouse",0,0,0,e,t)})}},{key:"onProgress",value:function(e){this.setState({progress:e})}},{key:"onExit",value:function(){this.state.error||window.location.reload()}},{key:"setCurrentSave",value:function(e){this.saveName=e}},{key:"drawBelt",value:function(e,t){this.canvas&&this.touchButtons[e]&&(this.touchBelt[e]=t,t>=0?(this.touchButtons[e].style.display="block",this.touchCtx[e].drawImage(this.canvas,205+29*t,357,28,28,0,0,28,28)):this.touchButtons[e].style.display="none")}},{key:"updateBelt",value:function(e){if(e){for(var t=new Set,n=3,r=0;r=0&&!t.has(e[r])&&(this.drawBelt(n++,r),t.add(e[r]));for(;n<6;++n)this.drawBelt(n,-1)}else this.drawBelt(3,-1),this.drawBelt(4,-1),this.drawBelt(5,-1)}},{key:"start",value:function(e){var t=this;if(e&&e.name.match(/\.sv$/i))this.fs.then(function(t){return t.upload(e)}).then(console.log("Updated ".concat(e.name)));else if(!e||e.name.match(/\.mpq$/i)){document.removeEventListener("drop",this.onDrop,!0),document.removeEventListener("dragover",this.onDragOver,!0),document.removeEventListener("dragenter",this.onDragEnter,!0),document.removeEventListener("dragleave",this.onDragLeave,!0),this.setState({dropping:0});var n=!(!e||!e.name.match(/^diabdat\.mpq$/i));b.a.event({category:"Game",action:n?"Start Retail":"Start Shareware"}),this.setState({loading:!0,retail:n}),Q(this,e,!n).then(function(e){t.game=e,document.addEventListener("mousemove",t.onMouseMove,!0),document.addEventListener("mousedown",t.onMouseDown,!0),document.addEventListener("mouseup",t.onMouseUp,!0),document.addEventListener("keydown",t.onKeyDown,!0),document.addEventListener("keyup",t.onKeyUp,!0),document.addEventListener("contextmenu",t.onMenu,!0),document.addEventListener("touchstart",t.onTouchStart,{passive:!1,capture:!0}),document.addEventListener("touchmove",t.onTouchMove,{passive:!1,capture:!0}),document.addEventListener("touchend",t.onTouchEnd,{passive:!1,capture:!0}),document.addEventListener("pointerlockchange",t.onPointerLockChange),window.addEventListener("resize",t.onResize),t.setState({started:!0})},function(e){return t.onError(e.message,e.stack)})}else window.alert("Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.")}},{key:"pointerLocked",value:function(){return document.pointerLockElement===this.canvas||document.mozPointerLockElement===this.canvas}},{key:"mousePos",value:function(e){var t=this.canvas.getBoundingClientRect();return this.pointerLocked()?(this.cursorPos.x=Math.max(t.left,Math.min(t.right,this.cursorPos.x+e.movementX)),this.cursorPos.y=Math.max(t.top,Math.min(t.bottom,this.cursorPos.y+e.movementY))):this.cursorPos={x:e.clientX,y:e.clientY},{x:Math.max(0,Math.min(Math.round((this.cursorPos.x-t.left)/(t.right-t.left)*640),639)),y:Math.max(0,Math.min(Math.round((this.cursorPos.y-t.top)/(t.bottom-t.top)*480),479))}}},{key:"mouseButton",value:function(e){switch(e.button){case 0:return 1;case 1:return 4;case 2:return 2;case 3:return 5;case 4:return 6;default:return 1}}},{key:"eventMods",value:function(e){return(e.shiftKey||this.touchMods[2]?1:0)+(e.ctrlKey?2:0)+(e.altKey?4:0)+(e.touches?8:0)}},{key:"clearKeySel",value:function(){if(this.showKeyboard){var e=this.keyboard.value.length;this.keyboard.setSelectionRange(e,e)}}},{key:"onKeyboardInner",value:function(e){if(this.showKeyboard){var t,n=this.keyboard.value;if(this.maxKeyboard>0)t=(n.match(/[\x20-\x7E]/g)||[]).join("").substring(0,this.maxKeyboard);else{var r=-this.maxKeyboard;n.match(/^\d*$/)&&(this.keyboardNum=Math.min(n.length?parseInt(n):0,r)),t=this.keyboardNum?this.keyboardNum.toString():""}n!==t&&(this.keyboard.value=t),this.clearKeySel(),this.game("text",t,e)}}},{key:"setTouchMod",value:function(e,t,n){if(e<3)this.touchMods[e]=t,this.touchButtons[e]&&this.touchButtons[e].classList.toggle("active",t);else if(n&&this.touchBelt[e]>=0){var r=performance.now();(!this.beltTime||r-this.beltTime>750)&&(this.game("DApi_Char",49+this.touchBelt[e]),this.beltTime=r)}}},{key:"updateTouchButton",value:function(e,t){var n=this,r=null;this.touchControls||(this.touchControls=!0,this.element.classList.add("touch"));var o=this.touchButton,a=!0,i=!1,s=void 0;try{for(var c,l=function(){var t=c.value,a=t.target,i=t.identifier,s=t.clientX,l=t.clientY;if(o&&o.id===i&&n.touchButtons[o.index]===a)return e.length>1&&(o.stick=!1),o.clientX=s,o.clientY=l,n.touchCanvas=Object(u.a)(e).find(function(e){return e.identifier!==i}),n.touchCanvas&&(n.touchCanvas={clientX:n.touchCanvas.clientX,clientY:n.touchCanvas.clientY}),delete n.panPos,{v:null!=n.touchCanvas};var d=n.touchButtons.indexOf(a);d>=0&&!r&&(r={id:i,index:d,stick:!0,original:n.touchMods[d],clientX:s,clientY:l})},d=e[Symbol.iterator]();!(a=(c=d.next()).done);a=!0){var h=l();if("object"===typeof h)return h.v}}catch(_){i=!0,s=_}finally{try{a||null==d.return||d.return()}finally{if(i)throw s}}if(o&&!r&&t&&o.stick){var f=this.touchButtons[o.index].getBoundingClientRect(),p=o.clientX,v=o.clientY;p>=f.left&&p=f.top&&vk)w=Math.abs(b)>Math.abs(g)?b>0?37:39:g>0?38:40,this.game("DApi_Key",0,0,w),this.panPos={x:m,y:y}}else this.game("DApi_Mouse",0,0,24,320,180),this.game("DApi_Mouse",2,1,24,320,180),this.panPos={x:m,y:y};return this.touchCanvas=null,!1}delete this.panPos}return this.touchCanvas=Object(u.a)(e).find(function(e){return!r||e.identifier!==r.id}),this.touchCanvas&&(this.touchCanvas={clientX:this.touchCanvas.clientX,clientY:this.touchCanvas.clientY}),null!=this.touchCanvas}},{key:"setTouch_",value:function(e,t){this.touchButtons[e]=t}},{key:"setTouchBelt_",value:function(e,t){if(this.touchButtons[e]=t,t){var n=document.createElement("canvas");n.width=28,n.height=28,t.appendChild(n),this.touchCtx[e]=n.getContext("2d")}else this.touchCtx[e]=null}},{key:"render",value:function(){var e=this,t=this.state,n=t.started,r=t.loading,a=t.error,i=t.progress,s=t.dropping,c=t.has_spawn;return o.a.createElement("div",{className:w()("App",{touch:this.touchControls,started:n,dropping:s,keyboard:!!this.showKeyboard}),ref:this.setElement},o.a.createElement("div",{className:"touch-ui touch-mods"},o.a.createElement("div",{className:w()("touch-button","touch-button-0",{active:this.touchMods[0]}),ref:this.setTouch0}),o.a.createElement("div",{className:w()("touch-button","touch-button-1",{active:this.touchMods[1]}),ref:this.setTouch1}),o.a.createElement("div",{className:w()("touch-button","touch-button-2",{active:this.touchMods[2]}),ref:this.setTouch2})),o.a.createElement("div",{className:"touch-ui touch-belt"},o.a.createElement("div",{className:w()("touch-button","touch-button-0"),ref:this.setTouch3}),o.a.createElement("div",{className:w()("touch-button","touch-button-1"),ref:this.setTouch4}),o.a.createElement("div",{className:w()("touch-button","touch-button-2"),ref:this.setTouch5})),o.a.createElement("div",{className:"Body"},o.a.createElement("div",{className:"inner"},!a&&o.a.createElement("canvas",{ref:this.setCanvas,width:640,height:480}),o.a.createElement("input",{type:"text",className:"keyboard",onChange:this.onKeyboard,onBlur:this.onKeyboardBlur,ref:this.setKeyboard,spellCheck:!1,style:this.showKeyboard||{}}))),o.a.createElement("div",{className:"BodyV"},!!a&&o.a.createElement(re,{className:"error",href:Z(a,this.state.retail)},o.a.createElement("p",{className:"header"},"The following error has occurred:"),o.a.createElement("p",{className:"body"},a.message),o.a.createElement("p",{className:"footer"},"Click to create an issue on GitHub"),null!=this.saveName&&o.a.createElement("p",{className:"link",onClick:this.downloadSave},"Download save file")),!!r&&!n&&!a&&o.a.createElement("div",{className:"loading"},i&&i.text||"Loading...",null!=i&&!!i.total&&o.a.createElement("span",{className:"progressBar"},o.a.createElement("span",null,o.a.createElement("span",{style:{width:"".concat(Math.round(100*i.loaded/i.total),"%")}})))),!n&&!r&&!a&&o.a.createElement("div",{className:"start"},o.a.createElement("p",null,"This is a web port of the original Diablo game, based on source code reconstructed by GalaXyHaXz and devilution team. The project page with information and links can be found over here ",o.a.createElement(re,{href:"https://github.com/d07RiV/diabloweb"},"https://github.com/d07RiV/diabloweb")),o.a.createElement("p",null,"If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing. The game can be purchased from ",o.a.createElement(re,{href:"https://www.gog.com/game/diablo"},"GoG"),"."),!c&&o.a.createElement("p",null,"Or you can play the shareware version for free (50MB download)."),o.a.createElement("form",null,o.a.createElement("label",{htmlFor:"loadFile",className:"startButton"},"Select MPQ"),o.a.createElement("input",{accept:".mpq",type:"file",id:"loadFile",style:{display:"none"},onChange:this.parseFile})),o.a.createElement("span",{className:"startButton",onClick:function(){return e.start()}},"Play Shareware"))))}}]),t}(o.a.Component);i.a.render(o.a.createElement(oe,null),document.getElementById("root")),function(e){if("serviceWorker"in navigator){if(new URL("/diabloweb",window.location.href).origin!==window.location.origin)return;window.addEventListener("load",function(){var t="".concat("/diabloweb","/service-worker.js");s?(function(e,t){fetch(e).then(function(n){var r=n.headers.get("content-type");404===n.status||null!=r&&-1===r.indexOf("javascript")?navigator.serviceWorker.ready.then(function(e){e.unregister().then(function(){window.location.reload()})}):c(e,t)}).catch(function(){console.log("No internet connection found. App is running in offline mode.")})}(t,e),navigator.serviceWorker.ready.then(function(){console.log("This web app is being served cache-first by a service worker. To learn more, visit https://bit.ly/CRA-PWA")})):c(t,e)})}}({onUpdate:function(){}})}},[[32,2,0,5]]]); +//# sourceMappingURL=main.bfb40944.chunk.js.map \ No newline at end of file diff --git a/static/js/main.bfb40944.chunk.js.map b/static/js/main.bfb40944.chunk.js.map new file mode 100644 index 0000000..caeae7e --- /dev/null +++ b/static/js/main.bfb40944.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["fs.js","api/game.worker.js","../node_modules/peerjs/dist sync","serviceWorker.js","api/sound.js","api/load_spawn.js","api/packet.js","api/webrtc.js","api/loader.js","App.js","index.js"],"names":["downloadFile","_callee","store","name","file","blob","url","lnk","C_Work_diabloweb_node_modules_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_1___default","a","wrap","_context","prev","next","get","toLowerCase","sent","Blob","type","URL","createObjectURL","document","createElement","setAttribute","body","appendChild","click","removeChild","revokeObjectURL","console","error","concat","stop","downloadSaves","_callee2","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","_step","_context2","undefined","keys","t0","Symbol","iterator","done","value","match","t1","return","finish","readFile","Promise","resolve","reject","reader","FileReader","onload","result","onerror","onabort","readAsArrayBuffer","uploadFile","_callee3","files","data","_context3","Uint8Array","set","abrupt","create_fs","_x7","_create_fs","apply","this","arguments","_callee4","load","_i","_Object$entries","_ref3","_ref2","_context4","IdbKvStore","Map","Object","json","entries","call","length","C_Work_diabloweb_node_modules_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__","window","DownloadFile","DownloadSaves","update","delete","remove","clear","download","upload","t2","module","exports","Worker","__webpack_require__","p","webpackEmptyContext","req","e","Error","code","id","isLocalhost","Boolean","location","hostname","registerValidSW","swUrl","config","navigator","serviceWorker","register","then","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","log","onUpdate","onSuccess","catch","init_sound","AudioContext","webkitAudioContext","StereoPannerNode","create_sound","duplicate_sound","play_sound","set_volume","stop_sound","delete_sound","context","sounds","create_sound_raw","channels","rate","buffer","createBuffer","i","getChannelData","subarray","gain","createGain","panner","pan","decodeAudioData","srcId","src","volume","loop","source","Math","pow","relVolume","createBufferSource","node","connect","destination","start","stop_all","sound","slicedToArray","err","SpawnSizes","load_spawn","_x","_x2","_load_spawn","api","fs","spawn","regenerator_default","includes","byteLength","axios","request","process","responseType","onDownloadProgress","onProgress","text","loaded","total","headers","Cache-Control","slice","buffer_reader","classCallCheck","pos","createClass","key","read8","String","fromCharCode","toConsumableArray","size","read32","buffer_writer","write8","charCodeAt","write32","rest","RejectionReason","JOIN_SUCCESS","JOIN_ALREADY_IN_GAME","JOIN_GAME_NOT_FOUND","JOIN_INCORRECT_PASSWORD","JOIN_VERSION_MISMATCH","JOIN_GAME_FULL","CREATE_GAME_EXISTS","read_packet","types","cls","values","find","packet","read","packet_size","write_packet","write","make_batch","count","read16","packets","push","reduce","sum","_ref","writer","write16","server_packet","info","version","_ref4","game_list","games","read_str","_ref5","_ref6","_ref7","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_ref9","write_str","join_accept","cookie","index","seed","difficulty","_ref10","join_reject","reason","_ref11","_ref12","disconnect","_ref13","message","payload","read_buf","_ref14","_ref15","write_buf","turn","_ref16","batch","client_packet","_ref17","create_game","password","_ref18","_ref19","join_game","_ref20","_ref21","leave_game","drop_player","_ref22","_ref23","_ref24","_ref25","PeerID","Options","host","port","secure","webrtc_server","onMessage","onClose","_this","peer","Peer","on","conn","onConnect","players","myplr","floor","random","onError","off","onOpen","setTimeout","_this2","_read_packet","pkt","send","handle","drop","mask","destroy","close","webrtc_client","_this3","pending","needUnreg","unreg","clearTimeout","timeout","_read_packet2","webrtc_open","server","client","_read_packet3","onRender","ctx","bitmap","images","clip","belt","transferFromImageBitmap","x","y","w","h","image","createImageData","putImageData","save","font","x0","y0","x1","y1","beginPath","rect","str","color","r","g","b","fillStyle","fillText","restore","updateBelt","audio","mpq","offscreen","canvas","getContext","alpha","worker","packetQueue","webrtc","addEventListener","action","func","_len","params","Array","_key","postMessage","_iteratorNormalCompletion3","_didIteratorError3","_iteratorError3","_step3","_iterator3","_ref8","setCursorPos","openKeyboard","stack","onExit","setCurrentSave","_iteratorNormalCompletion4","_didIteratorError4","_iteratorError4","_step4","_iterator4","transfer","_iteratorNormalCompletion5","_didIteratorError5","_iteratorError5","_step5","_iterator5","setInterval","load_game","do_load_game","reportLink","retail","searchParams","split","map","line","join","userAgent","toString","ReactGA","initialize","pageview","TOUCH_MOVE","TOUCH_RMB","keyboardRule","styleSheets","sheet","cssRules","rule","CSSRule","MEDIA_RULE","conditionText","sub","selectorText","findKeyboardRule","Link","children","props","objectWithoutProperties","react_default","assign","target","rel","App","possibleConstructorReturn","getPrototypeOf","started","loading","dropping","has_spawn","cursorPos","touchControls","touchButtons","touchCtx","touchMods","touchBelt","maxKeyboard","onDrop","dataTransfer","items","kind","getAsFile","getDropFile","preventDefault","setState","onDragEnter","setDropping","onDragOver","isDropFile","onDragLeave","downloadSave","saveName","stopPropagation","onResize","exitPointerLock","onPointerLockChange","screen","innerHeight","height","pointerLocked","game","onMouseMove","_this$mousePos","mousePos","eventMods","onMouseDown","keyboard","element","classList","_this$mousePos2","requestPointerLock","mouseButton","onMouseUp","_this$mousePos3","onKeyDown","keyCode","showKeyboard","clearKeySel","onMenu","onKeyUp","onKeyboard","onKeyboardInner","onKeyboardBlur","parseFile","touchButton","touchCanvas","onTouchStart","blur","updateTouchButton","touches","_this$mousePos4","onTouchMove","_this$mousePos5","onTouchEnd","prevTc","_this$mousePos6","setTouchMod","fullscreenElement","requestFullscreen","setCanvas","setElement","setKeyboard","setTouch0","setTouch_","bind","assertThisInitialized","setTouch1","setTouch2","setTouch3","setTouchBelt_","setTouch4","setTouch5","inc","max","mapStackTrace","left","toFixed","top","width","add","style","focus","transform","keyboardNum","_this4","getBoundingClientRect","right","bottom","progress","reload","idx","slot","display","drawImage","used","Set","has","drawBelt","_this5","removeEventListener","event","category","passive","capture","alert","pointerLockElement","mozPointerLockElement","min","movementX","movementY","clientX","clientY","round","button","shiftKey","ctrlKey","altKey","len","setSelectionRange","flags","valid","substring","maxValue","parseInt","use","toggle","now","performance","beltTime","release","_this6","touchOther","btn","_loop","identifier","stick","t","panPos","v","indexOf","original","_ret","dx","dy","step","offsetHeight","abs","_this7","_this$state","className","classNames","touch","ref","active","onChange","onBlur","spellCheck","App_Link","href","onClick","htmlFor","accept","React","Component","ReactDOM","render","src_App_0","getElementById","origin","fetch","response","contentType","status","ready","unregister","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.bfb40944.chunk.js","sourcesContent":["import IdbKvStore from 'idb-kv-store';\r\n\r\n/*const importStorage = () => new Promise((resolve, reject) => {\r\n let done = false;\r\n const frame = document.createElement('iframe');\r\n window.addEventListener('message', ({data}) => {\r\n if (data.method === 'storage' && !done) {\r\n done = true;\r\n resolve(data.files);\r\n frame.contentWindow.postMessage({method: 'clear'}, '*');\r\n }\r\n });\r\n frame.addEventListener('load', () => {\r\n frame.contentWindow.postMessage({method: 'transfer'}, '*');\r\n });\r\n frame.addEventListener('error', () => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n });\r\n frame.src = \"https://diablo.rivsoft.net/storage.html\";\r\n frame.style.display = \"none\";\r\n document.body.appendChild(frame);\r\n setTimeout(() => {\r\n if (!done) {\r\n done = true;\r\n resolve(null);\r\n }\r\n }, 10000);\r\n});*/\r\n\r\nasync function downloadFile(store, name) {\r\n const file = await store.get(name.toLowerCase());\r\n if (file) {\r\n const blob = new Blob([file], {type: 'binary/octet-stream'});\r\n const url = URL.createObjectURL(blob);\r\n const lnk = document.createElement('a');\r\n lnk.setAttribute('href', url);\r\n lnk.setAttribute('download', name);\r\n document.body.appendChild(lnk);\r\n lnk.click();\r\n document.body.removeChild(lnk);\r\n URL.revokeObjectURL(url);\r\n } else {\r\n console.error(`File ${name} does not exist`);\r\n }\r\n}\r\n\r\nasync function downloadSaves(store) {\r\n for (let name of await store.keys()) {\r\n if (name.match(/\\.sv$/i)) {\r\n downloadFile(store, name);\r\n }\r\n }\r\n}\r\n\r\nconst readFile = file => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = () => reject(reader.error);\r\n reader.onabort = () => reject();\r\n reader.readAsArrayBuffer(file);\r\n});\r\nasync function uploadFile(store, files, file) {\r\n const data = new Uint8Array(await readFile(file));\r\n files.set(file.name.toLowerCase(), data);\r\n return store.set(file.name.toLowerCase(), data);\r\n}\r\n\r\nexport default async function create_fs(load) {\r\n try {\r\n const store = new IdbKvStore('diablo_fs');\r\n const files = new Map();\r\n for (let [name, data] of Object.entries(await store.json())) {\r\n files.set(name, data);\r\n }\r\n /*if (load) {\r\n const files = await importStorage();\r\n if (files) {\r\n for (let [name, data] of files) {\r\n files.set(name, data);\r\n store.set(name, data);\r\n }\r\n }\r\n }*/\r\n window.DownloadFile = name => downloadFile(store, name);\r\n window.DownloadSaves = () => downloadSaves(store);\r\n return {\r\n files,\r\n update: (name, data) => store.set(name, data),\r\n delete: name => store.remove(name),\r\n clear: () => store.clear(),\r\n download: name => downloadFile(store, name),\r\n upload: file => uploadFile(store, files, file),\r\n };\r\n } catch (e) {\r\n window.DownloadFile = () => console.error('IndexedDB is not supported');\r\n window.DownloadSaves = () => console.error('IndexedDB is not supported');\r\n return {\r\n files: new Map(),\r\n update: () => Promise.resolve(),\r\n delete: () => Promise.resolve(),\r\n clear: () => Promise.resolve(),\r\n download: () => Promise.resolve(),\r\n upload: () => Promise.resolve(),\r\n };\r\n } \r\n}\r\n","module.exports = function() {\n return new Worker(__webpack_public_path__ + \"ad404bc1f12303f5575d.worker.js\");\n};","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 63;","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","function no_sound() {\r\n return {\r\n create_sound: () => 0,\r\n duplicate_sound: () => 0,\r\n play_sound: () => undefined,\r\n set_volume: () => undefined,\r\n stop_sound: () => undefined,\r\n delete_sound: () => undefined,\r\n };\r\n}\r\n\r\nfunction decodeAudioData(context, buffer) {\r\n return new Promise((resolve, reject) => {\r\n context.decodeAudioData(buffer, resolve, reject);\r\n });\r\n}\r\n\r\nexport default function init_sound() {\r\n const AudioContext = window.AudioContext || window.webkitAudioContext;\r\n const StereoPannerNode = window.StereoPannerNode;\r\n if (!AudioContext) {\r\n return no_sound();\r\n }\r\n\r\n let context = null;\r\n try {\r\n context = new AudioContext();\r\n } catch (e) {\r\n }\r\n const sounds = new Map();\r\n\r\n return {\r\n create_sound_raw(id, data, length, channels, rate) {\r\n if (!context) {\r\n return;\r\n }\r\n const buffer = context.createBuffer(channels, length, rate);\r\n for (let i = 0; i < channels; ++i) {\r\n buffer.getChannelData(i).set(data.subarray(i * length, i * length + length));\r\n }\r\n sounds.set(id, {\r\n buffer: Promise.resolve(buffer),\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n create_sound(id, data) {\r\n if (!context) {\r\n return;\r\n }\r\n const buffer = decodeAudioData(context, data.buffer);\r\n sounds.set(id, {\r\n buffer,\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n duplicate_sound(id, srcId) {\r\n if (!context) {\r\n return;\r\n }\r\n const src = sounds.get(srcId);\r\n if (!src) {\r\n return;\r\n }\r\n sounds.set(id, {\r\n buffer: src.buffer,\r\n gain: context.createGain(),\r\n panner: StereoPannerNode && new StereoPannerNode(context, {pan: 0}),\r\n });\r\n },\r\n play_sound(id, volume, pan, loop) {\r\n const src = sounds.get(id);\r\n if (src) {\r\n if (src.source) {\r\n src.source.then(source => source.stop());\r\n }\r\n src.gain.gain.value = Math.pow(2.0, volume / 1000.0);\r\n const relVolume = Math.pow(2.0, pan / 1000.0);\r\n if (src.panner) {\r\n src.panner.pan.value = 1.0 - 2.0 / (1.0 + relVolume);\r\n }\r\n src.source = src.buffer.then(buffer => {\r\n const source = context.createBufferSource();\r\n source.buffer = buffer;\r\n source.loop = !!loop;\r\n let node = source.connect(src.gain);\r\n if (src.panner) {\r\n node = node.connect(src.panner);\r\n }\r\n node.connect(context.destination);\r\n source.start();\r\n return source;\r\n });\r\n }\r\n },\r\n set_volume(id, volume) {\r\n const src = sounds.get(id);\r\n if (src) {\r\n src.gain.gain.value = Math.pow(2.0, volume / 1000.0);\r\n }\r\n },\r\n stop_sound(id) {\r\n const src = sounds.get(id);\r\n if (src && src.source) {\r\n src.source.then(source => source.stop());\r\n delete src.source;\r\n }\r\n },\r\n delete_sound(id) {\r\n const src = sounds.get(id);\r\n if (src && src.source) {\r\n src.source.then(source => source.stop());\r\n }\r\n sounds.delete(id);\r\n },\r\n\r\n stop_all() {\r\n for (let [, sound] of sounds) {\r\n if (sound.source) {\r\n sound.source.then(source => source.stop());\r\n }\r\n }\r\n sounds.clear();\r\n context = null;\r\n }\r\n };\r\n}\r\n","import axios from 'axios';\r\n\r\nconst SpawnSizes = [50274091, 25830791];\r\n\r\nexport { SpawnSizes };\r\n\r\nexport default async function load_spawn(api, fs) {\r\n let file = fs.files.get('spawn.mpq');\r\n if (file && !SpawnSizes.includes(file.byteLength)) {\r\n fs.files.delete('spawn.mpq');\r\n await fs.delete('spawn.mpq');\r\n file = null;\r\n }\r\n if (!file) {\r\n const spawn = await axios.request({\r\n url: process.env.PUBLIC_URL + '/spawn.mpq',\r\n responseType: 'arraybuffer',\r\n onDownloadProgress: e => {\r\n if (api.onProgress) {\r\n api.onProgress({text: 'Downloading...', loaded: e.loaded, total: e.total || SpawnSizes[1]});\r\n }\r\n },\r\n headers: {\r\n 'Cache-Control': 'max-age=31536000'\r\n }\r\n });\r\n if (!SpawnSizes.includes(spawn.data.byteLength)) {\r\n throw Error(\"Invalid spawn.mpq size. Try clearing cache and refreshing the page.\");\r\n }\r\n const data = new Uint8Array(spawn.data);\r\n fs.files.set('spawn.mpq', data);\r\n fs.update('spawn.mpq', data.slice());\r\n }\r\n return fs;\r\n}\r\n","export class buffer_reader {\r\n constructor(buffer) {\r\n this.buffer = (buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer));\r\n this.pos = 0;\r\n }\r\n done() {\r\n return this.pos === this.buffer.byteLength;\r\n }\r\n read8() {\r\n if (this.pos >= this.buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n return this.buffer[this.pos++];\r\n }\r\n read16() {\r\n const {pos, buffer} = this;\r\n if (pos + 2 > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = buffer[pos] | (buffer[pos + 1] << 8);\r\n this.pos += 2;\r\n return result;\r\n }\r\n read32() {\r\n const {pos, buffer} = this;\r\n if (pos + 4 > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = buffer[pos] | (buffer[pos + 1] << 8) | (buffer[pos + 2] << 16) | (buffer[pos + 3] << 24);\r\n this.pos += 4;\r\n return result;\r\n }\r\n read_str() {\r\n const length = this.read8();\r\n const {pos, buffer} = this;\r\n if (pos + length > buffer.byteLength) {\r\n throw Error('packet too small');\r\n }\r\n const result = String.fromCharCode(...buffer.subarray(pos, pos + length));\r\n this.pos += length;\r\n return result;\r\n }\r\n read_buf() {\r\n const size = this.read32();\r\n const result = this.buffer.subarray(this.pos, this.pos + size);\r\n this.pos += size;\r\n return result;\r\n }\r\n}\r\nexport class buffer_writer {\r\n constructor(length) {\r\n this.buffer = new Uint8Array(length);\r\n this.pos = 0;\r\n }\r\n get result() {\r\n return this.buffer.buffer;\r\n }\r\n write8(value) {\r\n this.buffer[this.pos++] = value;\r\n return this;\r\n }\r\n write16(value) {\r\n const {pos, buffer} = this;\r\n buffer[pos] = value;\r\n buffer[pos + 1] = value >> 8;\r\n this.pos += 2;\r\n return this;\r\n }\r\n write32(value) {\r\n const {pos, buffer} = this;\r\n buffer[pos] = value;\r\n buffer[pos + 1] = value >> 8;\r\n buffer[pos + 2] = value >> 16;\r\n buffer[pos + 3] = value >> 24;\r\n this.pos += 4;\r\n return this;\r\n }\r\n write_str(value) {\r\n const length = value.length;\r\n this.write8(length);\r\n const {pos, buffer} = this;\r\n for (let i = 0; i < length; ++i) {\r\n buffer[pos + i] = value.charCodeAt(i);\r\n }\r\n this.pos += length;\r\n return this;\r\n }\r\n rest(value) {\r\n this.buffer.set(value, this.pos);\r\n this.pos += value.byteLength;\r\n return this;\r\n }\r\n write_buf(value) {\r\n this.write32(value.byteLength);\r\n this.rest(value);\r\n return this;\r\n }\r\n}\r\n\r\nexport const RejectionReason = {\r\n JOIN_SUCCESS: 0x00,\r\n JOIN_ALREADY_IN_GAME: 0x01,\r\n JOIN_GAME_NOT_FOUND: 0x02,\r\n JOIN_INCORRECT_PASSWORD: 0x03,\r\n JOIN_VERSION_MISMATCH: 0x04,\r\n JOIN_GAME_FULL: 0x05,\r\n CREATE_GAME_EXISTS: 0x06,\r\n};\r\n\r\nexport function read_packet(reader, types) {\r\n const code = reader.read8();\r\n const cls = Object.values(types).find(cls => cls.code === code);\r\n if (!cls) {\r\n throw Error('invalid packet code');\r\n }\r\n return {type: cls, packet: cls.read(reader)};\r\n}\r\nexport function packet_size(type, packet) {\r\n return (typeof type.size === \"function\" ? type.size(packet) : type.size) + 1;\r\n}\r\nexport function write_packet(type, packet) {\r\n const size = packet_size(type, packet);\r\n return type.write(new buffer_writer(size).write8(type.code), packet).result;\r\n}\r\n\r\nexport function make_batch(types) {\r\n return {\r\n code: 0x00,\r\n read: reader => {\r\n const count = reader.read16();\r\n const packets = [];\r\n for (let i = 0; i < count; ++i) {\r\n packets.push(read_packet(reader, types()));\r\n }\r\n return packets;\r\n },\r\n size: packets => packets.reduce((sum, {type, packet}) => sum + packet_size(type, packet), 2),\r\n write: (writer, packets) => {\r\n writer.write16(packets.length);\r\n for (let {type, packet} of packets) {\r\n type.write(writer.write8(type.code), packet);\r\n }\r\n return writer;\r\n },\r\n };\r\n}\r\n\r\nexport const server_packet = {\r\n info: {\r\n code: 0x32,\r\n read: reader => ({version: reader.read32()}),\r\n size: 4,\r\n write: (writer, {version}) => writer.write32(version),\r\n },\r\n game_list: {\r\n code: 0x21,\r\n read: reader => {\r\n const count = reader.read16();\r\n const games = [];\r\n for (let i = 0; i < count; ++i) {\r\n games.push({type: reader.read32(), name: reader.read_str()});\r\n }\r\n return {games};\r\n },\r\n size: ({games}) => games.reduce((sum, {name}) => sum + 5 + name.length, 2),\r\n write: (writer, {games}) => {\r\n writer.write16(games.length);\r\n for (let {type, name} of games) {\r\n writer.write32(type);\r\n writer.write_str(name);\r\n }\r\n return writer;\r\n },\r\n },\r\n join_accept: {\r\n code: 0x12,\r\n read: reader => ({cookie: reader.read32(), index: reader.read8(), seed: reader.read32(), difficulty: reader.read32()}),\r\n size: 13,\r\n write: (writer, {cookie, index, seed, difficulty}) => writer.write32(cookie).write8(index).write32(seed).write32(difficulty),\r\n },\r\n join_reject: {\r\n code: 0x15,\r\n read: reader => ({cookie: reader.read32(), reason: reader.read8()}),\r\n size: 5,\r\n write: (writer, {cookie, reason}) => writer.write32(cookie).write8(reason),\r\n },\r\n connect: {\r\n code: 0x13,\r\n read: reader => ({id: reader.read8()}),\r\n size: 1,\r\n write: (writer, {id}) => writer.write8(id),\r\n },\r\n disconnect: {\r\n code: 0x14,\r\n read: reader => ({id: reader.read8(), reason: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, reason}) => writer.write8(id).write32(reason),\r\n },\r\n message: {\r\n code: 0x01,\r\n read: reader => ({id: reader.read8(), payload: reader.read_buf()}),\r\n size: ({payload}) => 5 + payload.byteLength,\r\n write: (writer, {id, payload}) => writer.write8(id).write_buf(payload),\r\n },\r\n turn: {\r\n code: 0x02,\r\n read: reader => ({id: reader.read8(), turn: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, turn}) => writer.write8(id).write32(turn),\r\n },\r\n batch: make_batch(() => server_packet),\r\n};\r\n\r\nexport const client_packet = {\r\n info: {\r\n code: 0x31,\r\n read: reader => ({version: reader.read32()}),\r\n size: 4,\r\n write: (writer, {version}) => writer.write32(version),\r\n },\r\n game_list: {\r\n code: 0x21,\r\n read: () => ({}),\r\n size: 0,\r\n write: writer => writer,\r\n },\r\n create_game: {\r\n code: 0x22,\r\n read: reader => ({cookie: reader.read32(), name: reader.read_str(), password: reader.read_str(), difficulty: reader.read32()}),\r\n size: ({name, password}) => 10 + name.length + password.length,\r\n write: (writer, {cookie, name, password, difficulty}) => writer.write32(cookie).write_str(name).write_str(password).write32(difficulty),\r\n },\r\n join_game: {\r\n code: 0x23,\r\n read: reader => ({cookie: reader.read32(), name: reader.read_str(), password: reader.read_str()}),\r\n size: ({name, password}) => 6 + name.length + password.length,\r\n write: (writer, {cookie, name, password}) => writer.write32(cookie).write_str(name).write_str(password),\r\n },\r\n leave_game: {\r\n code: 0x24,\r\n read: () => ({}),\r\n size: 0,\r\n write: writer => writer,\r\n },\r\n drop_player: {\r\n code: 0x03,\r\n read: reader => ({id: reader.read8(), reason: reader.read32()}),\r\n size: 5,\r\n write: (writer, {id, reason}) => writer.write8(id).write32(reason),\r\n },\r\n message: {\r\n code: 0x01,\r\n read: reader => ({id: reader.read8(), payload: reader.read_buf()}),\r\n size: ({payload}) => 5 + payload.byteLength,\r\n write: (writer, {id, payload}) => writer.write8(id).write_buf(payload),\r\n },\r\n turn: {\r\n code: 0x02,\r\n read: reader => ({turn: reader.read32()}),\r\n size: 4,\r\n write: (writer, {turn}) => writer.write32(turn),\r\n },\r\n batch: make_batch(() => server_packet),\r\n};\r\n","import Peer from 'peerjs';\r\nimport { buffer_reader, read_packet, write_packet, client_packet, server_packet, RejectionReason } from './packet';\r\n\r\n/*function log_packet(data, type) {\r\n const reader = new buffer_reader(data);\r\n const id = reader.read8();\r\n for (let [name, {code, read}] of Object.entries(type)) {\r\n if (code === id && (name !== 'message' && name !== 'turn')) {\r\n console.log(`${type === client_packet ? 'client_packet' : 'server_packet'}.${name} ${JSON.stringify(read(reader))}`);\r\n }\r\n }\r\n}*/\r\n\r\nconst PeerID = name => `diabloweb_${name}`;\r\nconst Options = {host: 'diablo.rivsoft.net', port: 443, secure: true};\r\nconst MAX_PLRS = 4;\r\n\r\nclass webrtc_server {\r\n constructor(version, {cookie, name, password, difficulty}, onMessage, onClose) {\r\n this.version = version;\r\n this.name = name;\r\n this.password = password;\r\n this.difficulty = difficulty;\r\n this.onMessage = onMessage;\r\n this.onClose = onClose;\r\n\r\n this.peer = new Peer(PeerID(name), Options);\r\n this.peer.on('connection', conn => this.onConnect(conn));\r\n this.players = [];\r\n this.myplr = 0;\r\n\r\n this.seed = Math.floor(Math.random() * Math.pow(2, 32));\r\n\r\n const onError = () => {\r\n onMessage(write_packet(server_packet.join_reject, {cookie, reason: RejectionReason.CREATE_GAME_EXISTS}));\r\n onClose();\r\n this.peer.off('error', onError);\r\n this.peer.off('open', onOpen);\r\n };\r\n const onOpen = () => {\r\n //console.log('peer open');\r\n setTimeout(() => {\r\n onMessage(write_packet(server_packet.join_accept, {cookie, index: 0, seed: this.seed, difficulty}));\r\n onMessage(write_packet(server_packet.connect, {id: 0}));\r\n }, 0);\r\n this.peer.off('error', onError);\r\n this.peer.off('open', onOpen);\r\n };\r\n this.peer.on('error', onError);\r\n this.peer.on('open', onOpen);\r\n\r\n //this.peer.on('error', err => console.log('peer error:', err));\r\n }\r\n\r\n onConnect(conn) {\r\n //conn.on('error', err => console.log('conn error:', err));\r\n //console.log('conn open');\r\n const peer = {conn};\r\n conn.on('data', packet => {\r\n const reader = new buffer_reader(packet);\r\n const {type, packet: pkt} = read_packet(reader, client_packet);\r\n switch (type.code) {\r\n case client_packet.info.code:\r\n peer.version = pkt.version;\r\n break;\r\n case client_packet.join_game.code:\r\n if (peer.version !== this.version) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_VERSION_MISMATCH}));\r\n } else if (pkt.name !== this.name) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_GAME_NOT_FOUND}));\r\n } else if (pkt.password !== this.password) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_INCORRECT_PASSWORD}));\r\n } else {\r\n let i = 1;\r\n while (i < MAX_PLRS && this.players[i]) {\r\n ++i;\r\n }\r\n if (i >= MAX_PLRS) {\r\n conn.send(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_GAME_FULL})); \r\n } else {\r\n this.players[i] = peer;\r\n peer.id = i;\r\n conn.send(write_packet(server_packet.join_accept, {cookie: pkt.cookie, index: i, seed: this.seed, difficulty: this.difficulty}));\r\n this.send(0xFF, write_packet(server_packet.connect, {id: i}));\r\n }\r\n }\r\n break;\r\n default:\r\n if (peer.id != null) {\r\n this.handle(peer.id, type.code, pkt);\r\n } else {\r\n return;\r\n }\r\n }\r\n if (!reader.done()) {\r\n throw Error('packet too large');\r\n }\r\n });\r\n conn.on('close', () => {\r\n //console.log('conn close');\r\n if (peer.id != null) {\r\n this.drop(peer.id, 0x40000006);\r\n }\r\n });\r\n }\r\n\r\n send(mask, pkt) {\r\n for (let i = 1; i < MAX_PLRS; ++i) {\r\n if ((mask & (1 << i)) && this.players[i]) {\r\n if (this.players[i].conn) {\r\n this.players[i].conn.send(pkt);\r\n }\r\n }\r\n }\r\n // self last since it will destroy the buffer\r\n if (mask & 1) {\r\n this.onMessage(pkt);\r\n }\r\n }\r\n\r\n drop(id, reason) {\r\n if (id === 0) {\r\n for (let i = 1; i < MAX_PLRS; ++i) {\r\n this.drop(i, 0x40000006);\r\n }\r\n this.onMessage(write_packet(server_packet.disconnect, {id, reason}));\r\n this.peer.destroy();\r\n this.onClose();\r\n } else if (this.players[id]) {\r\n this.send(0xFF, write_packet(server_packet.disconnect, {id, reason}));\r\n this.players[id].id = null;\r\n if (this.players[id].conn) {\r\n this.players[id].conn.close();\r\n }\r\n this.players[id] = null;\r\n }\r\n }\r\n\r\n handle(id, code, pkt) {\r\n switch (code) {\r\n case client_packet.leave_game.code:\r\n this.drop(id, 3);\r\n break;\r\n case client_packet.drop_player.code:\r\n this.drop(pkt.id, pkt.reason);\r\n break;\r\n case client_packet.message.code:\r\n this.send(pkt.id === 0xFF ? ~(1 << id) : (1 << pkt.id), write_packet(server_packet.message, {id, payload: pkt.payload}));\r\n break;\r\n case client_packet.turn.code:\r\n this.send(~(1 << id), write_packet(server_packet.turn, {id, turn: pkt.turn}));\r\n break;\r\n default:\r\n throw Error(`invalid packet ${code}`);\r\n }\r\n }\r\n}\r\n\r\nclass webrtc_client {\r\n pending = [];\r\n\r\n constructor(version, {cookie, name, password}, onMessage, onClose) {\r\n this.peer = new Peer(Options);\r\n this.conn = this.peer.connect(PeerID(name));\r\n\r\n let needUnreg = true;\r\n const unreg = () => {\r\n if (!needUnreg) {\r\n return;\r\n }\r\n needUnreg = false;\r\n this.peer.off('error', onError);\r\n this.conn.off('error', onError);\r\n this.conn.off('open', onOpen);\r\n clearTimeout(timeout);\r\n };\r\n const onError = () => {\r\n onMessage(write_packet(server_packet.join_reject, {cookie, reason: RejectionReason.JOIN_GAME_NOT_FOUND}));\r\n onClose();\r\n unreg();\r\n };\r\n const onOpen = () => {\r\n this.conn.send(write_packet(client_packet.info, {version}));\r\n this.conn.send(write_packet(client_packet.join_game, {cookie, name, password}));\r\n for (let pkt of this.pending) {\r\n this.conn.send(pkt);\r\n }\r\n this.pending = null;\r\n this.conn.off('open', onOpen);\r\n };\r\n const timeout = setTimeout(onError, 10000);\r\n this.peer.on('error', onError);\r\n this.conn.on('error', onError);\r\n this.conn.on('open', onOpen);\r\n\r\n //this.peer.on('error', err => console.log('peer error:', err));\r\n //this.conn.on('error', err => console.log('conn error:', err));\r\n\r\n this.conn.on('data', data => {\r\n unreg();\r\n const reader = new buffer_reader(data);\r\n const {type, packet: pkt} = read_packet(reader, server_packet);\r\n switch (type.code) {\r\n case server_packet.join_accept.code:\r\n this.myplr = pkt.index;\r\n break;\r\n case server_packet.join_reject.code:\r\n onClose();\r\n break;\r\n case server_packet.disconnect.code:\r\n if (pkt.id === 'myplr') {\r\n onClose();\r\n }\r\n break;\r\n default:\r\n }\r\n onMessage(data);\r\n });\r\n this.conn.on('close', data => {\r\n onClose();\r\n });\r\n }\r\n\r\n send(packet) {\r\n if (this.pending) {\r\n this.pending.push(packet);\r\n } else {\r\n this.conn.send(packet);\r\n }\r\n }\r\n}\r\n\r\nexport default function webrtc_open(onMessage) {\r\n let server = null, client = null;\r\n\r\n let version = 0;\r\n\r\n /*const prevMessage = onMessage;\r\n onMessage = data => {\r\n log_packet(data, server_packet);\r\n prevMessage(data);\r\n };*/\r\n\r\n return {\r\n send: function(packet) {\r\n //log_packet(packet, client_packet);\r\n const reader = new buffer_reader(packet);\r\n const {type, packet: pkt} = read_packet(reader, client_packet);\r\n switch (type.code) {\r\n case client_packet.info.code:\r\n version = pkt.version;\r\n break;\r\n case client_packet.create_game.code:\r\n if (server || client) {\r\n onMessage(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_ALREADY_IN_GAME}));\r\n } else {\r\n server = new webrtc_server(version, pkt, onMessage, () => server = null);\r\n }\r\n break;\r\n case client_packet.join_game.code:\r\n if (server || client) {\r\n onMessage(write_packet(server_packet.join_reject, {cookie: pkt.cookie, reason: RejectionReason.JOIN_ALREADY_IN_GAME}));\r\n } else {\r\n client = new webrtc_client(version, pkt, onMessage, () => client = null);\r\n }\r\n break;\r\n default:\r\n if (server) {\r\n server.handle(0, type.code, pkt);\r\n if (type.code === client_packet.leave_game.code) {\r\n server = null;\r\n }\r\n } else if (client) {\r\n client.send(packet);\r\n if (type.code === client_packet.leave_game.code) {\r\n client = null;\r\n }\r\n return;\r\n } else if (type.code !== client_packet.leave_game.code) {\r\n throw Error(`invalid packet ${type.code}`);\r\n }\r\n }\r\n if (!reader.done()) {\r\n throw Error('packet too large');\r\n }\r\n },\r\n };\r\n}\r\n","import Worker from './game.worker.js';\r\nimport init_sound from './sound';\r\nimport load_spawn from './load_spawn';\r\nimport webrtc_open from './webrtc';\r\n\r\nfunction onRender(api, ctx, {bitmap, images, text, clip, belt}) {\r\n if (bitmap) {\r\n ctx.transferFromImageBitmap(bitmap);\r\n } else {\r\n for (let {x, y, w, h, data} of images) {\r\n const image = ctx.createImageData(w, h);\r\n image.data.set(data);\r\n ctx.putImageData(image, x, y);\r\n }\r\n if (text.length) {\r\n ctx.save();\r\n ctx.font = 'bold 13px Times New Roman';\r\n if (clip) {\r\n const {x0, y0, x1, y1} = clip;\r\n ctx.beginPath();\r\n ctx.rect(x0, y0, x1 - x0, y1 - y0);\r\n ctx.clip();\r\n }\r\n for (let {x, y, text: str, color} of text) {\r\n const r = ((color >> 16) & 0xFF);\r\n const g = ((color >> 8) & 0xFF);\r\n const b = (color & 0xFF);\r\n ctx.fillStyle = `rgb(${r}, ${g}, ${b})`;\r\n ctx.fillText(str, x, y + 22);\r\n }\r\n ctx.restore();\r\n }\r\n }\r\n\r\n api.updateBelt(belt);\r\n}\r\n\r\nfunction testOffscreen() {\r\n return false;\r\n // This works but I couldn't see any performance difference, and support for 2D canvas in workers is very poor.\r\n // In this mode, instead of sending a batch of areas to draw back to the main thread, the worker does all drawing on its own and sends a complete bitmap object back.\r\n // However, this effectively clears the worker's canvas, so we need to redraw the whole frame every time, which defeats the performance gained from reduced copying.\r\n /*try {\r\n const canvas = document.createElement(\"canvas\");\r\n const offscreen = canvas.transferControlToOffscreen();\r\n const context = offscreen.getContext(\"2d\");\r\n return context != null;\r\n } catch (e) {\r\n return false;\r\n }*/\r\n}\r\n\r\nasync function do_load_game(api, audio, mpq, spawn) {\r\n const fs = await api.fs;\r\n if (spawn && !mpq) {\r\n await load_spawn(api, fs);\r\n }\r\n\r\n let context = null, offscreen = false;\r\n if (testOffscreen()) {\r\n context = api.canvas.getContext(\"bitmaprenderer\");\r\n offscreen = true;\r\n } else {\r\n context = api.canvas.getContext(\"2d\", {alpha: false});\r\n }\r\n return await new Promise((resolve, reject) => {\r\n try {\r\n const worker = new Worker();\r\n\r\n let packetQueue = [];\r\n const webrtc = webrtc_open(data => {\r\n packetQueue.push(data);\r\n });\r\n\r\n worker.addEventListener(\"message\", ({data}) => {\r\n switch (data.action) {\r\n case \"loaded\":\r\n resolve((func, ...params) => worker.postMessage({action: \"event\", func, params}));\r\n break;\r\n case \"render\":\r\n onRender(api, context, data.batch);\r\n break;\r\n case \"audio\":\r\n audio[data.func](...data.params);\r\n break;\r\n case \"audioBatch\":\r\n for (let {func, params} of data.batch) {\r\n audio[func](...params);\r\n }\r\n break;\r\n case \"fs\":\r\n fs[data.func](...data.params);\r\n break;\r\n case \"cursor\":\r\n api.setCursorPos(data.x, data.y);\r\n break;\r\n case \"keyboard\":\r\n api.openKeyboard(data.rect);\r\n break;\r\n case \"error\":\r\n audio.stop_all();\r\n api.onError(data.error, data.stack);\r\n break;\r\n case \"failed\":\r\n reject(Error(data.stack || data.error));\r\n break;\r\n case \"progress\":\r\n api.onProgress({text: data.text, loaded: data.loaded, total: data.total});\r\n break;\r\n case \"exit\":\r\n api.onExit();\r\n break;\r\n case \"current_save\":\r\n api.setCurrentSave(data.name);\r\n break;\r\n case \"packet\":\r\n webrtc.send(data.buffer);\r\n break;\r\n case \"packetBatch\":\r\n for (let packet of data.batch) {\r\n webrtc.send(packet);\r\n }\r\n break;\r\n default:\r\n }\r\n }); \r\n const transfer= [];\r\n for (let [, file] of fs.files) {\r\n transfer.push(file.buffer);\r\n }\r\n worker.postMessage({action: \"init\", files: fs.files, mpq, spawn, offscreen}, transfer);\r\n setInterval(() => {\r\n if (packetQueue.length) {\r\n worker.postMessage({action: \"packetBatch\", batch: packetQueue}, packetQueue);\r\n packetQueue.length = 0;\r\n }\r\n }, 20);\r\n delete fs.files;\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n}\r\n\r\nexport default function load_game(api, mpq, spawn) {\r\n const audio = init_sound();\r\n return do_load_game(api, audio, mpq, spawn);\r\n}\r\n","import React from 'react';\r\nimport './App.scss';\r\nimport classNames from 'classnames';\r\nimport ReactGA from 'react-ga';\r\n\r\nimport { mapStackTrace } from 'sourcemapped-stacktrace';\r\n\r\nimport create_fs from './fs';\r\nimport load_game from './api/loader';\r\nimport { SpawnSizes } from './api/load_spawn';\r\n\r\nimport Peer from 'peerjs';\r\n\r\nwindow.Peer = Peer;\r\n\r\nif (process.env.NODE_ENV === 'production') {\r\n ReactGA.initialize('UA-43123589-6');\r\n ReactGA.pageview('/');\r\n}\r\n\r\nfunction reportLink(e, retail) {\r\n const message = e.stack || e.message || \"Unknown error\";\r\n const url = new URL(\"https://github.com/d07RiV/diabloweb/issues/new\");\r\n url.searchParams.set(\"body\",\r\n`**Description:**\r\n[Please describe what you were doing before the error occurred]\r\n\r\n**App version:**\r\nDiabloWeb ${process.env.VERSION} (${retail ? 'Retail' : 'Shareware'})\r\n\r\n**Error message:**\r\n \r\n${message.split(\"\\n\").map(line => \" \" + line).join(\"\\n\")}\r\n\r\n**User agent:**\r\n\r\n ${navigator.userAgent}\r\n\r\n**Save file:**\r\n[Please attach the save file, if applicable. The error box should have a link to download the current save you were playing; alternatively, you can open dev console on the game page (F12) and type in ${\"`DownloadSaves()`\"}]\r\n`);\r\n return url.toString();\r\n}\r\n\r\nfunction isDropFile(e) {\r\n if (e.dataTransfer.items) {\r\n for (let i = 0; i < e.dataTransfer.items.length; ++i) {\r\n if (e.dataTransfer.items[i].kind === \"file\") {\r\n return true;\r\n }\r\n }\r\n } if (e.dataTransfer.files.length) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction getDropFile(e) {\r\n if (e.dataTransfer.items) {\r\n for (let i = 0; i < e.dataTransfer.items.length; ++i) {\r\n if (e.dataTransfer.items[i].kind === \"file\") {\r\n return e.dataTransfer.items[i].getAsFile();\r\n }\r\n }\r\n } if (e.dataTransfer.files.length) {\r\n return e.dataTransfer.files[0];\r\n }\r\n}\r\n\r\nconst TOUCH_MOVE = 0;\r\nconst TOUCH_RMB = 1;\r\nconst TOUCH_SHIFT = 2;\r\n\r\nfunction findKeyboardRule() {\r\n for (let sheet of document.styleSheets) {\r\n for (let rule of sheet.cssRules) {\r\n if (rule.type === CSSRule.MEDIA_RULE && rule.conditionText === '(min-aspect-ratio: 3/1)') {\r\n for (let sub of rule.cssRules) {\r\n if (sub.selectorText === '.App.keyboard .Body .inner') {\r\n return sub;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\nlet keyboardRule = null;\r\ntry {\r\n keyboardRule = findKeyboardRule();\r\n} catch (e) {\r\n}\r\n\r\nconst Link = ({children, ...props}) => {children};\r\n\r\nclass App extends React.Component {\r\n files = new Map();\r\n state = {started: false, loading: false, dropping: 0, has_spawn: false};\r\n cursorPos = {x: 0, y: 0};\r\n\r\n touchControls = false;\r\n touchButtons = [null, null, null, null, null, null];\r\n touchCtx = [null, null, null, null, null, null];\r\n touchMods = [false, false, false, false, false, false];\r\n touchBelt = [-1, -1, -1, -1, -1, -1];\r\n maxKeyboard = 0;\r\n\r\n fs = create_fs(true);\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.setTouch0 = this.setTouch_.bind(this, 0);\r\n this.setTouch1 = this.setTouch_.bind(this, 1);\r\n this.setTouch2 = this.setTouch_.bind(this, 2);\r\n this.setTouch3 = this.setTouchBelt_.bind(this, 3);\r\n this.setTouch4 = this.setTouchBelt_.bind(this, 4);\r\n this.setTouch5 = this.setTouchBelt_.bind(this, 5);\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener(\"drop\", this.onDrop, true);\r\n document.addEventListener(\"dragover\", this.onDragOver, true);\r\n document.addEventListener(\"dragenter\", this.onDragEnter, true);\r\n document.addEventListener(\"dragleave\", this.onDragLeave, true);\r\n\r\n this.fs.then(fs => {\r\n const spawn = fs.files.get('spawn.mpq');\r\n if (spawn && SpawnSizes.includes(spawn.byteLength)) {\r\n this.setState({has_spawn: true});\r\n }\r\n });\r\n }\r\n\r\n onDrop = e => {\r\n const file = getDropFile(e);\r\n if (file) {\r\n e.preventDefault();\r\n this.start(file);\r\n }\r\n this.setState({dropping: 0});\r\n }\r\n onDragEnter = e => {\r\n e.preventDefault();\r\n this.setDropping(1);\r\n }\r\n onDragOver = e => {\r\n if (isDropFile(e)) {\r\n e.preventDefault();\r\n }\r\n }\r\n onDragLeave = e => {\r\n this.setDropping(-1);\r\n }\r\n setDropping(inc) {\r\n this.setState(({dropping}) => ({dropping: Math.max(dropping + inc, 0)}));\r\n }\r\n\r\n onError(message, stack) {\r\n if (stack) {\r\n mapStackTrace(stack, stack => {\r\n this.setState(({error}) => !error && {error: {message, stack: stack.join(\"\\n\")}});\r\n });\r\n } else {\r\n this.setState(({error}) => !error && {error: {message}});\r\n }\r\n }\r\n\r\n openKeyboard(rect) {\r\n if (rect) {\r\n this.showKeyboard = {\r\n left: `${(100 * (rect[0] - 10) / 640).toFixed(2)}%`,\r\n top: `${(100 * (rect[1] - 10) / 480).toFixed(2)}%`,\r\n width: `${(100 * (rect[2] - rect[0] + 20) / 640).toFixed(2)}%`,\r\n height: `${(100 * (rect[3] - rect[1] + 20) / 640).toFixed(2)}%`,\r\n };\r\n this.maxKeyboard = rect[4];\r\n this.element.classList.add(\"keyboard\");\r\n Object.assign(this.keyboard.style, this.showKeyboard);\r\n this.keyboard.focus();\r\n if (keyboardRule) {\r\n keyboardRule.style.transform = `translate(-50%, ${(-(rect[1] + rect[3]) * 56.25 / 960).toFixed(2)}vw)`;\r\n }\r\n } else {\r\n this.showKeyboard = false;\r\n this.element.classList.remove(\"keyboard\");\r\n this.keyboard.blur();\r\n this.keyboard.value = \"\";\r\n this.keyboardNum = 0;\r\n }\r\n }\r\n\r\n setCursorPos(x, y) {\r\n const rect = this.canvas.getBoundingClientRect();\r\n this.cursorPos = {\r\n x: rect.left + (rect.right - rect.left) * x / 640,\r\n y: rect.top + (rect.bottom - rect.top) * y / 480,\r\n };\r\n setTimeout(() => {\r\n this.game(\"DApi_Mouse\", 0, 0, 0, x, y);\r\n });\r\n }\r\n\r\n onProgress(progress) {\r\n this.setState({progress});\r\n }\r\n\r\n onExit() {\r\n if (!this.state.error) {\r\n window.location.reload();\r\n }\r\n }\r\n\r\n setCurrentSave(name) {\r\n this.saveName = name;\r\n }\r\n downloadSave = e => {\r\n this.fs.then(fs => this.saveName && fs.download(this.saveName));\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }\r\n\r\n drawBelt(idx, slot) {\r\n if (!this.canvas) return;\r\n if (!this.touchButtons[idx]) {\r\n return;\r\n }\r\n this.touchBelt[idx] = slot;\r\n if (slot >= 0) {\r\n this.touchButtons[idx].style.display = \"block\";\r\n this.touchCtx[idx].drawImage(this.canvas, 205 + 29 * slot, 357, 28, 28, 0, 0, 28, 28);\r\n } else {\r\n this.touchButtons[idx].style.display = \"none\";\r\n }\r\n }\r\n\r\n updateBelt(belt) {\r\n if (belt) {\r\n const used = new Set();\r\n let pos = 3;\r\n for (let i = 0; i < belt.length && pos < 6; ++i) {\r\n if (belt[i] >= 0 && !used.has(belt[i])) {\r\n this.drawBelt(pos++, i);\r\n used.add(belt[i]);\r\n }\r\n }\r\n for (; pos < 6; ++pos) {\r\n this.drawBelt(pos, -1);\r\n }\r\n } else {\r\n this.drawBelt(3, -1);\r\n this.drawBelt(4, -1);\r\n this.drawBelt(5, -1);\r\n }\r\n }\r\n\r\n start(file) {\r\n if (file && file.name.match(/\\.sv$/i)) {\r\n this.fs.then(fs => fs.upload(file)).then(console.log(`Updated ${file.name}`));\r\n return;\r\n }\r\n if (file && !file.name.match(/\\.mpq$/i)) {\r\n window.alert('Please select an MPQ file. If you downloaded the installer from GoG, you will need to install it on PC and use the MPQ file from the installation folder.');\r\n return;\r\n }\r\n\r\n document.removeEventListener(\"drop\", this.onDrop, true);\r\n document.removeEventListener(\"dragover\", this.onDragOver, true);\r\n document.removeEventListener(\"dragenter\", this.onDragEnter, true);\r\n document.removeEventListener(\"dragleave\", this.onDragLeave, true);\r\n this.setState({dropping: 0});\r\n\r\n const retail = !!(file && file.name.match(/^diabdat\\.mpq$/i));\r\n if (process.env.NODE_ENV === 'production') {\r\n ReactGA.event({\r\n category: 'Game',\r\n action: retail ? 'Start Retail' : 'Start Shareware',\r\n });\r\n }\r\n\r\n this.setState({loading: true, retail});\r\n\r\n load_game(this, file, !retail).then(game => {\r\n this.game = game;\r\n\r\n document.addEventListener('mousemove', this.onMouseMove, true);\r\n document.addEventListener('mousedown', this.onMouseDown, true);\r\n document.addEventListener('mouseup', this.onMouseUp, true);\r\n document.addEventListener('keydown', this.onKeyDown, true);\r\n document.addEventListener('keyup', this.onKeyUp, true);\r\n document.addEventListener('contextmenu', this.onMenu, true);\r\n\r\n document.addEventListener('touchstart', this.onTouchStart, {passive: false, capture: true});\r\n document.addEventListener('touchmove', this.onTouchMove, {passive: false, capture: true});\r\n document.addEventListener('touchend', this.onTouchEnd, {passive: false, capture: true});\r\n\r\n document.addEventListener('pointerlockchange', this.onPointerLockChange);\r\n window.addEventListener('resize', this.onResize);\r\n\r\n this.setState({started: true});\r\n }, e => this.onError(e.message, e.stack));\r\n }\r\n\r\n pointerLocked() {\r\n return document.pointerLockElement === this.canvas || document.mozPointerLockElement === this.canvas;\r\n }\r\n\r\n mousePos(e) {\r\n const rect = this.canvas.getBoundingClientRect();\r\n if (this.pointerLocked()) {\r\n this.cursorPos.x = Math.max(rect.left, Math.min(rect.right, this.cursorPos.x + e.movementX));\r\n this.cursorPos.y = Math.max(rect.top, Math.min(rect.bottom, this.cursorPos.y + e.movementY));\r\n } else {\r\n this.cursorPos = {x: e.clientX, y: e.clientY};\r\n }\r\n return {\r\n x: Math.max(0, Math.min(Math.round((this.cursorPos.x - rect.left) / (rect.right - rect.left) * 640), 639)),\r\n y: Math.max(0, Math.min(Math.round((this.cursorPos.y - rect.top) / (rect.bottom - rect.top) * 480), 479)),\r\n };\r\n }\r\n\r\n mouseButton(e) {\r\n switch (e.button) {\r\n case 0: return 1;\r\n case 1: return 4;\r\n case 2: return 2;\r\n case 3: return 5;\r\n case 4: return 6;\r\n default: return 1;\r\n }\r\n }\r\n eventMods(e) {\r\n return ((e.shiftKey || this.touchMods[TOUCH_SHIFT]) ? 1 : 0) + (e.ctrlKey ? 2 : 0) + (e.altKey ? 4 : 0) + (e.touches ? 8 : 0);\r\n }\r\n\r\n onResize = () => {\r\n document.exitPointerLock();\r\n }\r\n\r\n onPointerLockChange = () => {\r\n if (window.screen && window.innerHeight === window.screen.height && !this.pointerLocked()) {\r\n // assume that the user pressed escape\r\n this.game(\"DApi_Key\", 0, 0, 27);\r\n this.game(\"DApi_Key\", 1, 0, 27);\r\n }\r\n }\r\n\r\n onMouseMove = e => {\r\n if (!this.canvas) return;\r\n const {x, y} = this.mousePos(e);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n e.preventDefault();\r\n }\r\n\r\n onMouseDown = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n }\r\n if (this.touchControls) {\r\n this.touchControls = false;\r\n this.element.classList.remove(\"touch\");\r\n }\r\n const {x, y} = this.mousePos(e);\r\n if (window.screen && window.innerHeight === window.screen.height) {\r\n // we're in fullscreen, let's get pointer lock!\r\n if (!this.pointerLocked()) {\r\n this.canvas.requestPointerLock();\r\n }\r\n }\r\n this.game(\"DApi_Mouse\", 1, this.mouseButton(e), this.eventMods(e), x, y);\r\n e.preventDefault();\r\n }\r\n\r\n onMouseUp = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n //return;\r\n }\r\n const {x, y} = this.mousePos(e);\r\n this.game(\"DApi_Mouse\", 2, this.mouseButton(e), this.eventMods(e), x, y);\r\n if (e.target !== this.keyboard) {\r\n e.preventDefault();\r\n }\r\n }\r\n\r\n onKeyDown = e => {\r\n if (!this.canvas) return;\r\n this.game(\"DApi_Key\", 0, this.eventMods(e), e.keyCode);\r\n if (!this.showKeyboard && (e.keyCode >= 32 && e.key.length === 1)) {\r\n this.game(\"DApi_Char\", e.key.charCodeAt(0));\r\n } else if (e.keyCode === 8 || e.keyCode === 13) {\r\n this.game(\"DApi_Char\", e.keyCode);\r\n }\r\n this.clearKeySel();\r\n if (!this.showKeyboard) {\r\n if (e.keyCode === 8 || e.keyCode === 9 || (e.keyCode >= 112 && e.keyCode <= 119)) {\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n onMenu = e => {\r\n e.preventDefault();\r\n }\r\n\r\n onKeyUp = e => {\r\n if (!this.canvas) return;\r\n this.game(\"DApi_Key\", 1, this.eventMods(e), e.keyCode);\r\n this.clearKeySel();\r\n }\r\n\r\n clearKeySel() {\r\n if (this.showKeyboard) {\r\n const len = this.keyboard.value.length;\r\n this.keyboard.setSelectionRange(len, len);\r\n }\r\n }\r\n\r\n onKeyboardInner(flags) {\r\n if (this.showKeyboard) {\r\n const text = this.keyboard.value;\r\n let valid;\r\n if (this.maxKeyboard > 0) {\r\n valid = (text.match(/[\\x20-\\x7E]/g) || []).join(\"\").substring(0, this.maxKeyboard);\r\n } else {\r\n const maxValue = -this.maxKeyboard;\r\n if (text.match(/^\\d*$/)) {\r\n this.keyboardNum = Math.min(text.length ? parseInt(text) : 0, maxValue);\r\n }\r\n valid = (this.keyboardNum ? this.keyboardNum.toString() : \"\");\r\n }\r\n if (text !== valid) {\r\n this.keyboard.value = valid;\r\n }\r\n this.clearKeySel();\r\n this.game(\"text\", valid, flags);\r\n }\r\n }\r\n onKeyboard = () => {\r\n this.onKeyboardInner(0);\r\n }\r\n onKeyboardBlur = () => {\r\n this.onKeyboardInner(1);\r\n }\r\n\r\n parseFile = e => {\r\n const files = e.target.files;\r\n if (files.length > 0) {\r\n this.start(files[0]);\r\n }\r\n }\r\n\r\n touchButton = null;\r\n touchCanvas = null;\r\n\r\n setTouchMod(index, value, use) {\r\n if (index < 3) {\r\n this.touchMods[index] = value;\r\n if (this.touchButtons[index]) {\r\n this.touchButtons[index].classList.toggle(\"active\", value);\r\n }\r\n } else if (use && this.touchBelt[index] >= 0) {\r\n const now = performance.now();\r\n if (!this.beltTime || now - this.beltTime > 750) {\r\n this.game(\"DApi_Char\", 49 + this.touchBelt[index]);\r\n this.beltTime = now;\r\n }\r\n }\r\n }\r\n\r\n updateTouchButton(touches, release) {\r\n let touchOther = null;\r\n if (!this.touchControls) {\r\n this.touchControls = true;\r\n this.element.classList.add(\"touch\");\r\n }\r\n const btn = this.touchButton;\r\n for (let {target, identifier, clientX, clientY} of touches) {\r\n if (btn && btn.id === identifier && this.touchButtons[btn.index] === target) {\r\n if (touches.length > 1) {\r\n btn.stick = false;\r\n }\r\n btn.clientX = clientX;\r\n btn.clientY = clientY;\r\n this.touchCanvas = [...touches].find(t => t.identifier !== identifier);\r\n if (this.touchCanvas) {\r\n this.touchCanvas = {clientX: this.touchCanvas.clientX, clientY: this.touchCanvas.clientY};\r\n }\r\n delete this.panPos;\r\n return this.touchCanvas != null;\r\n }\r\n const idx = this.touchButtons.indexOf(target);\r\n if (idx >= 0 && !touchOther) {\r\n touchOther = {id: identifier, index: idx, stick: true, original: this.touchMods[idx], clientX, clientY};\r\n }\r\n }\r\n if (btn && !touchOther && release && btn.stick) {\r\n const rect = this.touchButtons[btn.index].getBoundingClientRect();\r\n const {clientX, clientY} = btn;\r\n if (clientX >= rect.left && clientX < rect.right && clientY >= rect.top && clientY < rect.bottom) {\r\n this.setTouchMod(btn.index, !btn.original, true);\r\n } else {\r\n this.setTouchMod(btn.index, btn.original);\r\n }\r\n } else if (btn) {\r\n this.setTouchMod(btn.index, false);\r\n }\r\n this.touchButton = touchOther;\r\n if (touchOther) {\r\n this.setTouchMod(touchOther.index, true);\r\n if (touchOther.index === TOUCH_MOVE) {\r\n this.setTouchMod(TOUCH_RMB, false);\r\n } else if (touchOther.index === TOUCH_RMB) {\r\n this.setTouchMod(TOUCH_MOVE, false);\r\n }\r\n delete this.panPos;\r\n } else if (touches.length === 2) {\r\n const x = (touches[1].clientX + touches[0].clientX) / 2, y = (touches[1].clientY + touches[0].clientY) / 2;\r\n if (this.panPos) {\r\n const dx = x - this.panPos.x, dy = y - this.panPos.y;\r\n const step = this.canvas.offsetHeight / 12;\r\n if (Math.max(Math.abs(dx), Math.abs(dy)) > step) {\r\n let key;\r\n if (Math.abs(dx) > Math.abs(dy)) {\r\n key = (dx > 0 ? 0x25 : 0x27);\r\n } else {\r\n key = (dy > 0 ? 0x26 : 0x28);\r\n }\r\n this.game(\"DApi_Key\", 0, 0, key);\r\n // key up is ignored anyway\r\n this.panPos = {x, y};\r\n }\r\n } else {\r\n this.game(\"DApi_Mouse\", 0, 0, 24, 320, 180);\r\n this.game(\"DApi_Mouse\", 2, 1, 24, 320, 180);\r\n this.panPos = {x, y};\r\n }\r\n this.touchCanvas = null;\r\n return false;\r\n } else {\r\n delete this.panPos;\r\n }\r\n this.touchCanvas = [...touches].find(t => !touchOther || t.identifier !== touchOther.id);\r\n if (this.touchCanvas) {\r\n this.touchCanvas = {clientX: this.touchCanvas.clientX, clientY: this.touchCanvas.clientY};\r\n }\r\n return this.touchCanvas != null;\r\n }\r\n\r\n onTouchStart = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n } else {\r\n this.keyboard.blur();\r\n }\r\n e.preventDefault();\r\n if (this.updateTouchButton(e.touches, false)) {\r\n const {x, y} = this.mousePos(this.touchCanvas);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n if (!this.touchMods[TOUCH_MOVE]) {\r\n this.game(\"DApi_Mouse\", 1, this.touchMods[TOUCH_RMB] ? 2 : 1, this.eventMods(e), x, y);\r\n }\r\n }\r\n }\r\n onTouchMove = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n return;\r\n }\r\n e.preventDefault();\r\n if (this.updateTouchButton(e.touches, false)) {\r\n const {x, y} = this.mousePos(this.touchCanvas);\r\n this.game(\"DApi_Mouse\", 0, 0, this.eventMods(e), x, y);\r\n }\r\n }\r\n onTouchEnd = e => {\r\n if (!this.canvas) return;\r\n if (e.target === this.keyboard) {\r\n //return;\r\n } else {\r\n e.preventDefault();\r\n }\r\n const prevTc = this.touchCanvas;\r\n this.updateTouchButton(e.touches, true);\r\n if (prevTc && !this.touchCanvas) {\r\n const {x, y} = this.mousePos(prevTc);\r\n this.game(\"DApi_Mouse\", 2, 1, this.eventMods(e), x, y);\r\n this.game(\"DApi_Mouse\", 2, 2, this.eventMods(e), x, y);\r\n\r\n if (this.touchMods[TOUCH_RMB] && (!this.touchButton || this.touchButton.index !== TOUCH_RMB)) {\r\n this.setTouchMod(TOUCH_RMB, false);\r\n }\r\n }\r\n if (!document.fullscreenElement) {\r\n this.element.requestFullscreen();\r\n }\r\n }\r\n\r\n setCanvas = e => this.canvas = e;\r\n setElement = e => this.element = e;\r\n setKeyboard = e => this.keyboard = e;\r\n setTouch_(i, e) {\r\n this.touchButtons[i] = e;\r\n }\r\n setTouchBelt_(i, e) {\r\n this.touchButtons[i] = e;\r\n if (e) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = 28;\r\n canvas.height = 28;\r\n e.appendChild(canvas);\r\n this.touchCtx[i] = canvas.getContext(\"2d\");\r\n } else {\r\n this.touchCtx[i] = null;\r\n }\r\n }\r\n\r\n render() {\r\n const {started, loading, error, progress, dropping, has_spawn} = this.state;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {!error && }\r\n \r\n
\r\n
\r\n
\r\n {!!error && (\r\n \r\n

The following error has occurred:

\r\n

{error.message}

\r\n

Click to create an issue on GitHub

\r\n {this.saveName != null &&

Download save file

}\r\n \r\n )}\r\n {!!loading && !started && !error && (\r\n
\r\n {(progress && progress.text) || 'Loading...'}\r\n {progress != null && !!progress.total && (\r\n \r\n )}\r\n
\r\n )}\r\n {!started && !loading && !error && (\r\n
\r\n

\r\n This is a web port of the original Diablo game, based on source code reconstructed by\r\n GalaXyHaXz and devilution team. The project page with information and links can be found over here https://github.com/d07RiV/diabloweb\r\n

\r\n

\r\n If you own the original game, you can drop the original DIABDAT.MPQ onto this page or click the button below to start playing.\r\n The game can be purchased from GoG.\r\n

\r\n {!has_spawn && (\r\n

\r\n Or you can play the shareware version for free (50MB download).\r\n

\r\n )}\r\n
\r\n \r\n \r\n
\r\n this.start()}>Play Shareware\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default App;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './reset.css';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nimport App from './App';\r\n\r\nReactDOM.render(, document.getElementById('root'));\r\n\r\nserviceWorker.register({\r\n onUpdate() {\r\n },\r\n});\r\n"],"sourceRoot":""} \ No newline at end of file