summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Rakefile17
-rw-r--r--build/temp/anything.c22
-rw-r--r--build/temp/anything.rb2
-rw-r--r--build/temp/emcc_command5
-rw-r--r--build/temp/game.html1
-rw-r--r--build/temp/game.js201
-rwxr-xr-xbuild/temp/game.wasmbin1145421 -> 0 bytes
-rw-r--r--build/template/game.c17
m---------mruby0
9 files changed, 29 insertions, 236 deletions
diff --git a/Rakefile b/Rakefile
index 85d3ed4..7c84225 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,8 +1,15 @@
-desc "Build your game"
-task :build do
- desc "Build game"
- Dir.chdir("mruby") do
- `env MRUBY_CONFIG=build_config/felflame_linux.rb rake`
+namespace :build do
+ desc "Build the engine"
+ task :mruby do
+ Dir.chdir("mruby") do
+ `env MRUBY_CONFIG=build_config/felflame_linux.rb rake`
+ end
+ end
+ desc 'Build the game'
+ task :game do
+ Dir.chdir("build/temp") do
+ `emcc -s WASM=1 -Os -I ../../mruby/include/ ../template/game.c ../../mruby/build/web/lib/libmruby.a -o game.html --closure 1 ../../raylib_lib_files/web/libraylib.a -I ../../raylib/src/ -s USE_GLFW=3`
+ end
end
end
diff --git a/build/temp/anything.c b/build/temp/anything.c
deleted file mode 100644
index 49795f7..0000000
--- a/build/temp/anything.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <stdint.h>
-#include "mruby.h"
-#include "mruby/irep.h"
-#ifdef __cplusplus
-extern const uint8_t anything[];
-#endif
-const uint8_t anything[] = {
-0x52,0x49,0x54,0x45,0x30,0x32,0x30,0x30,0x00,0x00,0x00,0x6c,0x4d,0x41,0x54,0x5a,
-0x30,0x30,0x30,0x30,0x49,0x52,0x45,0x50,0x00,0x00,0x00,0x50,0x30,0x33,0x30,0x30,
-0x00,0x00,0x00,0x44,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x13,0x14,0x01,
-0x51,0x02,0x00,0x2f,0x01,0x00,0x01,0x1f,0x01,0x01,0x2f,0x01,0x02,0x00,0x39,0x01,
-0x6b,0x00,0x01,0x00,0x00,0x04,0x74,0x65,0x73,0x74,0x00,0x00,0x03,0x00,0x04,0x70,
-0x75,0x74,0x73,0x00,0x00,0x02,0x59,0x65,0x00,0x00,0x08,0x63,0x5f,0x6d,0x65,0x74,
-0x68,0x6f,0x64,0x00,0x45,0x4e,0x44,0x00,0x00,0x00,0x00,0x08,
-};
-
-int main() {
- mrb_state *mrb = mrb_open();
- mrb_load_irep(mrb, anything);
- mrb_close(mrb);
- return 0;
-}
diff --git a/build/temp/anything.rb b/build/temp/anything.rb
deleted file mode 100644
index e00287d..0000000
--- a/build/temp/anything.rb
+++ /dev/null
@@ -1,2 +0,0 @@
-puts "test"
-Ye.c_method
diff --git a/build/temp/emcc_command b/build/temp/emcc_command
deleted file mode 100644
index 157295e..0000000
--- a/build/temp/emcc_command
+++ /dev/null
@@ -1,5 +0,0 @@
-emcc -o game.html game.c -Os -Wall ./path-to/libraylib.a -I. -Ipath-to-raylib-h -L. -Lpath-to-libraylib-a -s USE_GLFW=3 --shell-file path-to/shell.html -DPLATFORM_WEB
-
-emcc -s WASM=1 -Os -I mruby/include hello_ruby.c mruby/build/emscripten/lib/libmruby.a -o hello_ruby.js --closure 1
-
-emcc -o game.html anything.c -Os -Wall -I ../../mruby/include/ -I ../raylib/src/ -DPLATFORM_WEB --shell-file ../../raylib/src/shell.html ../../mruby/build/web/lib/libmruby.a ../../raylib_lib_files/web/libraylib.a --closure 1 -s USE_GLFW=3 -s ASYNCIFY
diff --git a/build/temp/game.html b/build/temp/game.html
deleted file mode 100644
index e3c0cab..0000000
--- a/build/temp/game.html
+++ /dev/null
@@ -1 +0,0 @@
-<!doctypehtml><html lang=en-us><head><meta charset=utf-8><meta content="text/html; charset=utf-8"http-equiv=Content-Type><title>raylib web game</title><meta content="raylib web game"name=title><meta content="New raylib web videogame, developed using raylib videogames library"name=description><meta content="raylib, games, html5, programming, C, C++, library, learn, videogames"name=keywords><meta content="width=device-width"name=viewport><meta content="raylib web game"property=og:title><meta content=image/png property=og:image:type><meta content=https://www.raylib.com/common/img/raylib_logo.png property=og:image><meta content=raylib.com property=og:site_name><meta content=https://www.raylib.com/games.html property=og:url><meta content="New raylib web videogame, developed using raylib videogames library"property=og:description><meta content=summary name=twitter:card><meta content=@raysan5 name=twitter:site><meta content="raylib web game"name=twitter:title><meta content=https://www.raylib.com/common/raylib_logo.png name=twitter:image><meta content=https://www.raylib.com/games.html name=twitter:url><meta content="New raylib web game, developed using raylib videogames library"name=twitter:description><link href=https://www.raylib.com/favicon.ico rel="shortcut icon"><style>body{font-family:arial;margin:0;padding:none}#header{width:100%;height:80px;background-color:#888}#logo{width:64px;height:64px;float:left;position:relative;margin:10px;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAIAAAAlC+aJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAA7JJREFUaEPtk0FyWzEMQ+37X7fZhxX4YY3AD1OKF1nkzTRlSBCCLeVBnvl/AUdaELOunPno1kts1kixdtEZKVs+xIxebBkZsVknn/L5nFGDLR8T4zVC9fX19S/+tTFijrYK4jUjbPUtqBHpnEE6PkZD7jQZV8n5Recw1XQKciZuPaEtR6UjNs5ENVGMsBVqpPtER0ZMOhpyp8m4YL4OjD9yxsyZxnQycfMJETNSzsRE1+dihK3YMiJmpHTW3xpmXPC6BXlCHfqnBlsjY5hxf/6EVEOM2BTEi0fYCX4ONSI6Kq3Blg/prIOMq2CsRur4KQ0x64SdjOufEDEdHZGOhmz5RDHCVqhRuQ86YsVskbc+GXchLiHnFyYH+UigQDVGnImbT8hwFkgLg2qiM8JO6Ylx1FNLa3DmYwqCTsZd4BPqGJG7MwKzpeiWKTKxXkLMVE3MSOmsdwxLH6Rd/wCCLSNDx6djeKfJuArGeoYamRHpaEjnCBYZVy8hZqo2GI36qPjsiOiMsBXGcev4Mx9TLGTchbgEjN/uz6jGrBvDjg+LTNx8Qp2CbG2xMKgmOiPslJ4Yxx+eSnSkzlosZNwFPiHl7FRTkLNRJm4+IeVM0ymIH42wE/wcKalQI4MRl4EW3p6VcRWMua8F6WjIlqZDxvVPiHQ6CjVbYkV9ohhhp/Rk1wiYgpyJ78i4CsZbjkb8Qx+ihvzu3RPaKogZkY6GlEeMsKdPSOFIC8VoOusg44L5c+T8ouOoGhWbdWJ8tMi4egkxo4hoh2yNTGf3iIyr5Lyic4bRENXo+lvDjAt4C1Hk/OKtUaAj0+n4dMSZ2D+hrYJsaYh2SClG2jV9kJKKzhlGQ1SsW299Mq6C8dYZHTExo8fzieI5ivipYnYy7nwJqGKmOYyRwfiUBXITfh5qSHRGWEkfqJqURgvsdHyWYv7Ko8DnYYegk3EB00cxprdrJRzFd7YQzawu8L1GMTYS/KpPaAFTkIn1EmJmspJSs5xBzSyGhlkBmlxfNFiP5mw4wlbMh4F5Ddxp5jNINBdCEz9zPOC1zD7Q0HBdmXndwv0TMtydEdzlWJT4VZ8Qt9Qn4/onxMIwa5ZYGJU5yufBiCjwE50AGjLCVuS8Yt4H7OgZLKK5EKOsLviEWJSL/+0uMi7gLUSBseYwqEbXvSHCec1CJvZPyHCmYQffaBBfOTCGHM2aEbZi1+gO1XTWVXMnzrhAn5DSOZVsiQlHnSITKzGj6DeTcZWc/3oy7h9//PF4PL4BlvsWrb6RE+oAAAAASUVORK5CYII=')}.emscripten{padding-right:0;margin-left:auto;margin-right:auto;display:block}div.emscripten{text-align:center}div.emscripten_border{border:1px solid #000}canvas.emscripten{border:0 none;background:#000;width:100%}.spinner{height:30px;width:30px;margin:0;margin-top:20px;margin-left:20px;display:inline-block;vertical-align:top;-webkit-animation:rotation .8s linear infinite;-moz-animation:rotation .8s linear infinite;-o-animation:rotation .8s linear infinite;animation:rotation .8s linear infinite;border-left:5px solid #000;border-right:5px solid #000;border-bottom:5px solid #000;border-top:5px solid red;border-radius:100%;background-color:#f5f5f5}@-webkit-keyframes rotation{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@-moz-keyframes rotation{from{-moz-transform:rotate(0)}to{-moz-transform:rotate(360deg)}}@-o-keyframes rotation{from{-o-transform:rotate(0)}to{-o-transform:rotate(360deg)}}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(360deg)}}#status{display:inline-block;vertical-align:top;margin-top:30px;margin-left:20px;font-weight:700;color:#282828}#progress{height:0;width:0}#controls{display:inline-block;float:right;vertical-align:top;margin-top:15px;margin-right:20px}#output{width:100%;height:140px;margin:0 auto;margin-top:10px;display:block;background-color:#000;color:#25ae26;font-family:'Lucida Console',Monaco,monospace;outline:0}input[type=button]{background-color:#d3d3d3;border:4px solid #a9a9a9;color:#000;text-decoration:none;cursor:pointer;width:140px;height:50px}input[type=button]:hover{background-color:#f5f5f5ff;border-color:#000}</style></head><body><div id=header><a href=https://www.raylib.com id=logo></a><div class=spinner id=spinner></div><div class=emscripten id=status>Downloading...</div><span id=controls><span><input onclick=Module.requestFullscreen(!1,!1) type=button value="🖵 FULLSCREEN"></span><span><input onclick=toggleAudio() type=button value="🔇 SUSPEND"id=btn-audio></span></span><div class=emscripten><progress hidden id=progress max=100 value=0></progress></div></div><div class=emscripten_border><canvas class=emscripten id=canvas oncontextmenu=event.preventDefault() tabindex=-1></canvas></div><textarea id=output rows=8></textarea><script src=https://cdn.jsdelivr.net/gh/eligrey/FileSaver.js/dist/FileSaver.min.js></script><script>function saveFileFromMEMFSToDisk(e,a){var i,o=FS.readFile(e);i=new Blob([o.buffer],{type:"application/octet-binary"}),saveAs(i,a)}</script><script>var statusElement=document.querySelector("#status"),progressElement=document.querySelector("#progress"),spinnerElement=document.querySelector("#spinner"),Module={preRun:[],postRun:[],print:function(){var e=document.querySelector("#output");return e&&(e.value=""),function(t){arguments.length>1&&(t=Array.prototype.slice.call(arguments).join(" ")),console.log(t),e&&(e.value+=t+"\n",e.scrollTop=e.scrollHeight)}}(),printErr:function(e){arguments.length>1&&(e=Array.prototype.slice.call(arguments).join(" ")),console.error(e)},canvas:function(){var e=document.querySelector("#canvas");return e.addEventListener("webglcontextlost",(function(e){alert("WebGL context lost. You will need to reload the page."),e.preventDefault()}),!1),e}(),setStatus:function(e){if(Module.setStatus.last||(Module.setStatus.last={time:Date.now(),text:""}),e!==Module.setStatus.last.text){var t=e.match(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/),n=Date.now();t&&n-Module.setStatus.last.time<30||(Module.setStatus.last.time=n,Module.setStatus.last.text=e,t?(e=t[1],progressElement.value=100*parseInt(t[2]),progressElement.max=100*parseInt(t[4]),progressElement.hidden=!0,spinnerElement.hidden=!1):(progressElement.value=null,progressElement.max=null,progressElement.hidden=!0,e||(spinnerElement.style.display="none")),statusElement.innerHTML=e)}},totalDependencies:0,monitorRunDependencies:function(e){this.totalDependencies=Math.max(this.totalDependencies,e),Module.setStatus(e?"Preparing... ("+(this.totalDependencies-e)+"/"+this.totalDependencies+")":"All downloads complete.")}};Module.setStatus("Downloading..."),window.onerror=function(){Module.setStatus("Exception thrown, see JavaScript console"),spinnerElement.style.display="none",Module.setStatus=function(e){e&&Module.printErr("[post-exception status] "+e)}}</script><script>var audioBtn=document.querySelector("#btn-audio");const audioContexList=[];function toggleAudio(){var t=!1;audioContexList.forEach((e=>{"suspended"==e.state?(e.resume(),t=!0):"running"==e.state&&e.suspend()})),audioBtn.value=t?"🔇 SUSPEND":"🔈 RESUME"}self.AudioContext=new Proxy(self.AudioContext,{construct(t,e){const n=new t(...e);return audioContexList.push(n),"suspended"==n.state&&(audioBtn.value="🔈 RESUME"),n}})</script><script src=game.js async></script></body></html> \ No newline at end of file
diff --git a/build/temp/game.js b/build/temp/game.js
deleted file mode 100644
index bff6197..0000000
--- a/build/temp/game.js
+++ /dev/null
@@ -1,201 +0,0 @@
-
-var h;h||(h=typeof Module !== 'undefined' ? Module : {});var aa={},ba;for(ba in h)h.hasOwnProperty(ba)&&(aa[ba]=h[ba]);var da="./this.program";function ea(a,b){throw b;}var fa="object"===typeof window,ia="function"===typeof importScripts,ja="object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node,ka="",la,ma,na,oa,pa;
-if(ja)ka=ia?require("path").dirname(ka)+"/":__dirname+"/",la=function(a,b){oa||(oa=require("fs"));pa||(pa=require("path"));a=pa.normalize(a);return oa.readFileSync(a,b?null:"utf8")},na=function(a){a=la(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a},ma=function(a,b,c){oa||(oa=require("fs"));pa||(pa=require("path"));a=pa.normalize(a);oa.readFile(a,function(d,e){d?c(d):b(e.buffer)})},1<process.argv.length&&(da=process.argv[1].replace(/\\/g,"/")),process.argv.slice(2),"undefined"!==
-typeof module&&(module.exports=h),process.on("uncaughtException",function(a){if(!(a instanceof qa))throw a;}),process.on("unhandledRejection",function(a){throw a;}),ea=function(a,b){if(noExitRuntime||0<ra)throw process.exitCode=a,b;b instanceof qa||k("exiting due to exception: "+b);process.exit(a)},h.inspect=function(){return"[Emscripten Module object]"};else if(fa||ia)ia?ka=self.location.href:"undefined"!==typeof document&&document.currentScript&&(ka=document.currentScript.src),ka=0!==ka.indexOf("blob:")?
-ka.substr(0,ka.replace(/[?#].*/,"").lastIndexOf("/")+1):"",la=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.send(null);return b.responseText},ia&&(na=function(a){var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)}),ma=function(a,b,c){var d=new XMLHttpRequest;d.open("GET",a,!0);d.responseType="arraybuffer";d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(null)};
-var l=h.print||console.log.bind(console),k=h.printErr||console.warn.bind(console);for(ba in aa)aa.hasOwnProperty(ba)&&(h[ba]=aa[ba]);aa=null;h.thisProgram&&(da=h.thisProgram);h.quit&&(ea=h.quit);function sa(a){ta||(ta={});ta[a]||(ta[a]=1,k(a))}var ta,ua=0,va;h.wasmBinary&&(va=h.wasmBinary);var noExitRuntime=h.noExitRuntime||!0;"object"!==typeof WebAssembly&&p("no native wasm support detected");
-function wa(a,b,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":r[a>>0]=b;break;case "i8":r[a>>0]=b;break;case "i16":xa[a>>1]=b;break;case "i32":w[a>>2]=b;break;case "i64":y=[b>>>0,(z=b,1<=+Math.abs(z)?0<z?(Math.min(+Math.floor(z/4294967296),4294967295)|0)>>>0:~~+Math.ceil((z-+(~~z>>>0))/4294967296)>>>0:0)];w[a>>2]=y[0];w[a+4>>2]=y[1];break;case "float":A[a>>2]=b;break;case "double":ya[a>>3]=b;break;default:p("invalid type for setValue: "+c)}}var za,Aa=!1,Ba;
-function assert(a,b){a||p("Assertion failed: "+b)}function Ca(a){var b=Da(a.length);a.subarray||a.slice?C.set(a,b):C.set(new Uint8Array(a),b);return b}var Ea="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;
-function Fa(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16<c-b&&a.subarray&&Ea)return Ea.decode(a.subarray(b,c));for(d="";b<c;){var e=a[b++];if(e&128){var f=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&31)<<6|f);else{var g=a[b++]&63;e=224==(e&240)?(e&15)<<12|f<<6|g:(e&7)<<18|f<<12|g<<6|a[b++]&63;65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function D(a,b){return a?Fa(C,a,b):""}
-function E(a,b,c,d){if(!(0<d))return 0;var e=c;d=c+d-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var m=a.charCodeAt(++f);g=65536+((g&1023)<<10)|m&1023}if(127>=g){if(c>=d)break;b[c++]=g}else{if(2047>=g){if(c+1>=d)break;b[c++]=192|g>>6}else{if(65535>=g){if(c+2>=d)break;b[c++]=224|g>>12}else{if(c+3>=d)break;b[c++]=240|g>>18;b[c++]=128|g>>12&63}b[c++]=128|g>>6&63}b[c++]=128|g&63}}b[c]=0;return c-e}
-function Ga(a){for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);55296<=d&&57343>=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}function Ha(a){var b=Ga(a)+1,c=Da(b);c&&E(a,r,c,b);return c}var Ia,r,C,xa,Ja,w,Ka,A,ya,La=[],Ma=[],Na=[],Oa=[],Pa=[],Qa=!1,ra=0;function Ra(){var a=h.preRun.shift();La.unshift(a)}var Sa=0,Ta=null,Ua=null;h.preloadedImages={};h.preloadedAudios={};
-function p(a){if(h.onAbort)h.onAbort(a);a="Aborted("+a+")";k(a);Aa=!0;Ba=1;throw new WebAssembly.RuntimeError(a+". Build with -s ASSERTIONS=1 for more info.");}function Va(){return G.startsWith("data:application/octet-stream;base64,")}var G;G="game.wasm";if(!Va()){var Wa=G;G=h.locateFile?h.locateFile(Wa,ka):ka+Wa}function Xa(){var a=G;try{if(a==G&&va)return new Uint8Array(va);if(na)return na(a);throw"both async and sync fetching of the wasm failed";}catch(b){p(b)}}
-function Ya(){if(!va&&(fa||ia)){if("function"===typeof fetch&&!G.startsWith("file://"))return fetch(G,{credentials:"same-origin"}).then(function(a){if(!a.ok)throw"failed to load wasm binary file at '"+G+"'";return a.arrayBuffer()}).catch(function(){return Xa()});if(ma)return new Promise(function(a,b){ma(G,function(c){a(new Uint8Array(c))},b)})}return Promise.resolve().then(function(){return Xa()})}var z,y;
-function Za(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b(h);else{var c=b.Rg;"number"===typeof c?void 0===b.Sf?dynCall_v.call(null,c):dynCall_vi.apply(null,[c,b.Sf]):c(void 0===b.Sf?null:b.Sf)}}}function $a(a){a instanceof qa||"unwind"==a||ea(1,a)}var ab;
-function bb(){function a(g){return(g=g.toTimeString().match(/\(([A-Za-z ]+)\)$/))?g[1]:"GMT"}var b=(new Date).getFullYear(),c=new Date(b,0,1),d=new Date(b,6,1);b=c.getTimezoneOffset();var e=d.getTimezoneOffset(),f=Math.max(b,e);w[cb()>>2]=60*f;w[db()>>2]=Number(b!=e);c=a(c);d=a(d);c=Ha(c);d=Ha(d);e<b?(w[eb()>>2]=c,w[eb()+4>>2]=d):(w[eb()>>2]=d,w[eb()+4>>2]=c)}var fb;
-function gb(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function hb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=gb(a.split("/").filter(function(d){return!!d}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a}
-function ib(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function jb(a){if("/"===a)return"/";a=hb(a);a=a.replace(/\/$/,"");var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}
-function kb(){if("object"===typeof crypto&&"function"===typeof crypto.getRandomValues){var a=new Uint8Array(1);return function(){crypto.getRandomValues(a);return a[0]}}if(ja)try{var b=require("crypto");return function(){return b.randomBytes(1)[0]}}catch(c){}return function(){p("randomDevice")}}
-function lb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:"/";if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=gb(a.split("/").filter(function(d){return!!d}),!b).join("/");return(b?"/":"")+a||"."}
-function mb(a,b){function c(g){for(var m=0;m<g.length&&""===g[m];m++);for(var q=g.length-1;0<=q&&""===g[q];q--);return m>q?[]:g.slice(m,q-m+1)}a=lb(a).substr(1);b=lb(b).substr(1);a=c(a.split("/"));b=c(b.split("/"));for(var d=Math.min(a.length,b.length),e=d,f=0;f<d;f++)if(a[f]!==b[f]){e=f;break}d=[];for(f=e;f<a.length;f++)d.push("..");d=d.concat(b.slice(e));return d.join("/")}var nb=[];function ob(a,b){nb[a]={input:[],output:[],Mf:b};pb(a,qb)}
-var qb={open:function(a){var b=nb[a.node.rdev];if(!b)throw new H(43);a.tty=b;a.seekable=!1},close:function(a){a.tty.Mf.flush(a.tty)},flush:function(a){a.tty.Mf.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.Mf.vg)throw new H(60);for(var e=0,f=0;f<d;f++){try{var g=a.tty.Mf.vg(a.tty)}catch(m){throw new H(29);}if(void 0===g&&0===e)throw new H(6);if(null===g||void 0===g)break;e++;b[c+f]=g}e&&(a.node.timestamp=Date.now());return e},write:function(a,b,c,d){if(!a.tty||!a.tty.Mf.mg)throw new H(60);
-try{for(var e=0;e<d;e++)a.tty.Mf.mg(a.tty,b[c+e])}catch(f){throw new H(29);}d&&(a.node.timestamp=Date.now());return e}},sb={vg:function(a){if(!a.input.length){var b=null;if(ja){var c=Buffer.alloc(256),d=0;try{d=oa.readSync(process.stdin.fd,c,0,256,null)}catch(e){if(e.toString().includes("EOF"))d=0;else throw e;}0<d?b=c.slice(0,d).toString("utf-8"):b=null}else"undefined"!=typeof window&&"function"==typeof window.prompt?(b=window.prompt("Input: "),null!==b&&(b+="\n")):"function"==typeof readline&&(b=
-readline(),null!==b&&(b+="\n"));if(!b)return null;a.input=rb(b,!0)}return a.input.shift()},mg:function(a,b){null===b||10===b?(l(Fa(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(l(Fa(a.output,0)),a.output=[])}},tb={mg:function(a,b){null===b||10===b?(k(Fa(a.output,0)),a.output=[]):0!=b&&a.output.push(b)},flush:function(a){a.output&&0<a.output.length&&(k(Fa(a.output,0)),a.output=[])}},I={Bf:null,vf:function(){return I.createNode(null,"/",16895,0)},
-createNode:function(a,b,c,d){if(24576===(c&61440)||4096===(c&61440))throw new H(63);I.Bf||(I.Bf={dir:{node:{Af:I.Me.Af,wf:I.Me.wf,lookup:I.Me.lookup,Zf:I.Me.Zf,rename:I.Me.rename,unlink:I.Me.unlink,rmdir:I.Me.rmdir,readdir:I.Me.readdir,symlink:I.Me.symlink},stream:{Gf:I.pf.Gf}},file:{node:{Af:I.Me.Af,wf:I.Me.wf},stream:{Gf:I.pf.Gf,read:I.pf.read,write:I.pf.write,og:I.pf.og,xg:I.pf.xg,zg:I.pf.zg}},link:{node:{Af:I.Me.Af,wf:I.Me.wf,readlink:I.Me.readlink},stream:{}},pg:{node:{Af:I.Me.Af,wf:I.Me.wf},
-stream:ub}});c=vb(a,b,c,d);J(c.mode)?(c.Me=I.Bf.dir.node,c.pf=I.Bf.dir.stream,c.qf={}):32768===(c.mode&61440)?(c.Me=I.Bf.file.node,c.pf=I.Bf.file.stream,c.tf=0,c.qf=null):40960===(c.mode&61440)?(c.Me=I.Bf.link.node,c.pf=I.Bf.link.stream):8192===(c.mode&61440)&&(c.Me=I.Bf.pg.node,c.pf=I.Bf.pg.stream);c.timestamp=Date.now();a&&(a.qf[b]=c,a.timestamp=c.timestamp);return c},qh:function(a){return a.qf?a.qf.subarray?a.qf.subarray(0,a.tf):new Uint8Array(a.qf):new Uint8Array(0)},rg:function(a,b){var c=a.qf?
-a.qf.length:0;c>=b||(b=Math.max(b,c*(1048576>c?2:1.125)>>>0),0!=c&&(b=Math.max(b,256)),c=a.qf,a.qf=new Uint8Array(b),0<a.tf&&a.qf.set(c.subarray(0,a.tf),0))},Zg:function(a,b){if(a.tf!=b)if(0==b)a.qf=null,a.tf=0;else{var c=a.qf;a.qf=new Uint8Array(b);c&&a.qf.set(c.subarray(0,Math.min(b,a.tf)));a.tf=b}},Me:{Af:function(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;J(a.mode)?b.size=4096:32768===(a.mode&61440)?b.size=a.tf:40960===(a.mode&
-61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.timestamp);b.mtime=new Date(a.timestamp);b.ctime=new Date(a.timestamp);b.Mg=4096;b.blocks=Math.ceil(b.size/b.Mg);return b},wf:function(a,b){void 0!==b.mode&&(a.mode=b.mode);void 0!==b.timestamp&&(a.timestamp=b.timestamp);void 0!==b.size&&I.Zg(a,b.size)},lookup:function(){throw wb[44];},Zf:function(a,b,c,d){return I.createNode(a,b,c,d)},rename:function(a,b,c){if(J(a.mode)){try{var d=xb(b,c)}catch(f){}if(d)for(var e in d.qf)throw new H(55);}delete a.parent.qf[a.name];
-a.parent.timestamp=Date.now();a.name=c;b.qf[c]=a;b.timestamp=a.parent.timestamp;a.parent=b},unlink:function(a,b){delete a.qf[b];a.timestamp=Date.now()},rmdir:function(a,b){var c=xb(a,b),d;for(d in c.qf)throw new H(55);delete a.qf[b];a.timestamp=Date.now()},readdir:function(a){var b=[".",".."],c;for(c in a.qf)a.qf.hasOwnProperty(c)&&b.push(c);return b},symlink:function(a,b,c){a=I.createNode(a,b,41471,0);a.link=c;return a},readlink:function(a){if(40960!==(a.mode&61440))throw new H(28);return a.link}},
-pf:{read:function(a,b,c,d,e){var f=a.node.qf;if(e>=a.node.tf)return 0;a=Math.min(a.node.tf-e,d);if(8<a&&f.subarray)b.set(f.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=f[e+d];return a},write:function(a,b,c,d,e,f){if(!d)return 0;a=a.node;a.timestamp=Date.now();if(b.subarray&&(!a.qf||a.qf.subarray)){if(f)return a.qf=b.subarray(c,c+d),a.tf=d;if(0===a.tf&&0===e)return a.qf=b.slice(c,c+d),a.tf=d;if(e+d<=a.tf)return a.qf.set(b.subarray(c,c+d),e),d}I.rg(a,e+d);if(a.qf.subarray&&b.subarray)a.qf.set(b.subarray(c,
-c+d),e);else for(f=0;f<d;f++)a.qf[e+f]=b[c+f];a.tf=Math.max(a.tf,e+d);return d},Gf:function(a,b,c){1===c?b+=a.position:2===c&&32768===(a.node.mode&61440)&&(b+=a.node.tf);if(0>b)throw new H(28);return b},og:function(a,b,c){I.rg(a.node,b+c);a.node.tf=Math.max(a.node.tf,b+c)},xg:function(a,b,c,d,e,f){if(0!==b)throw new H(28);if(32768!==(a.node.mode&61440))throw new H(43);a=a.node.qf;if(f&2||a.buffer!==Ia){if(0<d||d+c<a.length)a.subarray?a=a.subarray(d,d+c):a=Array.prototype.slice.call(a,d,d+c);d=!0;
-p();c=void 0;if(!c)throw new H(48);r.set(a,c)}else d=!1,c=a.byteOffset;return{xh:c,kh:d}},zg:function(a,b,c,d,e){if(32768!==(a.node.mode&61440))throw new H(43);if(e&2)return 0;I.pf.write(a,b,0,d,c,!1);return 0}}},yb=null,zb={},Ab=[],Bb=1,Cb=null,Db=!0,H=null,wb={};
-function K(a,b){a=lb("/",a);b=b||{};if(!a)return{path:"",node:null};var c={sg:!0,ng:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8<b.ng)throw new H(32);a=gb(a.split("/").filter(function(g){return!!g}),!1);var e=yb;c="/";for(d=0;d<a.length;d++){var f=d===a.length-1;if(f&&b.parent)break;e=xb(e,a[d]);c=hb(c+"/"+a[d]);e.Hf&&(!f||f&&b.sg)&&(e=e.Hf.root);if(!f||b.Wf)for(f=0;40960===(e.mode&61440);)if(e=Eb(c),c=lb(ib(c),e),e=K(c,{ng:b.ng}).node,40<f++)throw new H(32);}return{path:c,node:e}}
-function Fb(a){for(var b;;){if(a===a.parent)return a=a.vf.yg,b?"/"!==a[a.length-1]?a+"/"+b:a+b:a;b=b?a.name+"/"+b:a.name;a=a.parent}}function Gb(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%Cb.length}function Hb(a){var b=Gb(a.parent.id,a.name);a.Lf=Cb[b];Cb[b]=a}function Ib(a){var b=Gb(a.parent.id,a.name);if(Cb[b]===a)Cb[b]=a.Lf;else for(b=Cb[b];b;){if(b.Lf===a){b.Lf=a.Lf;break}b=b.Lf}}
-function xb(a,b){var c;if(c=(c=Jb(a,"x"))?c:a.Me.lookup?0:2)throw new H(c,a);for(c=Cb[Gb(a.id,b)];c;c=c.Lf){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.Me.lookup(a,b)}function vb(a,b,c,d){a=new Kb(a,b,c,d);Hb(a);return a}function J(a){return 16384===(a&61440)}var Lb={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090};function Mb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}
-function Jb(a,b){if(Db)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Nb(a,b){try{return xb(a,b),20}catch(c){}return Jb(a,"wx")}function Ob(a,b,c){try{var d=xb(a,b)}catch(e){return e.rf}if(a=Jb(a,"wx"))return a;if(c){if(!J(d.mode))return 54;if(d===d.parent||"/"===Fb(d))return 10}else if(J(d.mode))return 31;return 0}
-function Pb(a,b){b=b||4096;for(a=a||0;a<=b;a++)if(!Ab[a])return a;throw new H(33);}function Qb(a,b,c){Rb||(Rb=function(){},Rb.prototype={});var d=new Rb,e;for(e in a)d[e]=a[e];a=d;b=Pb(b,c);a.fd=b;return Ab[b]=a}var ub={open:function(a){a.pf=zb[a.node.rdev].pf;a.pf.open&&a.pf.open(a)},Gf:function(){throw new H(70);}};function pb(a,b){zb[a]={pf:b}}
-function Sb(a,b){var c="/"===b,d=!b;if(c&&yb)throw new H(10);if(!c&&!d){var e=K(b,{sg:!1});b=e.path;e=e.node;if(e.Hf)throw new H(10);if(!J(e.mode))throw new H(54);}b={type:a,wh:{},yg:b,Wg:[]};a=a.vf(b);a.vf=b;b.root=a;c?yb=a:e&&(e.Hf=b,e.vf&&e.vf.Wg.push(b));return a}function Tb(a,b,c){var d=K(a,{parent:!0}).node;a=jb(a);if(!a||"."===a||".."===a)throw new H(28);var e=Nb(d,a);if(e)throw new H(e);if(!d.Me.Zf)throw new H(63);return d.Me.Zf(d,a,b,c)}function Ub(a){return Tb(a,16895,0)}
-function Vb(a,b,c){"undefined"===typeof c&&(c=b,b=438);Tb(a,b|8192,c)}function Wb(a,b){if(!lb(a))throw new H(44);var c=K(b,{parent:!0}).node;if(!c)throw new H(44);b=jb(b);var d=Nb(c,b);if(d)throw new H(d);if(!c.Me.symlink)throw new H(63);c.Me.symlink(c,b,a)}function Eb(a){a=K(a).node;if(!a)throw new H(44);if(!a.Me.readlink)throw new H(28);return lb(Fb(a.parent),a.Me.readlink(a))}function Xb(a,b){a=K(a,{Wf:!b}).node;if(!a)throw new H(44);if(!a.Me.Af)throw new H(63);return a.Me.Af(a)}
-function Yb(a){return Xb(a,!0)}function Zb(a,b){if(0>b)throw new H(28);a="string"===typeof a?K(a,{Wf:!0}).node:a;if(!a.Me.wf)throw new H(63);if(J(a.mode))throw new H(31);if(32768!==(a.mode&61440))throw new H(28);var c=Jb(a,"w");if(c)throw new H(c);a.Me.wf(a,{size:b,timestamp:Date.now()})}
-function $b(a,b,c,d){if(""===a)throw new H(44);if("string"===typeof b){var e=Lb[b];if("undefined"===typeof e)throw Error("Unknown file open mode: "+b);b=e}c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var f=a;else{a=hb(a);try{f=K(a,{Wf:!(b&131072)}).node}catch(g){}}e=!1;if(b&64)if(f){if(b&128)throw new H(20);}else f=Tb(a,c,0),e=!0;if(!f)throw new H(44);8192===(f.mode&61440)&&(b&=-513);if(b&65536&&!J(f.mode))throw new H(54);if(!e&&(c=f?40960===(f.mode&61440)?32:J(f.mode)&&
-("r"!==Mb(b)||b&512)?31:Jb(f,Mb(b)):44))throw new H(c);b&512&&Zb(f,0);b&=-131713;d=Qb({node:f,path:Fb(f),id:f.id,flags:b,mode:f.mode,seekable:!0,position:0,pf:f.pf,Me:f.Me,gh:[],error:!1},d,void 0);d.pf.open&&d.pf.open(d);!h.logReadFiles||b&1||(ac||(ac={}),a in ac||(ac[a]=1));return d}function bc(a){if(null===a.fd)throw new H(8);a.lg&&(a.lg=null);try{a.pf.close&&a.pf.close(a)}catch(b){throw b;}finally{Ab[a.fd]=null}a.fd=null}
-function cc(a,b,c){if(null===a.fd)throw new H(8);if(!a.seekable||!a.pf.Gf)throw new H(70);if(0!=c&&1!=c&&2!=c)throw new H(28);a.position=a.pf.Gf(a,b,c);a.gh=[]}
-function dc(a,b,c,d,e,f){if(0>d||0>e)throw new H(28);if(null===a.fd)throw new H(8);if(0===(a.flags&2097155))throw new H(8);if(J(a.node.mode))throw new H(31);if(!a.pf.write)throw new H(28);a.seekable&&a.flags&1024&&cc(a,0,2);var g="undefined"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new H(70);b=a.pf.write(a,b,c,d,e,f);g||(a.position+=b);return b}
-function ec(){H||(H=function(a,b){this.node=b;this.$g=function(c){this.rf=c};this.$g(a);this.message="FS error"},H.prototype=Error(),H.prototype.constructor=H,[44].forEach(function(a){wb[a]=new H(a);wb[a].stack="<generic error, no stack>"}))}var fc;function gc(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c}function kc(){var a="/";a="string"===typeof a?a:Fb(a);for(var b=[".glfw_dropped_files"].reverse();b.length;){var c=b.pop();if(c){a=hb(a+"/"+c);try{Ub(a)}catch(d){}}}}
-function lc(a,b,c){a=hb("/dev/"+a);var d=gc(!!b,!!c);mc||(mc=64);var e=mc++<<8|0;pb(e,{open:function(f){f.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(f,g,m,q){for(var t=0,u=0;u<q;u++){try{var v=b()}catch(B){throw new H(29);}if(void 0===v&&0===t)throw new H(6);if(null===v||void 0===v)break;t++;g[m+u]=v}t&&(f.node.timestamp=Date.now());return t},write:function(f,g,m,q){for(var t=0;t<q;t++)try{c(g[m+t])}catch(u){throw new H(29);}q&&(f.node.timestamp=Date.now());return t}});
-Vb(a,d,e)}var mc,L={},Rb,ac;
-function nc(a,b,c){try{var d=a(b)}catch(e){if(e&&e.node&&hb(b)!==hb(Fb(e.node)))return-54;throw e;}w[c>>2]=d.dev;w[c+4>>2]=0;w[c+8>>2]=d.ino;w[c+12>>2]=d.mode;w[c+16>>2]=d.nlink;w[c+20>>2]=d.uid;w[c+24>>2]=d.gid;w[c+28>>2]=d.rdev;w[c+32>>2]=0;y=[d.size>>>0,(z=d.size,1<=+Math.abs(z)?0<z?(Math.min(+Math.floor(z/4294967296),4294967295)|0)>>>0:~~+Math.ceil((z-+(~~z>>>0))/4294967296)>>>0:0)];w[c+40>>2]=y[0];w[c+44>>2]=y[1];w[c+48>>2]=4096;w[c+52>>2]=d.blocks;w[c+56>>2]=d.atime.getTime()/1E3|0;w[c+60>>
-2]=0;w[c+64>>2]=d.mtime.getTime()/1E3|0;w[c+68>>2]=0;w[c+72>>2]=d.ctime.getTime()/1E3|0;w[c+76>>2]=0;y=[d.ino>>>0,(z=d.ino,1<=+Math.abs(z)?0<z?(Math.min(+Math.floor(z/4294967296),4294967295)|0)>>>0:~~+Math.ceil((z-+(~~z>>>0))/4294967296)>>>0:0)];w[c+80>>2]=y[0];w[c+84>>2]=y[1];return 0}
-function oc(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=w[b+(8*f+4)>>2];var m=a;var q=w[b+8*f>>2],t=g,u=d,v=r;if(0>t||0>u)throw new H(28);if(null===m.fd)throw new H(8);if(1===(m.flags&2097155))throw new H(8);if(J(m.node.mode))throw new H(31);if(!m.pf.read)throw new H(28);var B="undefined"!==typeof u;if(!B)u=m.position;else if(!m.seekable)throw new H(70);q=m.pf.read(m,v,q,t,u);B||(m.position+=q);m=q;if(0>m)return-1;e+=m;if(m<g)break}return e}
-function pc(a,b,c,d){for(var e=0,f=0;f<c;f++){var g=dc(a,r,w[b+8*f>>2],w[b+(8*f+4)>>2],d);if(0>g)return-1;e+=g}return e}var qc=void 0;function rc(){qc+=4;return w[qc-4>>2]}function sc(a){a=Ab[a];if(!a)throw new H(8);return a}
-var M={xf:8192,vf:function(){return vb(null,"/",16895,0)},Og:function(){var a={sf:[],Dg:2};a.sf.push({buffer:new Uint8Array(M.xf),offset:0,zf:0});var b=M.Pf(),c=M.Pf(),d=vb(M.root,b,4096,0),e=vb(M.root,c,4096,0);d.pipe=a;e.pipe=a;a=Qb({path:b,node:d,flags:0,seekable:!1,pf:M.pf});d.stream=a;c=Qb({path:c,node:e,flags:1,seekable:!1,pf:M.pf});e.stream=c;return{Yg:a.fd,ih:c.fd}},pf:{Cg:function(a){var b=a.node.pipe;if(1===(a.flags&2097155))return 260;if(0<b.sf.length)for(a=0;a<b.sf.length;a++){var c=b.sf[a];
-if(0<c.offset-c.zf)return 65}return 0},Ug:function(){return 28},fsync:function(){return 28},read:function(a,b,c,d){a=a.node.pipe;for(var e=0,f=0;f<a.sf.length;f++){var g=a.sf[f];e+=g.offset-g.zf}assert(b instanceof ArrayBuffer||ArrayBuffer.isView(b));b=b.subarray(c,c+d);if(0>=d)return 0;if(0==e)throw new H(6);c=d=Math.min(e,d);for(f=e=0;f<a.sf.length;f++){g=a.sf[f];var m=g.offset-g.zf;if(d<=m){var q=g.buffer.subarray(g.zf,g.offset);d<m?(q=q.subarray(0,d),g.zf+=d):e++;b.set(q);break}else q=g.buffer.subarray(g.zf,
-g.offset),b.set(q),b=b.subarray(q.byteLength),d-=q.byteLength,e++}e&&e==a.sf.length&&(e--,a.sf[e].offset=0,a.sf[e].zf=0);a.sf.splice(0,e);return c},write:function(a,b,c,d){a=a.node.pipe;assert(b instanceof ArrayBuffer||ArrayBuffer.isView(b));b=b.subarray(c,c+d);c=b.byteLength;if(0>=c)return 0;0==a.sf.length?(d={buffer:new Uint8Array(M.xf),offset:0,zf:0},a.sf.push(d)):d=a.sf[a.sf.length-1];assert(d.offset<=M.xf);var e=M.xf-d.offset;if(e>=c)return d.buffer.set(b,d.offset),d.offset+=c,c;0<e&&(d.buffer.set(b.subarray(0,
-e),d.offset),d.offset+=e,b=b.subarray(e,b.byteLength));d=b.byteLength/M.xf|0;e=b.byteLength%M.xf;for(var f=0;f<d;f++){var g={buffer:new Uint8Array(M.xf),offset:M.xf,zf:0};a.sf.push(g);g.buffer.set(b.subarray(0,M.xf));b=b.subarray(M.xf,b.byteLength)}0<e&&(g={buffer:new Uint8Array(M.xf),offset:b.byteLength,zf:0},a.sf.push(g),g.buffer.set(b));return c},close:function(a){a=a.node.pipe;a.Dg--;0===a.Dg&&(a.sf=null)}},Pf:function(){M.Pf.current||(M.Pf.current=0);return"pipe["+M.Pf.current++ +"]"}},tc=0;
-function uc(){for(var a=vc.length-1;0<=a;--a)wc(a);vc=[];xc=[]}var xc=[];function yc(){if(tc&&zc.ig)for(var a=0;a<xc.length;++a){var b=xc[a];xc.splice(a,1);--a;b.yh.apply(null,b.lh)}}var vc=[];function wc(a){var b=vc[a];b.target.removeEventListener(b.Ff,b.Qg,b.Rf);vc.splice(a,1)}
-function Ac(a){function b(d){++tc;zc=a;yc();a.Xf(d);yc();--tc}if(a.Tf)a.Qg=b,a.target.addEventListener(a.Ff,b,a.Rf),vc.push(a),Bc||(Oa.push(uc),Bc=!0);else for(var c=0;c<vc.length;++c)vc[c].target==a.target&&vc[c].Ff==a.Ff&&wc(c--)}var Bc,zc,Cc,Dc,Ec,Fc,Gc,Hc,Ic=[0,"undefined"!==typeof document?document:0,"undefined"!==typeof window?window:0];function Jc(a){a=2<a?D(a):a;return Ic[a]||("undefined"!==typeof document?document.querySelector(a):void 0)}
-function Kc(a){return 0>Ic.indexOf(a)?a.getBoundingClientRect():{left:0,top:0}}
-function Lc(a,b){ya[a>>3]=b.timestamp;for(var c=0;c<b.axes.length;++c)ya[a+8*c+16>>3]=b.axes[c];for(c=0;c<b.buttons.length;++c)ya[a+8*c+528>>3]="object"===typeof b.buttons[c]?b.buttons[c].value:b.buttons[c];for(c=0;c<b.buttons.length;++c)w[a+4*c+1040>>2]="object"===typeof b.buttons[c]?b.buttons[c].pressed:1==b.buttons[c];w[a+1296>>2]=b.connected;w[a+1300>>2]=b.index;w[a+8>>2]=b.axes.length;w[a+12>>2]=b.buttons.length;E(b.id,C,a+1304,64);E(b.mapping,C,a+1368,64)}var Mc;
-Mc=ja?function(){var a=process.hrtime();return 1E3*a[0]+a[1]/1E6}:function(){return performance.now()};function Nc(a){var b=a.getExtension("ANGLE_instanced_arrays");b&&(a.vertexAttribDivisor=function(c,d){b.vertexAttribDivisorANGLE(c,d)},a.drawArraysInstanced=function(c,d,e,f){b.drawArraysInstancedANGLE(c,d,e,f)},a.drawElementsInstanced=function(c,d,e,f,g){b.drawElementsInstancedANGLE(c,d,e,f,g)})}
-function Oc(a){var b=a.getExtension("OES_vertex_array_object");b&&(a.createVertexArray=function(){return b.createVertexArrayOES()},a.deleteVertexArray=function(c){b.deleteVertexArrayOES(c)},a.bindVertexArray=function(c){b.bindVertexArrayOES(c)},a.isVertexArray=function(c){return b.isVertexArrayOES(c)})}function Pc(a){var b=a.getExtension("WEBGL_draw_buffers");b&&(a.drawBuffers=function(c,d){b.drawBuffersWEBGL(c,d)})}var Qc=1,Rc=[],O=[],Sc=[],Tc=[],Uc=[],P=[],Vc=[],Wc=[],Xc=[],Yc={},Zc=4;
-function Q(a){$c||($c=a)}function bd(a){for(var b=Qc++,c=a.length;c<b;c++)a[c]=null;return b}function cd(a,b,c){for(var d="",e=0;e<a;++e){var f=c?w[c+4*e>>2]:-1;d+=D(w[b+4*e>>2],0>f?void 0:f)}return d}function dd(a,b){a.ug||(a.ug=a.getContext,a.getContext=function(d,e){e=a.ug(d,e);return"webgl"==d==e instanceof WebGLRenderingContext?e:null});var c=a.getContext("webgl",b);return c?ed(c,b):0}
-function ed(a,b){var c=bd(Wc),d={rh:c,attributes:b,version:b.Vg,hg:a};a.canvas&&(a.canvas.jh=d);Wc[c]=d;("undefined"===typeof b.Pg||b.Pg)&&fd(d);return c}function fd(a){a||(a=gd);if(!a.Tg){a.Tg=!0;var b=a.hg;Nc(b);Oc(b);Pc(b);b.yf=b.getExtension("EXT_disjoint_timer_query");b.uh=b.getExtension("WEBGL_multi_draw");(b.getSupportedExtensions()||[]).forEach(function(c){c.includes("lose_context")||c.includes("debug")||b.getExtension(c)})}}var hd={},$c,gd,jd=[];
-function kd(a,b,c,d){for(var e=0;e<a;e++){var f=R[c](),g=f&&bd(d);f?(f.name=g,d[g]=f):Q(1282);w[b+4*e>>2]=g}}function ld(a,b,c,d,e,f,g,m){b=O[b];if(a=R[a](b,c))d=m&&E(a.name,C,m,d),e&&(w[e>>2]=d),f&&(w[f>>2]=a.size),g&&(w[g>>2]=a.type)}function md(a,b){Ka[a>>2]=b;Ka[a+4>>2]=(b-Ka[a>>2])/4294967296}
-function nd(a,b,c){if(b){var d=void 0;switch(a){case 36346:d=1;break;case 36344:0!=c&&1!=c&&Q(1280);return;case 36345:d=0;break;case 34466:var e=R.getParameter(34467);d=e?e.length:0}if(void 0===d)switch(e=R.getParameter(a),typeof e){case "number":d=e;break;case "boolean":d=e?1:0;break;case "string":Q(1280);return;case "object":if(null===e)switch(a){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:d=0;break;default:Q(1280);return}else{if(e instanceof Float32Array||
-e instanceof Uint32Array||e instanceof Int32Array||e instanceof Array){for(a=0;a<e.length;++a)switch(c){case 0:w[b+4*a>>2]=e[a];break;case 2:A[b+4*a>>2]=e[a];break;case 4:r[b+a>>0]=e[a]?1:0}return}try{d=e.name|0}catch(f){Q(1280);k("GL_INVALID_ENUM in glGet"+c+"v: Unknown object returned from WebGL getParameter("+a+")! (error: "+f+")");return}}break;default:Q(1280);k("GL_INVALID_ENUM in glGet"+c+"v: Native code calling glGet"+c+"v("+a+") and it returns "+e+" of type "+typeof e+"!");return}switch(c){case 1:md(b,
-d);break;case 0:w[b>>2]=d;break;case 2:A[b>>2]=d;break;case 4:r[b>>0]=d?1:0}}else Q(1281)}function od(a){var b=Ga(a)+1,c=Da(b);E(a,C,c,b);return c}function pd(a){return"]"==a.slice(-1)&&a.lastIndexOf("[")}function qd(a){var b=a.If,c=a.fg,d;if(!b)for(a.If=b={},a.Ig={},d=0;d<R.getProgramParameter(a,35718);++d){var e=R.getActiveUniform(a,d);var f=e.name;e=e.size;var g=pd(f);g=0<g?f.slice(0,g):f;var m=a.eg;a.eg+=e;c[g]=[e,m];for(f=0;f<e;++f)b[m]=f,a.Ig[m++]=g}}
-function S(a){var b=R.qg;if(b){var c=b.If[a];"number"===typeof c&&(b.If[a]=c=R.getUniformLocation(b,b.Ig[a]+(0<c?"["+c+"]":"")));return c}Q(1282)}function rd(a,b,c,d){if(c)if(a=O[a],qd(a),a=R.getUniform(a,S(b)),"number"==typeof a||"boolean"==typeof a)switch(d){case 0:w[c>>2]=a;break;case 2:A[c>>2]=a}else for(b=0;b<a.length;b++)switch(d){case 0:w[c+4*b>>2]=a[b];break;case 2:A[c+4*b>>2]=a[b]}else Q(1281)}
-function sd(a,b,c,d){if(c)if(a=R.getVertexAttrib(a,b),34975==b)w[c>>2]=a&&a.name;else if("number"==typeof a||"boolean"==typeof a)switch(d){case 0:w[c>>2]=a;break;case 2:A[c>>2]=a;break;case 5:w[c>>2]=Math.fround(a)}else for(b=0;b<a.length;b++)switch(d){case 0:w[c+4*b>>2]=a[b];break;case 2:A[c+4*b>>2]=a[b];break;case 5:w[c+4*b>>2]=Math.fround(a[b])}else Q(1281)}
-function td(a,b,c,d,e){a-=5120;a=1==a?C:4==a?w:6==a?A:5==a||28922==a?Ka:Ja;var f=31-Math.clz32(a.BYTES_PER_ELEMENT),g=Zc;return a.subarray(e>>f,e+d*(c*({5:3,6:4,8:2,29502:3,29504:4}[b-6402]||1)*(1<<f)+g-1&-g)>>f)}var ud=[],vd=[];
-function wd(a,b,c,d){Dc||(Dc=Da(72));a=Jc(a);Ac({target:a,ig:!0,Ff:"click",Tf:d,Xf:function(e){e=e||event;var f=a,g=Dc;ya[g>>3]=e.timeStamp;g>>=2;w[g+2]=e.screenX;w[g+3]=e.screenY;w[g+4]=e.clientX;w[g+5]=e.clientY;w[g+6]=e.ctrlKey;w[g+7]=e.shiftKey;w[g+8]=e.altKey;w[g+9]=e.metaKey;xa[2*g+20]=e.button;xa[2*g+21]=e.buttons;w[g+11]=e.movementX;w[g+12]=e.movementY;f=Kc(f);w[g+13]=e.clientX-f.left;w[g+14]=e.clientY-f.top;xd.apply(null,[d,4,Dc,b])&&e.preventDefault()},Rf:c})}
-function yd(a,b,c,d,e){Fc||(Fc=Da(280));Ac({target:a,Ff:e,Tf:d,Xf:function(f){f=f||event;var g=Fc,m=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement,q=!!m;w[g>>2]=q;w[g+4>>2]=document.fullscreenEnabled||document.webkitFullscreenEnabled;var t=q?m:Ec,u=t&&t.id?t.id:"";E(t?t==window?"#window":t==screen?"#screen":t&&t.nodeName?t.nodeName:"":"",C,g+8,128);E(u,C,g+136,128);w[g+264>>2]=t?t.clientWidth:0;w[g+268>>2]=t?t.clientHeight:
-0;w[g+272>>2]=screen.width;w[g+276>>2]=screen.height;q&&(Ec=m);xd.apply(null,[d,19,g,b])&&f.preventDefault()},Rf:c})}function zd(a,b,c,d,e){Gc||(Gc=Da(1432));b={target:Jc(2),ig:!0,Ff:e,Tf:c,Xf:function(f){f=f||event;var g=Gc;Lc(g,f.gamepad);xd.apply(null,[c,d,g,a])&&f.preventDefault()},Rf:b};Ac(b)}function Ad(a){if(!Qa&&!Aa)try{a()}catch(b){$a(b)}}function Bd(a){setTimeout(function(){Ad(a)},1E4)}var Cd=!1,Dd=null,Ed=0,Fd=null,Gd=0,Hd=0,Id=0,Jd=0,Kd=[],Ld={},Md,Nd,Od,Pd=!1,Qd=!1,Rd=[];
-function Sd(){function a(){Qd=document.pointerLockElement===h.canvas||document.mozPointerLockElement===h.canvas||document.webkitPointerLockElement===h.canvas||document.msPointerLockElement===h.canvas}h.preloadPlugins||(h.preloadPlugins=[]);if(!Td){Td=!0;try{Ud=!0}catch(c){Ud=!1,l("warning: no blob constructor, cannot create blobs with mimetypes")}Vd="undefined"!=typeof MozBlobBuilder?MozBlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:Ud?null:l("warning: no BlobBuilder");Wd="undefined"!=
-typeof window?window.URL?window.URL:window.webkitURL:void 0;h.Ag||"undefined"!==typeof Wd||(l("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),h.Ag=!0);h.preloadPlugins.push({canHandle:function(c){return!h.Ag&&/\.(jpg|jpeg|png|bmp)$/i.test(c)},handle:function(c,d,e,f){var g=null;if(Ud)try{g=new Blob([c],{type:Xd(d)}),g.size!==c.length&&(g=new Blob([(new Uint8Array(c)).buffer],{type:Xd(d)}))}catch(t){sa("Blob constructor present but fails: "+
-t+"; falling back to blob builder")}g||(g=new Vd,g.append((new Uint8Array(c)).buffer),g=g.getBlob());var m=Wd.createObjectURL(g),q=new Image;q.onload=function(){assert(q.complete,"Image "+d+" could not be decoded");var t=document.createElement("canvas");t.width=q.width;t.height=q.height;t.getContext("2d").drawImage(q,0,0);h.preloadedImages[d]=t;Wd.revokeObjectURL(m);e&&e(c)};q.onerror=function(){l("Image "+m+" could not be decoded");f&&f()};q.src=m}});h.preloadPlugins.push({canHandle:function(c){return!h.vh&&
-c.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},handle:function(c,d,e,f){function g(v){q||(q=!0,h.preloadedAudios[d]=v,e&&e(c))}function m(){q||(q=!0,h.preloadedAudios[d]=new Audio,f&&f())}var q=!1;if(Ud){try{var t=new Blob([c],{type:Xd(d)})}catch(v){return m()}t=Wd.createObjectURL(t);var u=new Audio;u.addEventListener("canplaythrough",function(){g(u)},!1);u.onerror=function(){if(!q){l("warning: browser could not fully decode audio "+d+", trying slower base64 approach");for(var v="",B=0,n=0,x=0;x<c.length;x++)for(B=
-B<<8|c[x],n+=8;6<=n;){var F=B>>n-6&63;n-=6;v+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[F]}2==n?(v+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(B&3)<<4],v+="=="):4==n&&(v+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(B&15)<<2],v+="=");u.src="data:audio/x-"+d.substr(-3)+";base64,"+v;g(u)}};u.src=t;Bd(function(){g(u)})}else return m()}});var b=h.canvas;b&&(b.requestPointerLock=b.requestPointerLock||b.mozRequestPointerLock||b.webkitRequestPointerLock||
-b.msRequestPointerLock||function(){},b.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},b.exitPointerLock=b.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",a,!1),document.addEventListener("mozpointerlockchange",a,!1),document.addEventListener("webkitpointerlockchange",a,!1),document.addEventListener("mspointerlockchange",a,!1),h.elementPointerLock&&b.addEventListener("click",
-function(c){!Qd&&h.canvas.requestPointerLock&&(h.canvas.requestPointerLock(),c.preventDefault())},!1))}}
-function Yd(a,b,c,d){if(b&&h.Jf&&a==h.canvas)return h.Jf;var e;if(b){var f={antialias:!1,alpha:!1,Vg:1};if(d)for(var g in d)f[g]=d[g];if("undefined"!==typeof hd&&(e=dd(a,f)))var m=Wc[e].hg}else m=a.getContext("2d");if(!m)return null;c&&(b||assert("undefined"===typeof R,"cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),h.Jf=m,b&&(gd=Wc[e],h.Jf=R=gd&&gd.hg),h.Ah=b,Rd.forEach(function(q){q()}),Sd());return m}var Zd=!1,$d=void 0,ae=void 0;
-function be(a,b){function c(){Pd=!1;var f=d.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===f?(d.exitFullscreen=ce,$d&&d.requestPointerLock(),Pd=!0,ae?("undefined"!=typeof SDL&&(w[SDL.screen>>2]=Ka[SDL.screen>>2]|8388608),de(h.canvas),ee()):de(d)):(f.parentNode.insertBefore(d,f),f.parentNode.removeChild(f),ae?("undefined"!=typeof SDL&&(w[SDL.screen>>2]=Ka[SDL.screen>>2]&
--8388609),de(h.canvas),ee()):de(d));if(h.onFullScreen)h.onFullScreen(Pd);if(h.onFullscreen)h.onFullscreen(Pd)}$d=a;ae=b;"undefined"===typeof $d&&($d=!0);"undefined"===typeof ae&&(ae=!1);var d=h.canvas;Zd||(Zd=!0,document.addEventListener("fullscreenchange",c,!1),document.addEventListener("mozfullscreenchange",c,!1),document.addEventListener("webkitfullscreenchange",c,!1),document.addEventListener("MSFullscreenChange",c,!1));var e=document.createElement("div");d.parentNode.insertBefore(e,d);e.appendChild(d);
-e.requestFullscreen=e.requestFullscreen||e.mozRequestFullScreen||e.msRequestFullscreen||(e.webkitRequestFullscreen?function(){e.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(e.webkitRequestFullScreen?function(){e.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null);e.requestFullscreen()}
-function ce(){if(!Pd)return!1;(document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){}).apply(document,[]);return!0}var fe=0;function ge(a){if("function"===typeof requestAnimationFrame)requestAnimationFrame(a);else{var b=Date.now();if(0===fe)fe=b+1E3/60;else for(;b+2>=fe;)fe+=1E3/60;setTimeout(a,Math.max(fe-b,0))}}
-function Xd(a){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[a.substr(a.lastIndexOf(".")+1)]}var he=0,ie=0,je=0,ke=0;
-function le(a){if(Qd)"mousemove"!=a.type&&"mozMovementX"in a?je=ke=0:(je=a.movementX||a.mozMovementX||a.webkitMovementX||0,ke=a.movementY||a.mozMovementY||a.webkitMovementY||0),"undefined"!=typeof SDL?(he=SDL.sh+je,ie=SDL.th+ke):(he+=je,ie+=ke);else{var b=h.canvas.getBoundingClientRect(),c=h.canvas.width,d=h.canvas.height,e="undefined"!==typeof window.scrollX?window.scrollX:window.pageXOffset,f="undefined"!==typeof window.scrollY?window.scrollY:window.pageYOffset;"touchstart"!==a.type&&"touchend"!==
-a.type&&"touchmove"!==a.type&&(e=a.pageX-(e+b.left),a=a.pageY-(f+b.top),e*=c/b.width,a*=d/b.height,je=e-he,ke=a-ie,he=e,ie=a)}}var me=[];function ee(){var a=h.canvas;me.forEach(function(b){b(a.width,a.height)})}function ne(a,b,c){de(h.canvas,a,b);c||ee()}
-function de(a,b,c){b&&c?(a.hh=b,a.Sg=c):(b=a.hh,c=a.Sg);var d=b,e=c;h.forcedAspectRatio&&0<h.forcedAspectRatio&&(d/e<h.forcedAspectRatio?d=Math.round(e*h.forcedAspectRatio):e=Math.round(d/h.forcedAspectRatio));if((document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===a.parentNode&&"undefined"!=typeof screen){var f=Math.min(screen.width/d,screen.height/e);d=Math.round(d*f);e=Math.round(e*
-f)}ae?(a.width!=d&&(a.width=d),a.height!=e&&(a.height=e),"undefined"!=typeof a.style&&(a.style.removeProperty("width"),a.style.removeProperty("height"))):(a.width!=b&&(a.width=b),a.height!=c&&(a.height=c),"undefined"!=typeof a.style&&(d!=b||e!=c?(a.style.setProperty("width",d+"px","important"),a.style.setProperty("height",e+"px","important")):(a.style.removeProperty("width"),a.style.removeProperty("height"))))}var Td,Ud,Vd,Wd;
-function oe(a,b){Hd=a;Id=b;if(Fd)if(Cd||(Cd=!0),0==a)Dd=function(){var d=Math.max(0,Nd+b-Mc())|0;setTimeout(Od,d)};else if(1==a)Dd=function(){ge(Od)};else if(2==a){if("undefined"===typeof setImmediate){var c=[];addEventListener("message",function(d){if("setimmediate"===d.data||"setimmediate"===d.data.target)d.stopPropagation(),c.shift()()},!0);setImmediate=function(d){c.push(d);ia?(void 0===h.setImmediates&&(h.setImmediates=[]),h.setImmediates.push(d),postMessage({target:"setimmediate"})):postMessage("setimmediate",
-"*")}}Dd=function(){setImmediate(Od)}}}
-function pe(a,b,c,d,e){function f(){if(g<Ed){if(!(noExitRuntime||0<ra))try{qe(Ba)}catch(m){$a(m)}return!1}return!0}assert(!Fd,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Fd=a;Gd=d;var g=Ed;Cd=!1;Od=function(){if(!Aa)if(0<Kd.length){var m=Date.now(),q=Kd.shift();q.Rg(q.Sf);if(Md){var t=Md,u=0==t%1?t-1:Math.floor(t);Md=q.oh?u:(8*t+(u+.5))/9}l('main loop blocker "'+
-q.name+'" took '+(Date.now()-m)+" ms");h.setStatus&&(m=h.statusMessage||"Please wait...",q=Md,t=Ld.ph,q?q<t?h.setStatus(m+" ("+(t-q)+"/"+t+")"):h.setStatus(m):h.setStatus(""));f()&&setTimeout(Od,0)}else f()&&(Jd=Jd+1|0,1==Hd&&1<Id&&0!=Jd%Id?Dd():(0==Hd&&(Nd=Mc()),Aa||h.preMainLoop&&!1===h.preMainLoop()||(Ad(a),h.postMainLoop&&h.postMainLoop()),f()&&("object"===typeof SDL&&SDL.audio&&SDL.audio.Xg&&SDL.audio.Xg(),Dd())))};e||(b&&0<b?oe(0,1E3/b):oe(1,1),Dd());if(c)throw"unwind";}
-function re(a,b,c,d,e,f){Hc||(Hc=Da(1696));a=Jc(a);Ac({target:a,ig:"touchstart"==f||"touchend"==f,Ff:f,Tf:d,Xf:function(g){for(var m,q={},t=g.touches,u=0;u<t.length;++u)m=t[u],m.wg=m.Bg=0,q[m.identifier]=m;for(u=0;u<g.changedTouches.length;++u)m=g.changedTouches[u],m.wg=1,q[m.identifier]=m;for(u=0;u<g.targetTouches.length;++u)q[g.targetTouches[u].identifier].Bg=1;t=Hc;ya[t>>3]=g.timeStamp;var v=t>>2;w[v+3]=g.ctrlKey;w[v+4]=g.shiftKey;w[v+5]=g.altKey;w[v+6]=g.metaKey;v+=7;var B=Kc(a),n=0;for(u in q)if(m=
-q[u],w[v]=m.identifier,w[v+1]=m.screenX,w[v+2]=m.screenY,w[v+3]=m.clientX,w[v+4]=m.clientY,w[v+5]=m.pageX,w[v+6]=m.pageY,w[v+7]=m.wg,w[v+8]=m.Bg,w[v+9]=m.clientX-B.left,w[v+10]=m.clientY-B.top,v+=13,31<++n)break;w[t+8>>2]=n;xd.apply(null,[d,e,t,b])&&g.preventDefault()},Rf:c})}var se={};
-function te(){if(!ue){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in se)void 0===se[b]?delete a[b]:a[b]=se[b];var c=[];for(b in a)c.push(b+"="+a[b]);ue=c}return ue}var ue;
-function ve(a,b,c,d){this.id=a;this.y=this.x=0;this.kg=!1;this.Hg=this.Gg=0;this.width=b;this.height=c;this.Fg=b;this.Eg=c;this.title=d;this.attributes=we;this.buttons=0;this.keys=[];this.jg=[];this.ah=0;this.Uf=this.Yf=this.Of=this.ag=this.Kf=this.Vf=this.$f=this.tg=this.Lg=this.Kg=this.Jg=this.gg=this.title=null}function T(a){return 0>=a||!U?null:U[a-1]}
-var xe=null,V=null,U=null,ye=null,we=null,ze={131073:0,131074:0,131075:1,131076:1,131077:1,135169:8,135170:8,135171:8,135172:8,135173:24,135174:8,135175:0,135176:0,135177:0,135178:0,135179:0,135180:0,135181:0,135182:0,135183:0,139265:196609,139266:1,139267:0,139268:0,139269:0,139270:0,139271:0,139272:0};
-function Ae(a){switch(a){case 32:return 32;case 222:return 39;case 188:return 44;case 173:return 45;case 189:return 45;case 190:return 46;case 191:return 47;case 48:return 48;case 49:return 49;case 50:return 50;case 51:return 51;case 52:return 52;case 53:return 53;case 54:return 54;case 55:return 55;case 56:return 56;case 57:return 57;case 59:return 59;case 61:return 61;case 187:return 61;case 65:return 65;case 66:return 66;case 67:return 67;case 68:return 68;case 69:return 69;case 70:return 70;case 71:return 71;
-case 72:return 72;case 73:return 73;case 74:return 74;case 75:return 75;case 76:return 76;case 77:return 77;case 78:return 78;case 79:return 79;case 80:return 80;case 81:return 81;case 82:return 82;case 83:return 83;case 84:return 84;case 85:return 85;case 86:return 86;case 87:return 87;case 88:return 88;case 89:return 89;case 90:return 90;case 219:return 91;case 220:return 92;case 221:return 93;case 192:return 94;case 27:return 256;case 13:return 257;case 9:return 258;case 8:return 259;case 45:return 260;
-case 46:return 261;case 39:return 262;case 37:return 263;case 40:return 264;case 38:return 265;case 33:return 266;case 34:return 267;case 36:return 268;case 35:return 269;case 20:return 280;case 145:return 281;case 144:return 282;case 44:return 283;case 19:return 284;case 112:return 290;case 113:return 291;case 114:return 292;case 115:return 293;case 116:return 294;case 117:return 295;case 118:return 296;case 119:return 297;case 120:return 298;case 121:return 299;case 122:return 300;case 123:return 301;
-case 124:return 302;case 125:return 303;case 126:return 304;case 127:return 305;case 128:return 306;case 129:return 307;case 130:return 308;case 131:return 309;case 132:return 310;case 133:return 311;case 134:return 312;case 135:return 313;case 136:return 314;case 96:return 320;case 97:return 321;case 98:return 322;case 99:return 323;case 100:return 324;case 101:return 325;case 102:return 326;case 103:return 327;case 104:return 328;case 105:return 329;case 110:return 330;case 111:return 331;case 106:return 332;
-case 109:return 333;case 107:return 334;case 16:return 340;case 17:return 341;case 18:return 342;case 91:return 343;case 93:return 348;default:return-1}}function Be(){var a=V,b=0;a.keys[340]&&(b|=1);a.keys[341]&&(b|=2);a.keys[342]&&(b|=4);a.keys[343]&&(b|=8);return b}function Ce(a){V&&V.Uf&&!a.ctrlKey&&!a.metaKey&&(a=a.charCode,0==a||0<=a&&31>=a||dynCall_vii.apply(null,[V.Uf,V.id,a]))}
-function De(a,b){if(V){var c=Ae(a);if(-1!=c){var d=b&&V.keys[c];V.keys[c]=b;V.jg[a]=b;V.Yf&&(d&&(b=2),Ee.apply(null,[V.Yf,V.id,c,a,b,Be()]))}}}function Fe(){Ge()}function He(){Ge()}function Ie(a){De(a.keyCode,1);8!==a.keyCode&&9!==a.keyCode||a.preventDefault()}function Je(a){De(a.keyCode,0)}function Ke(){if(V)for(var a=0;a<V.jg.length;++a)V.jg[a]&&De(a,0)}function Le(a){V&&(le(a),a.target==h.canvas&&V.Vf&&Me.apply(null,[V.Vf,V.id,he,ie]))}
-function Ne(a){V&&a.target==h.canvas&&V.Kf&&dynCall_vii.apply(null,[V.Kf,V.id,1])}function Oe(a){V&&a.target==h.canvas&&V.Kf&&dynCall_vii.apply(null,[V.Kf,V.id,0])}function Pe(a,b){if(V&&(le(a),a.target==h.canvas)){var c=a.button;0<c&&(c=1==c?2:1);if(1==b){V.buttons|=1<<c;try{a.target.setCapture()}catch(d){}}else V.buttons&=~(1<<c);V.$f&&Qe.apply(null,[V.$f,V.id,c,b,Be()])}}function Re(a){V&&Pe(a,1)}function Se(a){V&&Pe(a,0)}
-function Te(a){switch(a.type){case "DOMMouseScroll":break;case "mousewheel":break;case "wheel":switch(a.deltaMode){case 0:break;case 1:break;case 2:break;default:throw"unrecognized mouse wheel delta mode: "+a.deltaMode;}break;default:throw"unrecognized mouse wheel event: "+a.type;}if(V&&V.ag&&a.target==h.canvas){if("mousewheel"==a.type){var b=a.wheelDeltaX;var c=a.wheelDeltaY}else b=a.deltaX,c=a.deltaY;Me.apply(null,[V.ag,V.id,b,c]);a.preventDefault()}}
-function Ue(){V&&V.gg&&Ad(function(){Ve.apply(null,[V.gg,V.id,V.width,V.height])})}function We(){V&&V.tg&&Ad(function(){Ve.apply(null,[V.tg,V.id,V.width,V.height])})}var Xe={},Ye=null,Ze=null;
-function Ge(){if(Jd!==Ze||!Jd){Ye=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads:null;Ze=Jd;for(var a=0;a<Ye.length;++a){var b=Ye[a];if(b){Xe[a]||(l("glfw joystick connected:",a),Xe[a]={id:Ca(rb(b.id)),nh:b.buttons.length,mh:b.axes.length,buttons:Ca(Array(b.buttons.length)),axes:Ca(Array(4*b.axes.length))});for(var c=Xe[a],d=0;d<b.buttons.length;++d)wa(c.buttons+d,b.buttons[d].pressed,"i8");for(d=0;d<b.axes.length;++d)wa(c.axes+4*d,b.axes[d],
-"float")}else Xe[a]&&(l("glfw joystick disconnected",a),$e(Xe[a].id),$e(Xe[a].buttons),$e(Xe[a].axes),delete Xe[a])}}}
-function af(a){function b(m){var q="/.glfw_dropped_files/"+m.name.replace(/\//g,"_"),t=new FileReader;t.onloadend=function(v){if(2!=t.readyState)++f,l("failed to read dropped file: "+m.name+": "+t.error);else{var B=new Uint8Array(v.target.result);var n=n||{};n.flags=n.flags||577;v=$b(q,n.flags,n.mode);if("string"===typeof B){var x=new Uint8Array(Ga(B)+1);B=E(B,x,0,x.length);dc(v,x,0,B,void 0,n.Ng)}else if(ArrayBuffer.isView(B))dc(v,B,0,B.byteLength,void 0,n.Ng);else throw Error("Unsupported data type");
-bc(v);if(++f===e){Ve.apply(null,[V.Of,V.id,e,c]);for(n=0;n<d.length;++n)$e(d[n]);$e(c)}}};t.readAsArrayBuffer(m);var u=Ca(rb(q));d.push(u);wa(c+4*g,u,"i8*")}if(V&&V.Of&&a.dataTransfer&&a.dataTransfer.files&&0!=a.dataTransfer.files.length){a.preventDefault();var c=Ca(Array(4*a.dataTransfer.files.length)),d=[],e=a.dataTransfer.files.length,f=0;kc();for(var g=0;g<e;++g)b(a.dataTransfer.files[g]);return!1}}function bf(a){if(V&&V.Of)return a.preventDefault(),!1}
-function cf(a){return 0===a%4&&(0!==a%100||0===a%400)}function df(a,b){for(var c=0,d=0;d<=b;c+=a[d++]);return c}var ef=[31,29,31,30,31,30,31,31,30,31,30,31],ff=[31,28,31,30,31,30,31,31,30,31,30,31];function gf(a,b){for(a=new Date(a.getTime());0<b;){var c=a.getMonth(),d=(cf(a.getFullYear())?ef:ff)[c];if(b>d-a.getDate())b-=d-a.getDate()+1,a.setDate(1),11>c?a.setMonth(c+1):(a.setMonth(0),a.setFullYear(a.getFullYear()+1));else{a.setDate(a.getDate()+b);break}}return a}var hf=[];
-function jf(a){var b={},c;for(c in a)(function(d){var e=a[d];b[d]="function"===typeof e?function(){hf.push(d);try{return e.apply(null,arguments)}finally{if(!Aa){var f=hf.pop();assert(f===d)}}}:e})(c);return b}function Kb(a,b,c,d){a||(a=this);this.parent=a;this.vf=a.vf;this.Hf=null;this.id=Bb++;this.name=b;this.mode=c;this.Me={};this.pf={};this.rdev=d}
-Object.defineProperties(Kb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}});ec();Cb=Array(4096);Sb(I,"/");Ub("/tmp");Ub("/home");Ub("/home/web_user");
-(function(){Ub("/dev");pb(259,{read:function(){return 0},write:function(b,c,d,e){return e}});Vb("/dev/null",259);ob(1280,sb);ob(1536,tb);Vb("/dev/tty",1280);Vb("/dev/tty1",1536);var a=kb();lc("random",a);lc("urandom",a);Ub("/dev/shm");Ub("/dev/shm/tmp")})();
-(function(){Ub("/proc");var a=Ub("/proc/self");Ub("/proc/self/fd");Sb({vf:function(){var b=vb(a,"fd",16895,73);b.Me={lookup:function(c,d){var e=Ab[+d];if(!e)throw new H(8);c={parent:null,vf:{yg:"fake"},Me:{readlink:function(){return e.path}}};return c.parent=c}};return b}},"/proc/self/fd")})();for(var R,W=0;32>W;++W)jd.push(Array(W));var kf=new Float32Array(288);for(W=0;288>W;++W)ud[W]=kf.subarray(0,W+1);var lf=new Int32Array(288);for(W=0;288>W;++W)vd[W]=lf.subarray(0,W+1);
-h.requestFullscreen=function(a,b){be(a,b)};h.requestAnimationFrame=function(a){ge(a)};h.setCanvasSize=function(a,b,c){ne(a,b,c)};h.pauseMainLoop=function(){Dd=null;Ed++};h.resumeMainLoop=function(){Ed++;var a=Hd,b=Id,c=Fd;Fd=null;pe(c,0,!1,Gd,!0);oe(a,b);Dd()};h.getUserMedia=function(){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia);window.getUserMedia(void 0)};h.createContext=function(a,b,c,d){return Yd(a,b,c,d)};
-function rb(a,b){var c=Array(Ga(a)+1);a=E(a,c,0,c.length);b&&(c.length=a);return c}
-var Bf={H:function(a,b,c,d){p("Assertion failed: "+D(a)+", at: "+[b?D(b):"unknown filename",c,d?D(d):"unknown function"])},db:function(a,b){a=new Date(1E3*w[a>>2]);w[b>>2]=a.getUTCSeconds();w[b+4>>2]=a.getUTCMinutes();w[b+8>>2]=a.getUTCHours();w[b+12>>2]=a.getUTCDate();w[b+16>>2]=a.getUTCMonth();w[b+20>>2]=a.getUTCFullYear()-1900;w[b+24>>2]=a.getUTCDay();w[b+36>>2]=0;w[b+32>>2]=0;w[b+28>>2]=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0;ab||(ab=Ha("GMT"));w[b+40>>2]=ab;return b},cb:function(a,
-b){fb||(fb=!0,bb());a=new Date(1E3*w[a>>2]);w[b>>2]=a.getSeconds();w[b+4>>2]=a.getMinutes();w[b+8>>2]=a.getHours();w[b+12>>2]=a.getDate();w[b+16>>2]=a.getMonth();w[b+20>>2]=a.getFullYear()-1900;w[b+24>>2]=a.getDay();var c=new Date(a.getFullYear(),0,1);w[b+28>>2]=(a.getTime()-c.getTime())/864E5|0;w[b+36>>2]=-(60*a.getTimezoneOffset());var d=(new Date(a.getFullYear(),6,1)).getTimezoneOffset();c=c.getTimezoneOffset();a=(d!=c&&a.getTimezoneOffset()==Math.min(c,d))|0;w[b+32>>2]=a;a=w[eb()+(a?4:0)>>2];
-w[b+40>>2]=a;return b},pb:function(a,b,c,d){try{for(var e=0,f=b?w[b>>2]:0,g=b?w[b+4>>2]:0,m=c?w[c>>2]:0,q=c?w[c+4>>2]:0,t=d?w[d>>2]:0,u=d?w[d+4>>2]:0,v=0,B=0,n=0,x=0,F=0,ha=0,hc=(b?w[b>>2]:0)|(c?w[c>>2]:0)|(d?w[d>>2]:0),wf=(b?w[b+4>>2]:0)|(c?w[c+4>>2]:0)|(d?w[d+4>>2]:0),ca=0;ca<a;ca++){var N=1<<ca%32;if(32>ca?hc&N:wf&N){var ic=Ab[ca];if(!ic)throw new H(8);var jc=5;ic.pf.Cg&&(jc=ic.pf.Cg(ic));jc&1&&(32>ca?f&N:g&N)&&(32>ca?v|=N:B|=N,e++);jc&4&&(32>ca?m&N:q&N)&&(32>ca?n|=N:x|=N,e++);jc&2&&(32>ca?t&N:
-u&N)&&(32>ca?F|=N:ha|=N,e++)}}b&&(w[b>>2]=v,w[b+4>>2]=B);c&&(w[c>>2]=n,w[c+4>>2]=x);d&&(w[d>>2]=F,w[d+4>>2]=ha);return e}catch(ad){if("undefined"===typeof L||!(ad instanceof H))throw ad;return-ad.rf}},ub:function(a,b){try{a=D(a);var c="string"===typeof a?K(a,{Wf:!0}).node:a;if(!c.Me.wf)throw new H(63);c.Me.wf(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()});return 0}catch(d){if("undefined"===typeof L||!(d instanceof H))throw d;return-d.rf}},kb:function(a){try{var b=sc(a);return $b(b.path,b.flags,
-0).fd}catch(c){if("undefined"===typeof L||!(c instanceof H))throw c;return-c.rf}},l:function(a,b,c){qc=c;try{var d=sc(a);switch(b){case 0:var e=rc();return 0>e?-28:$b(d.path,d.flags,0,e).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=rc(),d.flags|=e,0;case 5:return e=rc(),xa[e+0>>1]=2,0;case 6:case 7:return 0;case 16:case 8:return-28;case 9:return w[mf()>>2]=28,-1;default:return-28}}catch(f){if("undefined"===typeof L||!(f instanceof H))throw f;return-f.rf}},tb:function(a,b){try{var c=
-sc(a);return nc(Xb,c.path,b)}catch(d){if("undefined"===typeof L||!(d instanceof H))throw d;return-d.rf}},rb:function(a,b,c,d){try{b=D(b);var e=d&256;d&=4096;var f=b;if("/"===f[0])b=f;else{if(-100===a)var g="/";else{var m=Ab[a];if(!m)throw new H(8);g=m.path}if(0==f.length){if(!d)throw new H(44);b=g}else b=hb(g+"/"+f)}return nc(e?Yb:Xb,b,c)}catch(q){if("undefined"===typeof L||!(q instanceof H))throw q;return-q.rf}},hb:function(a,b){try{var c=Ab[a];if(!c)throw new H(8);if(0===(c.flags&2097155))throw new H(28);
-Zb(c.node,b);return 0}catch(d){if("undefined"===typeof L||!(d instanceof H))throw d;return-d.rf}},mb:function(a,b){try{if(0===b)return-28;if(b<Ga("/")+1)return-68;E("/",C,a,b);return a}catch(c){if("undefined"===typeof L||!(c instanceof H))throw c;return-c.rf}},fb:function(a,b,c){qc=c;try{var d=sc(a);switch(b){case 21509:case 21505:return d.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return d.tty?0:-59;case 21519:if(!d.tty)return-59;var e=rc();return w[e>>2]=0;case 21520:return d.tty?
--28:-59;case 21531:rc();if(!d.pf.Ug)throw new H(59);return 28;case 21523:return d.tty?0:-59;case 21524:return d.tty?0:-59;default:p("bad ioctl syscall "+b)}}catch(f){if("undefined"===typeof L||!(f instanceof H))throw f;return-f.rf}},qb:function(a,b){try{return a=D(a),nc(Yb,a,b)}catch(c){if("undefined"===typeof L||!(c instanceof H))throw c;return-c.rf}},_:function(a,b,c){qc=c;try{var d=D(a),e=c?rc():0;return $b(d,b,e).fd}catch(f){if("undefined"===typeof L||!(f instanceof H))throw f;return-f.rf}},jb:function(a){try{if(0==
-a)throw new H(21);var b=M.Og();w[a>>2]=b.Yg;w[a+4>>2]=b.ih;return 0}catch(c){if("undefined"===typeof L||!(c instanceof H))throw c;return-c.rf}},ob:function(a,b,c){try{a=D(a);if(0>=c)var d=-28;else{var e=Eb(a),f=Math.min(c,Ga(e)),g=r[b+f];E(e,C,b,c+1);r[b+f]=g;d=f}return d}catch(m){if("undefined"===typeof L||!(m instanceof H))throw m;return-m.rf}},eb:function(a,b){try{a=D(a);b=D(b);var c=ib(a),d=ib(b),e=jb(a),f=jb(b);var g=K(a,{parent:!0});var m=g.node;g=K(b,{parent:!0});var q=g.node;if(!m||!q)throw new H(44);
-if(m.vf!==q.vf)throw new H(75);var t=xb(m,e),u=mb(a,d);if("."!==u.charAt(0))throw new H(28);u=mb(b,c);if("."!==u.charAt(0))throw new H(55);try{var v=xb(q,f)}catch(x){}if(t!==v){var B=J(t.mode),n=Ob(m,e,B);if(n)throw new H(n);if(n=v?Ob(q,f,B):Nb(q,f))throw new H(n);if(!m.Me.rename)throw new H(63);if(t.Hf||v&&v.Hf)throw new H(10);if(q!==m&&(n=Jb(m,"w")))throw new H(n);Ib(t);try{m.Me.rename(t,q,f)}catch(x){throw x;}finally{Hb(t)}}return 0}catch(x){if("undefined"===typeof L||!(x instanceof H))throw x;
-return-x.rf}},sb:function(a,b){try{return a=D(a),nc(Xb,a,b)}catch(c){if("undefined"===typeof L||!(c instanceof H))throw c;return-c.rf}},lb:function(a,b){try{return a=D(a),b=D(b),Wb(a,b),0}catch(c){if("undefined"===typeof L||!(c instanceof H))throw c;return-c.rf}},nb:function(a){try{a=D(a);var b=K(a,{parent:!0}).node,c=jb(a),d=xb(b,c),e=Ob(b,c,!1);if(e)throw new H(e);if(!b.Me.unlink)throw new H(63);if(d.Hf)throw new H(10);b.Me.unlink(b,c);Ib(d);return 0}catch(f){if("undefined"===typeof L||!(f instanceof
-H))throw f;return-f.rf}},$a:function(){throw"longjmp";},Ie:function(){p("")},Ge:function(a,b,c){a=Jc(a);if(!a)return-4;a=Kc(a);ya[b>>3]=a.width;ya[c>>3]=a.height;return 0},Be:function(a,b){if(0>a||a>=Cc.length)return-5;if(!Cc[a])return-7;Lc(b,Cc[a]);return 0},Y:Mc,Ce:function(){return Cc.length},ge:function(a){R.activeTexture(a)},fe:function(a,b){R.attachShader(O[a],P[b])},we:function(a,b){R.yf.beginQueryEXT(a,Xc[b])},ee:function(a,b,c){R.bindAttribLocation(O[a],b,D(c))},de:function(a,b){R.bindBuffer(a,
-Rc[b])},ce:function(a,b){R.bindFramebuffer(a,Sc[b])},be:function(a,b){R.bindRenderbuffer(a,Tc[b])},ae:function(a,b){R.bindTexture(a,Uc[b])},oe:function(a){R.bindVertexArray(Vc[a])},$d:function(a,b,c,d){R.blendColor(a,b,c,d)},_d:function(a){R.blendEquation(a)},Yd:function(a,b){R.blendEquationSeparate(a,b)},Xd:function(a,b){R.blendFunc(a,b)},Wd:function(a,b,c,d){R.blendFuncSeparate(a,b,c,d)},Vd:function(a,b,c,d){R.bufferData(a,c?C.subarray(c,c+b):b,d)},Ud:function(a,b,c,d){R.bufferSubData(a,b,C.subarray(d,
-d+c))},Td:function(a){return R.checkFramebufferStatus(a)},Sd:function(a){R.clear(a)},Rd:function(a,b,c,d){R.clearColor(a,b,c,d)},Qd:function(a){R.clearDepth(a)},Pd:function(a){R.clearStencil(a)},Od:function(a,b,c,d){R.colorMask(!!a,!!b,!!c,!!d)},Nd:function(a){R.compileShader(P[a])},Md:function(a,b,c,d,e,f,g,m){R.compressedTexImage2D(a,b,c,d,e,f,m?C.subarray(m,m+g):null)},Ld:function(a,b,c,d,e,f,g,m,q){R.compressedTexSubImage2D(a,b,c,d,e,f,g,q?C.subarray(q,q+m):null)},Kd:function(a,b,c,d,e,f,g,m){R.copyTexImage2D(a,
-b,c,d,e,f,g,m)},Jd:function(a,b,c,d,e,f,g,m){R.copyTexSubImage2D(a,b,c,d,e,f,g,m)},Id:function(){var a=bd(O),b=R.createProgram();b.name=a;b.Ef=b.Cf=b.Df=0;b.eg=1;O[a]=b;return a},Hd:function(a){var b=bd(P);P[b]=R.createShader(a);return b},Gd:function(a){R.cullFace(a)},Fd:function(a,b){for(var c=0;c<a;c++){var d=w[b+4*c>>2],e=Rc[d];e&&(R.deleteBuffer(e),e.name=0,Rc[d]=null)}},Ed:function(a,b){for(var c=0;c<a;++c){var d=w[b+4*c>>2],e=Sc[d];e&&(R.deleteFramebuffer(e),e.name=0,Sc[d]=null)}},Dd:function(a){if(a){var b=
-O[a];b?(R.deleteProgram(b),b.name=0,O[a]=null):Q(1281)}},ye:function(a,b){for(var c=0;c<a;c++){var d=w[b+4*c>>2],e=Xc[d];e&&(R.yf.deleteQueryEXT(e),Xc[d]=null)}},Cd:function(a,b){for(var c=0;c<a;c++){var d=w[b+4*c>>2],e=Tc[d];e&&(R.deleteRenderbuffer(e),e.name=0,Tc[d]=null)}},Bd:function(a){if(a){var b=P[a];b?(R.deleteShader(b),P[a]=null):Q(1281)}},Ad:function(a,b){for(var c=0;c<a;c++){var d=w[b+4*c>>2],e=Uc[d];e&&(R.deleteTexture(e),e.name=0,Uc[d]=null)}},ne:function(a,b){for(var c=0;c<a;c++){var d=
-w[b+4*c>>2];R.deleteVertexArray(Vc[d]);Vc[d]=null}},zd:function(a){R.depthFunc(a)},yd:function(a){R.depthMask(!!a)},xd:function(a,b){R.depthRange(a,b)},wd:function(a,b){R.detachShader(O[a],P[b])},vd:function(a){R.disable(a)},td:function(a){R.disableVertexAttribArray(a)},sd:function(a,b,c){R.drawArrays(a,b,c)},je:function(a,b,c,d){R.drawArraysInstanced(a,b,c,d)},ke:function(a,b){for(var c=jd[a],d=0;d<a;d++)c[d]=w[b+4*d>>2];R.drawBuffers(c)},rd:function(a,b,c,d){R.drawElements(a,b,c,d)},ie:function(a,
-b,c,d,e){R.drawElementsInstanced(a,b,c,d,e)},qd:function(a){R.enable(a)},pd:function(a){R.enableVertexAttribArray(a)},ve:function(a){R.yf.endQueryEXT(a)},od:function(){R.finish()},nd:function(){R.flush()},md:function(a,b,c,d){R.framebufferRenderbuffer(a,b,c,Tc[d])},ld:function(a,b,c,d,e){R.framebufferTexture2D(a,b,c,Uc[d],e)},kd:function(a){R.frontFace(a)},jd:function(a,b){kd(a,b,"createBuffer",Rc)},hd:function(a,b){kd(a,b,"createFramebuffer",Sc)},ze:function(a,b){for(var c=0;c<a;c++){var d=R.yf.createQueryEXT();
-if(!d){for(Q(1282);c<a;)w[b+4*c++>>2]=0;break}var e=bd(Xc);d.name=e;Xc[e]=d;w[b+4*c>>2]=e}},gd:function(a,b){kd(a,b,"createRenderbuffer",Tc)},fd:function(a,b){kd(a,b,"createTexture",Uc)},me:function(a,b){kd(a,b,"createVertexArray",Vc)},id:function(a){R.generateMipmap(a)},ed:function(a,b,c,d,e,f,g){ld("getActiveAttrib",a,b,c,d,e,f,g)},dd:function(a,b,c,d,e,f,g){ld("getActiveUniform",a,b,c,d,e,f,g)},cd:function(a,b,c,d){a=R.getAttachedShaders(O[a]);var e=a.length;e>b&&(e=b);w[c>>2]=e;for(b=0;b<e;++b)w[d+
-4*b>>2]=P.indexOf(a[b])},bd:function(a,b){return R.getAttribLocation(O[a],D(b))},ad:function(a,b){nd(a,b,4)},_c:function(a,b,c){c?w[c>>2]=R.getBufferParameter(a,b):Q(1281)},Zc:function(){var a=R.getError()||$c;$c=0;return a},Yc:function(a,b){nd(a,b,2)},Xc:function(a,b,c,d){a=R.getFramebufferAttachmentParameter(a,b,c);if(a instanceof WebGLRenderbuffer||a instanceof WebGLTexture)a=a.name|0;w[d>>2]=a},Wc:function(a,b){nd(a,b,0)},Uc:function(a,b,c,d){a=R.getProgramInfoLog(O[a]);null===a&&(a="(unknown error)");
-b=0<b&&d?E(a,C,d,b):0;c&&(w[c>>2]=b)},Vc:function(a,b,c){if(c)if(a>=Qc)Q(1281);else if(a=O[a],35716==b)a=R.getProgramInfoLog(a),null===a&&(a="(unknown error)"),w[c>>2]=a.length+1;else if(35719==b){if(!a.Ef)for(b=0;b<R.getProgramParameter(a,35718);++b)a.Ef=Math.max(a.Ef,R.getActiveUniform(a,b).name.length+1);w[c>>2]=a.Ef}else if(35722==b){if(!a.Cf)for(b=0;b<R.getProgramParameter(a,35721);++b)a.Cf=Math.max(a.Cf,R.getActiveAttrib(a,b).name.length+1);w[c>>2]=a.Cf}else if(35381==b){if(!a.Df)for(b=0;b<
-R.getProgramParameter(a,35382);++b)a.Df=Math.max(a.Df,R.getActiveUniformBlockName(a,b).length+1);w[c>>2]=a.Df}else w[c>>2]=R.getProgramParameter(a,b);else Q(1281)},qe:function(a,b,c){if(c){a=R.yf.getQueryObjectEXT(Xc[a],b);var d;"boolean"==typeof a?d=a?1:0:d=a;md(c,d)}else Q(1281)},se:function(a,b,c){if(c){a=R.yf.getQueryObjectEXT(Xc[a],b);var d;"boolean"==typeof a?d=a?1:0:d=a;w[c>>2]=d}else Q(1281)},pe:function(a,b,c){if(c){a=R.yf.getQueryObjectEXT(Xc[a],b);var d;"boolean"==typeof a?d=a?1:0:d=a;
-md(c,d)}else Q(1281)},re:function(a,b,c){if(c){a=R.yf.getQueryObjectEXT(Xc[a],b);var d;"boolean"==typeof a?d=a?1:0:d=a;w[c>>2]=d}else Q(1281)},te:function(a,b,c){c?w[c>>2]=R.yf.getQueryEXT(a,b):Q(1281)},Tc:function(a,b,c){c?w[c>>2]=R.getRenderbufferParameter(a,b):Q(1281)},Rc:function(a,b,c,d){a=R.getShaderInfoLog(P[a]);null===a&&(a="(unknown error)");b=0<b&&d?E(a,C,d,b):0;c&&(w[c>>2]=b)},Pc:function(a,b,c,d){a=R.getShaderPrecisionFormat(a,b);w[c>>2]=a.rangeMin;w[c+4>>2]=a.rangeMax;w[d>>2]=a.precision},
-Oc:function(a,b,c,d){if(a=R.getShaderSource(P[a]))b=0<b&&d?E(a,C,d,b):0,c&&(w[c>>2]=b)},Sc:function(a,b,c){c?35716==b?(a=R.getShaderInfoLog(P[a]),null===a&&(a="(unknown error)"),w[c>>2]=a?a.length+1:0):35720==b?(a=R.getShaderSource(P[a]),w[c>>2]=a?a.length+1:0):w[c>>2]=R.getShaderParameter(P[a],b):Q(1281)},Nc:function(a){var b=Yc[a];if(!b){switch(a){case 7939:b=R.getSupportedExtensions()||[];b=b.concat(b.map(function(d){return"GL_"+d}));b=od(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=
-R.getParameter(a))||Q(1280);b=b&&od(b);break;case 7938:b=od("OpenGL ES 2.0 ("+R.getParameter(7938)+")");break;case 35724:b=R.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+="0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=od(b);break;default:Q(1280)}Yc[a]=b}return b},Mc:function(a,b,c){c?A[c>>2]=R.getTexParameter(a,b):Q(1281)},Lc:function(a,b,c){c?w[c>>2]=R.getTexParameter(a,b):Q(1281)},Ic:function(a,b){b=D(b);if(a=O[a]){qd(a);var c=
-a.If,d=0,e=b,f=pd(b);0<f&&(d=parseInt(b.slice(f+1))>>>0,e=b.slice(0,f));if((e=a.fg[e])&&d<e[0]&&(d+=e[1],c[d]=c[d]||R.getUniformLocation(a,b)))return d}else Q(1281);return-1},Kc:function(a,b,c){rd(a,b,c,2)},Jc:function(a,b,c){rd(a,b,c,0)},Fc:function(a,b,c){c?w[c>>2]=R.getVertexAttribOffset(a,b):Q(1281)},Hc:function(a,b,c){sd(a,b,c,2)},Gc:function(a,b,c){sd(a,b,c,5)},Ec:function(a,b){R.hint(a,b)},Dc:function(a){return(a=Rc[a])?R.isBuffer(a):0},Cc:function(a){return R.isEnabled(a)},Bc:function(a){return(a=
-Sc[a])?R.isFramebuffer(a):0},Ac:function(a){return(a=O[a])?R.isProgram(a):0},xe:function(a){return(a=Xc[a])?R.yf.isQueryEXT(a):0},zc:function(a){return(a=Tc[a])?R.isRenderbuffer(a):0},yc:function(a){return(a=P[a])?R.isShader(a):0},xc:function(a){return(a=Uc[a])?R.isTexture(a):0},le:function(a){return(a=Vc[a])?R.isVertexArray(a):0},wc:function(a){R.lineWidth(a)},uc:function(a){a=O[a];R.linkProgram(a);a.If=0;a.fg={}},tc:function(a,b){3317==a&&(Zc=b);R.pixelStorei(a,b)},sc:function(a,b){R.polygonOffset(a,
-b)},ue:function(a,b){R.yf.queryCounterEXT(Xc[a],b)},rc:function(a,b,c,d,e,f,g){(g=td(f,e,c,d,g))?R.readPixels(a,b,c,d,e,f,g):Q(1280)},qc:function(){},pc:function(a,b,c,d){R.renderbufferStorage(a,b,c,d)},oc:function(a,b){R.sampleCoverage(a,!!b)},nc:function(a,b,c,d){R.scissor(a,b,c,d)},mc:function(){Q(1280)},lc:function(a,b,c,d){b=cd(b,c,d);R.shaderSource(P[a],b)},kc:function(a,b,c){R.stencilFunc(a,b,c)},jc:function(a,b,c,d){R.stencilFuncSeparate(a,b,c,d)},ic:function(a){R.stencilMask(a)},hc:function(a,
-b){R.stencilMaskSeparate(a,b)},gc:function(a,b,c){R.stencilOp(a,b,c)},fc:function(a,b,c,d){R.stencilOpSeparate(a,b,c,d)},ec:function(a,b,c,d,e,f,g,m,q){R.texImage2D(a,b,c,d,e,f,g,m,q?td(m,g,d,e,q):null)},dc:function(a,b,c){R.texParameterf(a,b,c)},cc:function(a,b,c){R.texParameterf(a,b,A[c>>2])},bc:function(a,b,c){R.texParameteri(a,b,c)},ac:function(a,b,c){R.texParameteri(a,b,w[c>>2])},$b:function(a,b,c,d,e,f,g,m,q){var t=null;q&&(t=td(m,g,e,f,q));R.texSubImage2D(a,b,c,d,e,f,g,m,t)},_b:function(a,
-b){R.uniform1f(S(a),b)},Zb:function(a,b,c){if(288>=b)for(var d=ud[b-1],e=0;e<b;++e)d[e]=A[c+4*e>>2];else d=A.subarray(c>>2,c+4*b>>2);R.uniform1fv(S(a),d)},Yb:function(a,b){R.uniform1i(S(a),b)},Xb:function(a,b,c){if(288>=b)for(var d=vd[b-1],e=0;e<b;++e)d[e]=w[c+4*e>>2];else d=w.subarray(c>>2,c+4*b>>2);R.uniform1iv(S(a),d)},Wb:function(a,b,c){R.uniform2f(S(a),b,c)},Vb:function(a,b,c){if(144>=b)for(var d=ud[2*b-1],e=0;e<2*b;e+=2)d[e]=A[c+4*e>>2],d[e+1]=A[c+(4*e+4)>>2];else d=A.subarray(c>>2,c+8*b>>2);
-R.uniform2fv(S(a),d)},Ub:function(a,b,c){R.uniform2i(S(a),b,c)},Tb:function(a,b,c){if(144>=b)for(var d=vd[2*b-1],e=0;e<2*b;e+=2)d[e]=w[c+4*e>>2],d[e+1]=w[c+(4*e+4)>>2];else d=w.subarray(c>>2,c+8*b>>2);R.uniform2iv(S(a),d)},Sb:function(a,b,c,d){R.uniform3f(S(a),b,c,d)},Rb:function(a,b,c){if(96>=b)for(var d=ud[3*b-1],e=0;e<3*b;e+=3)d[e]=A[c+4*e>>2],d[e+1]=A[c+(4*e+4)>>2],d[e+2]=A[c+(4*e+8)>>2];else d=A.subarray(c>>2,c+12*b>>2);R.uniform3fv(S(a),d)},Qb:function(a,b,c,d){R.uniform3i(S(a),b,c,d)},Pb:function(a,
-b,c){if(96>=b)for(var d=vd[3*b-1],e=0;e<3*b;e+=3)d[e]=w[c+4*e>>2],d[e+1]=w[c+(4*e+4)>>2],d[e+2]=w[c+(4*e+8)>>2];else d=w.subarray(c>>2,c+12*b>>2);R.uniform3iv(S(a),d)},Ob:function(a,b,c,d,e){R.uniform4f(S(a),b,c,d,e)},Nb:function(a,b,c){if(72>=b){var d=ud[4*b-1],e=A;c>>=2;for(var f=0;f<4*b;f+=4){var g=c+f;d[f]=e[g];d[f+1]=e[g+1];d[f+2]=e[g+2];d[f+3]=e[g+3]}}else d=A.subarray(c>>2,c+16*b>>2);R.uniform4fv(S(a),d)},Mb:function(a,b,c,d,e){R.uniform4i(S(a),b,c,d,e)},Lb:function(a,b,c){if(72>=b)for(var d=
-vd[4*b-1],e=0;e<4*b;e+=4)d[e]=w[c+4*e>>2],d[e+1]=w[c+(4*e+4)>>2],d[e+2]=w[c+(4*e+8)>>2],d[e+3]=w[c+(4*e+12)>>2];else d=w.subarray(c>>2,c+16*b>>2);R.uniform4iv(S(a),d)},Kb:function(a,b,c,d){if(72>=b)for(var e=ud[4*b-1],f=0;f<4*b;f+=4)e[f]=A[d+4*f>>2],e[f+1]=A[d+(4*f+4)>>2],e[f+2]=A[d+(4*f+8)>>2],e[f+3]=A[d+(4*f+12)>>2];else e=A.subarray(d>>2,d+16*b>>2);R.uniformMatrix2fv(S(a),!!c,e)},Jb:function(a,b,c,d){if(32>=b)for(var e=ud[9*b-1],f=0;f<9*b;f+=9)e[f]=A[d+4*f>>2],e[f+1]=A[d+(4*f+4)>>2],e[f+2]=A[d+
-(4*f+8)>>2],e[f+3]=A[d+(4*f+12)>>2],e[f+4]=A[d+(4*f+16)>>2],e[f+5]=A[d+(4*f+20)>>2],e[f+6]=A[d+(4*f+24)>>2],e[f+7]=A[d+(4*f+28)>>2],e[f+8]=A[d+(4*f+32)>>2];else e=A.subarray(d>>2,d+36*b>>2);R.uniformMatrix3fv(S(a),!!c,e)},Hb:function(a,b,c,d){if(18>=b){var e=ud[16*b-1],f=A;d>>=2;for(var g=0;g<16*b;g+=16){var m=d+g;e[g]=f[m];e[g+1]=f[m+1];e[g+2]=f[m+2];e[g+3]=f[m+3];e[g+4]=f[m+4];e[g+5]=f[m+5];e[g+6]=f[m+6];e[g+7]=f[m+7];e[g+8]=f[m+8];e[g+9]=f[m+9];e[g+10]=f[m+10];e[g+11]=f[m+11];e[g+12]=f[m+12];e[g+
-13]=f[m+13];e[g+14]=f[m+14];e[g+15]=f[m+15]}}else e=A.subarray(d>>2,d+64*b>>2);R.uniformMatrix4fv(S(a),!!c,e)},Gb:function(a){a=O[a];R.useProgram(a);R.qg=a},Fb:function(a){R.validateProgram(O[a])},Eb:function(a,b){R.vertexAttrib1f(a,b)},Db:function(a,b){R.vertexAttrib1f(a,A[b>>2])},Cb:function(a,b,c){R.vertexAttrib2f(a,b,c)},Bb:function(a,b){R.vertexAttrib2f(a,A[b>>2],A[b+4>>2])},Ab:function(a,b,c,d){R.vertexAttrib3f(a,b,c,d)},zb:function(a,b){R.vertexAttrib3f(a,A[b>>2],A[b+4>>2],A[b+8>>2])},yb:function(a,
-b,c,d,e){R.vertexAttrib4f(a,b,c,d,e)},xb:function(a,b){R.vertexAttrib4f(a,A[b>>2],A[b+4>>2],A[b+8>>2],A[b+12>>2])},he:function(a,b){R.vertexAttribDivisor(a,b)},wb:function(a,b,c,d,e,f){R.vertexAttribPointer(a,b,c,!!d,e,f)},vb:function(a,b,c,d){R.viewport(a,b,c,d)},Ya:function(a,b,c){C.copyWithin(a,b,b+c)},Za:function(){p("OOM")},aa:function(a){eval(D(a))},De:function(){return(Cc=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1},xa:function(a,
-b,c,d){wd(a,b,c,d);return 0},ya:function(a,b,c,d){if(!document.fullscreenEnabled&&!document.webkitFullscreenEnabled)return-1;a=Jc(a);if(!a)return-4;yd(a,b,c,d,"fullscreenchange");yd(a,b,c,d,"webkitfullscreenchange");return 0},sa:function(a,b,c){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;zd(a,b,c,26,"gamepadconnected");return 0},ra:function(a,b,c){if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;zd(a,b,c,27,"gamepaddisconnected");return 0},ud:function(a,b,c){pe(function(){dynCall_v.call(null,
-a)},b,c)},ta:function(a,b,c,d){re(a,b,c,d,25,"touchcancel");return 0},va:function(a,b,c,d){re(a,b,c,d,23,"touchend");return 0},ua:function(a,b,c,d){re(a,b,c,d,24,"touchmove");return 0},wa:function(a,b,c,d){re(a,b,c,d,22,"touchstart");return 0},ab:function(a,b){var c=0;te().forEach(function(d,e){var f=b+c;e=w[a+4*e>>2]=f;for(f=0;f<d.length;++f)r[e++>>0]=d.charCodeAt(f);r[e>>0]=0;c+=d.length+1});return 0},bb:function(a,b){var c=te();w[a>>2]=c.length;var d=0;c.forEach(function(e){d+=e.length+1});w[b>>
-2]=d;return 0},J:function(a){qe(a)},z:function(a){try{var b=sc(a);bc(b);return 0}catch(c){if("undefined"===typeof L||!(c instanceof H))throw c;return c.rf}},gb:function(a,b){try{var c=sc(a);r[b>>0]=c.tty?2:J(c.mode)?3:40960===(c.mode&61440)?7:4;return 0}catch(d){if("undefined"===typeof L||!(d instanceof H))throw d;return d.rf}},Wa:function(a,b,c,d,e,f){try{var g=sc(a),m=oc(g,b,c,d);w[f>>2]=m;return 0}catch(q){if("undefined"===typeof L||!(q instanceof H))throw q;return q.rf}},Xa:function(a,b,c,d,e,
-f){try{var g=sc(a),m=pc(g,b,c,d);w[f>>2]=m;return 0}catch(q){if("undefined"===typeof L||!(q instanceof H))throw q;return q.rf}},Z:function(a,b,c,d){try{var e=sc(a),f=oc(e,b,c);w[d>>2]=f;return 0}catch(g){if("undefined"===typeof L||!(g instanceof H))throw g;return g.rf}},Va:function(a,b,c,d,e){try{var f=sc(a);a=4294967296*c+(b>>>0);if(-9007199254740992>=a||9007199254740992<=a)return-61;cc(f,a,d);y=[f.position>>>0,(z=f.position,1<=+Math.abs(z)?0<z?(Math.min(+Math.floor(z/4294967296),4294967295)|0)>>>
-0:~~+Math.ceil((z-+(~~z>>>0))/4294967296)>>>0:0)];w[e>>2]=y[0];w[e+4>>2]=y[1];f.lg&&0===a&&0===d&&(f.lg=null);return 0}catch(g){if("undefined"===typeof L||!(g instanceof H))throw g;return g.rf}},D:function(a,b,c,d){try{var e=sc(a),f=pc(e,b,c);w[d>>2]=f;return 0}catch(g){if("undefined"===typeof L||!(g instanceof H))throw g;return g.rf}},a:function(){return ua},X:function(a){R.activeTexture(a)},M:function(a,b){R.attachShader(O[a],P[b])},o:function(a,b,c){R.bindAttribLocation(O[a],b,D(c))},i:function(a,
-b){R.bindBuffer(a,Rc[b])},m:function(a,b){R.bindTexture(a,Uc[b])},Qa:function(a,b){R.blendFunc(a,b)},x:function(a,b,c,d){R.bufferData(a,c?C.subarray(c,c+b):b,d)},F:function(a,b,c,d){R.bufferSubData(a,b,C.subarray(d,d+c))},T:function(a){R.clear(a)},U:function(a,b,c,d){R.clearColor(a,b,c,d)},Ma:function(a){R.clearDepth(a)},Da:function(a){R.compileShader(P[a])},Ia:function(a,b,c,d,e,f,g,m){R.compressedTexImage2D(a,b,c,d,e,f,m?C.subarray(m,m+g):null)},Ba:function(){var a=bd(O),b=R.createProgram();b.name=
-a;b.Ef=b.Cf=b.Df=0;b.eg=1;O[a]=b;return a},Fa:function(a){var b=bd(P);P[b]=R.createShader(a);return b},Oa:function(a){R.cullFace(a)},v:function(a,b){for(var c=0;c<a;c++){var d=w[b+4*c>>2],e=Rc[d];e&&(R.deleteBuffer(e),e.name=0,Rc[d]=null)}},P:function(a){if(a){var b=O[a];b?(R.deleteProgram(b),b.name=0,O[a]=null):Q(1281)}},Q:function(a){if(a){var b=P[a];b?(R.deleteShader(b),P[a]=null):Q(1281)}},S:function(a,b){for(var c=0;c<a;c++){var d=w[b+4*c>>2],e=Uc[d];e&&(R.deleteTexture(e),e.name=0,Uc[d]=null)}},
-Pa:function(a){R.depthFunc(a)},R:function(a,b){R.detachShader(O[a],P[b])},Sa:function(a){R.disable(a)},w:function(a){R.disableVertexAttribArray(a)},Ua:function(a,b,c){R.drawArrays(a,b,c)},Ta:function(a,b,c,d){R.drawElements(a,b,c,d)},V:function(a){R.enable(a)},q:function(a){R.enableVertexAttribArray(a)},Na:function(a){R.frontFace(a)},y:function(a,b){kd(a,b,"createBuffer",Rc)},Ka:function(a,b){kd(a,b,"createTexture",Uc)},C:function(a,b){return R.getAttribLocation(O[a],D(b))},Ra:function(a,b){nd(a,
-b,2)},za:function(a,b,c,d){a=R.getProgramInfoLog(O[a]);null===a&&(a="(unknown error)");b=0<b&&d?E(a,C,d,b):0;c&&(w[c>>2]=b)},O:function(a,b,c){if(c)if(a>=Qc)Q(1281);else if(a=O[a],35716==b)a=R.getProgramInfoLog(a),null===a&&(a="(unknown error)"),w[c>>2]=a.length+1;else if(35719==b){if(!a.Ef)for(b=0;b<R.getProgramParameter(a,35718);++b)a.Ef=Math.max(a.Ef,R.getActiveUniform(a,b).name.length+1);w[c>>2]=a.Ef}else if(35722==b){if(!a.Cf)for(b=0;b<R.getProgramParameter(a,35721);++b)a.Cf=Math.max(a.Cf,R.getActiveAttrib(a,
-b).name.length+1);w[c>>2]=a.Cf}else if(35381==b){if(!a.Df)for(b=0;b<R.getProgramParameter(a,35382);++b)a.Df=Math.max(a.Df,R.getActiveUniformBlockName(a,b).length+1);w[c>>2]=a.Df}else w[c>>2]=R.getProgramParameter(a,b);else Q(1281)},Ca:function(a,b,c,d){a=R.getShaderInfoLog(P[a]);null===a&&(a="(unknown error)");b=0<b&&d?E(a,C,d,b):0;c&&(w[c>>2]=b)},N:function(a,b,c){c?35716==b?(a=R.getShaderInfoLog(P[a]),null===a&&(a="(unknown error)"),w[c>>2]=a?a.length+1:0):35720==b?(a=R.getShaderSource(P[a]),w[c>>
-2]=a?a.length+1:0):w[c>>2]=R.getShaderParameter(P[a],b):Q(1281)},u:function(a){var b=Yc[a];if(!b){switch(a){case 7939:b=R.getSupportedExtensions()||[];b=b.concat(b.map(function(d){return"GL_"+d}));b=od(b.join(" "));break;case 7936:case 7937:case 37445:case 37446:(b=R.getParameter(a))||Q(1280);b=b&&od(b);break;case 7938:b=od("OpenGL ES 2.0 ("+R.getParameter(7938)+")");break;case 35724:b=R.getParameter(35724);var c=b.match(/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/);null!==c&&(3==c[1].length&&(c[1]+=
-"0"),b="OpenGL ES GLSL ES "+c[1]+" ("+b+")");b=od(b);break;default:Q(1280)}Yc[a]=b}return b},B:function(a,b){b=D(b);if(a=O[a]){qd(a);var c=a.If,d=0,e=b,f=pd(b);0<f&&(d=parseInt(b.slice(f+1))>>>0,e=b.slice(0,f));if((e=a.fg[e])&&d<e[0]&&(d+=e[1],c[d]=c[d]||R.getUniformLocation(a,b)))return d}else Q(1281);return-1},Aa:function(a){a=O[a];R.linkProgram(a);a.If=0;a.fg={}},La:function(a,b){3317==a&&(Zc=b);R.pixelStorei(a,b)},Ga:function(a,b,c,d,e,f,g){(g=td(f,e,c,d,g))?R.readPixels(a,b,c,d,e,f,g):Q(1280)},
-Ea:function(a,b,c,d){b=cd(b,c,d);R.shaderSource(P[a],b)},Ja:function(a,b,c,d,e,f,g,m,q){R.texImage2D(a,b,c,d,e,f,g,m,q?td(m,g,d,e,q):null)},W:function(a,b,c){R.texParameterf(a,b,c)},p:function(a,b,c){R.texParameteri(a,b,c)},_a:function(a,b){R.uniform1i(S(a),b)},ib:function(a,b,c,d,e){R.uniform4f(S(a),b,c,d,e)},Ib:function(a,b,c,d){if(18>=b){var e=ud[16*b-1],f=A;d>>=2;for(var g=0;g<16*b;g+=16){var m=d+g;e[g]=f[m];e[g+1]=f[m+1];e[g+2]=f[m+2];e[g+3]=f[m+3];e[g+4]=f[m+4];e[g+5]=f[m+5];e[g+6]=f[m+6];e[g+
-7]=f[m+7];e[g+8]=f[m+8];e[g+9]=f[m+9];e[g+10]=f[m+10];e[g+11]=f[m+11];e[g+12]=f[m+12];e[g+13]=f[m+13];e[g+14]=f[m+14];e[g+15]=f[m+15]}}else e=A.subarray(d>>2,d+64*b>>2);R.uniformMatrix4fv(S(a),!!c,e)},E:function(a){a=O[a];R.useProgram(a);R.qg=a},r:function(a,b,c,d,e,f){R.vertexAttribPointer(a,b,c,!!d,e,f)},vc:function(a,b,c,d){R.viewport(a,b,c,d)},K:function(a,b,c,d){var e;for(e=0;e<U.length&&null!==U[e];e++);if(0<e)throw"glfwCreateWindow only supports one window at time currently";var f=e+1;if(0>=
-a||0>=b)f=0;else{d?be():ne(a,b);for(e=0;e<U.length&&null==U[e];e++);d=0<we[139265];e==U.length&&(d?h.Jf=Yd(h.canvas,!0,!0,{antialias:1<we[135181],depth:0<we[135173],stencil:0<we[135174],alpha:0<we[135172]}):Sd());!h.Jf&&d?f=0:(a=new ve(f,a,b,c),f-1==U.length?U.push(a):U[f-1]=a,V=a,f=a.id)}return f},oa:function(){we=ze},Fe:function(a){a:{if(a=T(a)){a.Jg&&dynCall_vi.apply(null,[a.Jg,a.id]);U[a.id-1]=null;V.id==a.id&&(V=null);for(a=0;a<U.length;a++)if(null!==U[a]){a=void 0;break a}h.Jf=void 0}a=void 0}return a},
-L:function(){return 1},s:function(){return Mc()/1E3-ye},na:function(a,b){wa(b,0,"i32");return 0},pa:function(){if(U)return 1;ye=Mc()/1E3;we=ze;U=[];V=null;window.addEventListener("gamepadconnected",Fe,!0);window.addEventListener("gamepaddisconnected",He,!0);window.addEventListener("keydown",Ie,!0);window.addEventListener("keypress",Ce,!0);window.addEventListener("keyup",Je,!0);window.addEventListener("blur",Ke,!0);h.canvas.addEventListener("touchmove",Le,!0);h.canvas.addEventListener("touchstart",
-Re,!0);h.canvas.addEventListener("touchcancel",Se,!0);h.canvas.addEventListener("touchend",Se,!0);h.canvas.addEventListener("mousemove",Le,!0);h.canvas.addEventListener("mousedown",Re,!0);h.canvas.addEventListener("mouseup",Se,!0);h.canvas.addEventListener("wheel",Te,!0);h.canvas.addEventListener("mousewheel",Te,!0);h.canvas.addEventListener("mouseenter",Ne,!0);h.canvas.addEventListener("mouseleave",Oe,!0);h.canvas.addEventListener("drop",af,!0);h.canvas.addEventListener("dragover",bf,!0);me.push(function(a,
-b){if(V){var c=!0;document.fullscreen||document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen?(V.Gg=V.x,V.Hg=V.y,V.Fg=V.width,V.Eg=V.height,V.x=V.y=0,V.width=screen.width,V.height=screen.height,V.kg=!0):1==V.kg?(V.x=V.Gg,V.y=V.Hg,V.width=V.Fg,V.height=V.Eg,V.kg=!1):V.width!=a||V.height!=b?(V.width=a,V.height=b):c=!1;c&&(ne(V.width,V.height,!0),Ue(),We())}});return 1},ca:function(){},ha:function(a,b){if(a=T(a)){var c=a.Uf;a.Uf=b;b=c}else b=null;return b},da:function(a,b){a=T(a);if(!a)return null;
-var c=a.Kf;a.Kf=b;return c},fa:function(a,b){if(a=T(a)){var c=a.Vf;a.Vf=b;b=c}else b=null;return b},ja:function(a,b){if(a=T(a)){var c=a.Of;a.Of=b;b=c}else b=null;return b},qa:function(a){var b=xe;xe=a;return b},ia:function(a,b){if(a=T(a)){var c=a.Yf;a.Yf=b;b=c}else b=null;return b},ga:function(a,b){if(a=T(a)){var c=a.$f;a.$f=b;b=c}else b=null;return b},ea:function(a,b){if(a=T(a)){var c=a.ag;a.ag=b;b=c}else b=null;return b},ka:function(a,b){a=T(a);if(!a)return null;var c=a.Kg;a.Kg=b;return c},la:function(a,
-b){a=T(a);if(!a)return null;var c=a.Lg;a.Lg=b;return c},Ae:function(a,b){if(a=T(a))a.ah=b},ma:function(a,b){if(a=T(a)){var c=a.gg;a.gg=b;b=c}else b=null;return b},Ee:function(){},He:function(a){a=Math.abs(a);0==a?oe(0,0):oe(1,a)},ba:function(){window.removeEventListener("gamepadconnected",Fe,!0);window.removeEventListener("gamepaddisconnected",He,!0);window.removeEventListener("keydown",Ie,!0);window.removeEventListener("keypress",Ce,!0);window.removeEventListener("keyup",Je,!0);window.removeEventListener("blur",
-Ke,!0);h.canvas.removeEventListener("touchmove",Le,!0);h.canvas.removeEventListener("touchstart",Re,!0);h.canvas.removeEventListener("touchcancel",Se,!0);h.canvas.removeEventListener("touchend",Se,!0);h.canvas.removeEventListener("mousemove",Le,!0);h.canvas.removeEventListener("mousedown",Re,!0);h.canvas.removeEventListener("mouseup",Se,!0);h.canvas.removeEventListener("wheel",Te,!0);h.canvas.removeEventListener("mousewheel",Te,!0);h.canvas.removeEventListener("mouseenter",Ne,!0);h.canvas.removeEventListener("mouseleave",
-Oe,!0);h.canvas.removeEventListener("drop",af,!0);h.canvas.removeEventListener("dragover",bf,!0);h.canvas.width=h.canvas.height=1;V=U=null},k:function(a,b){we[a]=b},h:nf,j:of,d:pf,c:qf,n:rf,Zd:sf,A:tf,Ha:uf,t:vf,e:xf,g:yf,f:zf,I:Af,$c:function(a){fb||(fb=!0,bb());var b=new Date(w[a+20>>2]+1900,w[a+16>>2],w[a+12>>2],w[a+8>>2],w[a+4>>2],w[a>>2],0),c=w[a+32>>2],d=b.getTimezoneOffset(),e=new Date(b.getFullYear(),0,1),f=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),g=e.getTimezoneOffset(),m=Math.min(g,
-f);0>c?w[a+32>>2]=Number(f!=g&&m==d):0<c!=(m==d)&&(f=Math.max(g,f),b.setTime(b.getTime()+6E4*((0<c?m:f)-d)));w[a+24>>2]=b.getDay();w[a+28>>2]=(b.getTime()-e.getTime())/864E5|0;w[a>>2]=b.getSeconds();w[a+4>>2]=b.getMinutes();w[a+8>>2]=b.getHours();w[a+12>>2]=b.getDate();w[a+16>>2]=b.getMonth();return b.getTime()/1E3|0},b:function(a){ua=a},G:function(a,b,c,d){function e(n,x,F){for(n="number"===typeof n?n.toString():n||"";n.length<x;)n=F[0]+n;return n}function f(n,x){return e(n,x,"0")}function g(n,x){function F(hc){return 0>
-hc?-1:0<hc?1:0}var ha;0===(ha=F(n.getFullYear()-x.getFullYear()))&&0===(ha=F(n.getMonth()-x.getMonth()))&&(ha=F(n.getDate()-x.getDate()));return ha}function m(n){switch(n.getDay()){case 0:return new Date(n.getFullYear()-1,11,29);case 1:return n;case 2:return new Date(n.getFullYear(),0,3);case 3:return new Date(n.getFullYear(),0,2);case 4:return new Date(n.getFullYear(),0,1);case 5:return new Date(n.getFullYear()-1,11,31);case 6:return new Date(n.getFullYear()-1,11,30)}}function q(n){n=gf(new Date(n.uf+
-1900,0,1),n.dg);var x=new Date(n.getFullYear()+1,0,4),F=m(new Date(n.getFullYear(),0,4));x=m(x);return 0>=g(F,n)?0>=g(x,n)?n.getFullYear()+1:n.getFullYear():n.getFullYear()-1}var t=w[d+40>>2];d={eh:w[d>>2],dh:w[d+4>>2],bg:w[d+8>>2],Qf:w[d+12>>2],Nf:w[d+16>>2],uf:w[d+20>>2],cg:w[d+24>>2],dg:w[d+28>>2],zh:w[d+32>>2],bh:w[d+36>>2],fh:t?D(t):""};c=D(c);t={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S",
-"%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var u in t)c=c.replace(new RegExp(u,"g"),t[u]);var v="Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),B="January February March April May June July August September October November December".split(" ");t={"%a":function(n){return v[n.cg].substring(0,3)},
-"%A":function(n){return v[n.cg]},"%b":function(n){return B[n.Nf].substring(0,3)},"%B":function(n){return B[n.Nf]},"%C":function(n){return f((n.uf+1900)/100|0,2)},"%d":function(n){return f(n.Qf,2)},"%e":function(n){return e(n.Qf,2," ")},"%g":function(n){return q(n).toString().substring(2)},"%G":function(n){return q(n)},"%H":function(n){return f(n.bg,2)},"%I":function(n){n=n.bg;0==n?n=12:12<n&&(n-=12);return f(n,2)},"%j":function(n){return f(n.Qf+df(cf(n.uf+1900)?ef:ff,n.Nf-1),3)},"%m":function(n){return f(n.Nf+
-1,2)},"%M":function(n){return f(n.dh,2)},"%n":function(){return"\n"},"%p":function(n){return 0<=n.bg&&12>n.bg?"AM":"PM"},"%S":function(n){return f(n.eh,2)},"%t":function(){return"\t"},"%u":function(n){return n.cg||7},"%U":function(n){var x=new Date(n.uf+1900,0,1),F=0===x.getDay()?x:gf(x,7-x.getDay());n=new Date(n.uf+1900,n.Nf,n.Qf);return 0>g(F,n)?f(Math.ceil((31-F.getDate()+(df(cf(n.getFullYear())?ef:ff,n.getMonth()-1)-31)+n.getDate())/7),2):0===g(F,x)?"01":"00"},"%V":function(n){var x=new Date(n.uf+
-1901,0,4),F=m(new Date(n.uf+1900,0,4));x=m(x);var ha=gf(new Date(n.uf+1900,0,1),n.dg);return 0>g(ha,F)?"53":0>=g(x,ha)?"01":f(Math.ceil((F.getFullYear()<n.uf+1900?n.dg+32-F.getDate():n.dg+1-F.getDate())/7),2)},"%w":function(n){return n.cg},"%W":function(n){var x=new Date(n.uf,0,1),F=1===x.getDay()?x:gf(x,0===x.getDay()?1:7-x.getDay()+1);n=new Date(n.uf+1900,n.Nf,n.Qf);return 0>g(F,n)?f(Math.ceil((31-F.getDate()+(df(cf(n.getFullYear())?ef:ff,n.getMonth()-1)-31)+n.getDate())/7),2):0===g(F,x)?"01":"00"},
-"%y":function(n){return(n.uf+1900).toString().substring(2)},"%Y":function(n){return n.uf+1900},"%z":function(n){n=n.bh;var x=0<=n;n=Math.abs(n)/60;return(x?"+":"-")+String("0000"+(n/60*100+n%60)).slice(-4)},"%Z":function(n){return n.fh},"%%":function(){return"%"}};for(u in t)c.includes(u)&&(c=c.replace(new RegExp(u,"g"),t[u](d)));u=rb(c,!1);if(u.length>b)return 0;r.set(u,a);return u.length-1},$:function(a){var b=Date.now()/1E3|0;a&&(w[a>>2]=b);return b},Qc:function(a,b){if(1!==b)return w[mf()>>2]=
-28,0;var c=Date.now();w[a>>2]=c/1E3|0;w[a+4>>2]=c%1E3*1E6|0;return b}};
-(function(){function a(f){f=f.exports;f=jf(f);h.asm=f;za=h.asm.Je;Ia=f=za.buffer;h.HEAP8=r=new Int8Array(f);h.HEAP16=xa=new Int16Array(f);h.HEAP32=w=new Int32Array(f);h.HEAPU8=C=new Uint8Array(f);h.HEAPU16=Ja=new Uint16Array(f);h.HEAPU32=Ka=new Uint32Array(f);h.HEAPF32=A=new Float32Array(f);h.HEAPF64=ya=new Float64Array(f);Ma.unshift(h.asm.Ke);Sa--;h.monitorRunDependencies&&h.monitorRunDependencies(Sa);0==Sa&&(null!==Ta&&(clearInterval(Ta),Ta=null),Ua&&(f=Ua,Ua=null,f()))}function b(f){a(f.instance)}
-function c(f){return Ya().then(function(g){return WebAssembly.instantiate(g,d)}).then(function(g){return g}).then(f,function(g){k("failed to asynchronously prepare wasm: "+g);p(g)})}var d={a:Bf};Sa++;h.monitorRunDependencies&&h.monitorRunDependencies(Sa);if(h.instantiateWasm)try{var e=h.instantiateWasm(d,a);return e=jf(e)}catch(f){return k("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return va||"function"!==typeof WebAssembly.instantiateStreaming||Va()||G.startsWith("file://")||
-"function"!==typeof fetch?c(b):fetch(G,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,d).then(b,function(g){k("wasm streaming compile failed: "+g);k("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})();h.___wasm_call_ctors=function(){return(h.___wasm_call_ctors=h.asm.Ke).apply(null,arguments)};h._main=function(){return(h._main=h.asm.Le).apply(null,arguments)};
-var mf=h.___errno_location=function(){return(mf=h.___errno_location=h.asm.Ne).apply(null,arguments)},Da=h._malloc=function(){return(Da=h._malloc=h.asm.Oe).apply(null,arguments)},$e=h._free=function(){return($e=h._free=h.asm.Pe).apply(null,arguments)},eb=h.__get_tzname=function(){return(eb=h.__get_tzname=h.asm.Qe).apply(null,arguments)},db=h.__get_daylight=function(){return(db=h.__get_daylight=h.asm.Re).apply(null,arguments)},cb=h.__get_timezone=function(){return(cb=h.__get_timezone=h.asm.Se).apply(null,
-arguments)},X=h.stackSave=function(){return(X=h.stackSave=h.asm.Te).apply(null,arguments)},Y=h.stackRestore=function(){return(Y=h.stackRestore=h.asm.Ue).apply(null,arguments)};h.stackAlloc=function(){return(h.stackAlloc=h.asm.Ve).apply(null,arguments)};
-var Z=h._setThrew=function(){return(Z=h._setThrew=h.asm.We).apply(null,arguments)},dynCall_iii=h.dynCall_iii=function(){return(dynCall_iii=h.dynCall_iii=h.asm.Xe).apply(null,arguments)},xd=h.dynCall_iiii=function(){return(xd=h.dynCall_iiii=h.asm.Ye).apply(null,arguments)},Ve=h.dynCall_viii=function(){return(Ve=h.dynCall_viii=h.asm.Ze).apply(null,arguments)},dynCall_vii=h.dynCall_vii=function(){return(dynCall_vii=h.dynCall_vii=h.asm._e).apply(null,arguments)},Cf=h.dynCall_ii=function(){return(Cf=h.dynCall_ii=
-h.asm.$e).apply(null,arguments)},dynCall_v=h.dynCall_v=function(){return(dynCall_v=h.dynCall_v=h.asm.af).apply(null,arguments)},Df=h.dynCall_iiiii=function(){return(Df=h.dynCall_iiiii=h.asm.bf).apply(null,arguments)},dynCall_vi=h.dynCall_vi=function(){return(dynCall_vi=h.dynCall_vi=h.asm.cf).apply(null,arguments)},Qe=h.dynCall_viiii=function(){return(Qe=h.dynCall_viiii=h.asm.df).apply(null,arguments)},Ef=h.dynCall_viiiiiiiii=function(){return(Ef=h.dynCall_viiiiiiiii=h.asm.ef).apply(null,arguments)},
-Ff=h.dynCall_iiiiiiii=function(){return(Ff=h.dynCall_iiiiiiii=h.asm.ff).apply(null,arguments)},Gf=h.dynCall_iiiiiii=function(){return(Gf=h.dynCall_iiiiiii=h.asm.gf).apply(null,arguments)},Hf=h.dynCall_iid=function(){return(Hf=h.dynCall_iid=h.asm.hf).apply(null,arguments)},Ee=h.dynCall_viiiii=function(){return(Ee=h.dynCall_viiiii=h.asm.jf).apply(null,arguments)},Me=h.dynCall_vidd=function(){return(Me=h.dynCall_vidd=h.asm.kf).apply(null,arguments)};
-h._asyncify_start_unwind=function(){return(h._asyncify_start_unwind=h.asm.lf).apply(null,arguments)};h._asyncify_stop_unwind=function(){return(h._asyncify_stop_unwind=h.asm.mf).apply(null,arguments)};h._asyncify_start_rewind=function(){return(h._asyncify_start_rewind=h.asm.nf).apply(null,arguments)};h._asyncify_stop_rewind=function(){return(h._asyncify_stop_rewind=h.asm.of).apply(null,arguments)};
-function xf(a,b,c){var d=X();try{dynCall_vii(a,b,c)}catch(e){Y(d);if(e!==e+0&&"longjmp"!==e)throw e;Z(1,0)}}function nf(a,b){var c=X();try{return Cf(a,b)}catch(d){Y(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function uf(a){var b=X();try{dynCall_v(a)}catch(c){Y(b);if(c!==c+0&&"longjmp"!==c)throw c;Z(1,0)}}function vf(a,b){var c=X();try{dynCall_vi(a,b)}catch(d){Y(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}
-function zf(a,b,c,d,e){var f=X();try{Qe(a,b,c,d,e)}catch(g){Y(f);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}function pf(a,b,c){var d=X();try{return dynCall_iii(a,b,c)}catch(e){Y(d);if(e!==e+0&&"longjmp"!==e)throw e;Z(1,0)}}function qf(a,b,c,d){var e=X();try{return xd(a,b,c,d)}catch(f){Y(e);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function Af(a,b,c,d,e,f,g,m,q,t){var u=X();try{Ef(a,b,c,d,e,f,g,m,q,t)}catch(v){Y(u);if(v!==v+0&&"longjmp"!==v)throw v;Z(1,0)}}
-function tf(a,b,c,d,e,f,g,m){var q=X();try{return Ff(a,b,c,d,e,f,g,m)}catch(t){Y(q);if(t!==t+0&&"longjmp"!==t)throw t;Z(1,0)}}function yf(a,b,c,d){var e=X();try{Ve(a,b,c,d)}catch(f){Y(e);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function sf(a,b,c,d,e,f,g){var m=X();try{return Gf(a,b,c,d,e,f,g)}catch(q){Y(m);if(q!==q+0&&"longjmp"!==q)throw q;Z(1,0)}}function rf(a,b,c,d,e){var f=X();try{return Df(a,b,c,d,e)}catch(g){Y(f);if(g!==g+0&&"longjmp"!==g)throw g;Z(1,0)}}
-function of(a,b,c){var d=X();try{return Hf(a,b,c)}catch(e){Y(d);if(e!==e+0&&"longjmp"!==e)throw e;Z(1,0)}}var If;function qa(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Ua=function Jf(){If||Kf();If||(Ua=Jf)};
-function Kf(){function a(){if(!If&&(If=!0,h.calledRun=!0,!Aa)){h.noFSInit||fc||(fc=!0,ec(),h.stdin=h.stdin,h.stdout=h.stdout,h.stderr=h.stderr,h.stdin?lc("stdin",h.stdin):Wb("/dev/tty","/dev/stdin"),h.stdout?lc("stdout",null,h.stdout):Wb("/dev/tty","/dev/stdout"),h.stderr?lc("stderr",null,h.stderr):Wb("/dev/tty1","/dev/stderr"),$b("/dev/stdin",0),$b("/dev/stdout",1),$b("/dev/stderr",1));Db=!1;M.root=Sb(M,null);Za(Ma);Za(Na);if(h.onRuntimeInitialized)h.onRuntimeInitialized();if(Lf){var b=h._main;try{var c=
-b(0,0);qe(c)}catch(d){$a(d)}finally{}}if(h.postRun)for("function"==typeof h.postRun&&(h.postRun=[h.postRun]);h.postRun.length;)b=h.postRun.shift(),Pa.unshift(b);Za(Pa)}}if(!(0<Sa)){if(h.preRun)for("function"==typeof h.preRun&&(h.preRun=[h.preRun]);h.preRun.length;)Ra();Za(La);0<Sa||(h.setStatus?(h.setStatus("Running..."),setTimeout(function(){setTimeout(function(){h.setStatus("")},1);a()},1)):a())}}h.run=Kf;
-function qe(a){Ba=a;noExitRuntime||0<ra||(Qa=!0);Ba=a;if(!(noExitRuntime||0<ra)){if(h.onExit)h.onExit(a);Aa=!0}ea(a,new qa(a))}if(h.preInit)for("function"==typeof h.preInit&&(h.preInit=[h.preInit]);0<h.preInit.length;)h.preInit.pop()();var Lf=!0;h.noInitialRun&&(Lf=!1);Kf();
diff --git a/build/temp/game.wasm b/build/temp/game.wasm
deleted file mode 100755
index facb565..0000000
--- a/build/temp/game.wasm
+++ /dev/null
Binary files differ
diff --git a/build/template/game.c b/build/template/game.c
new file mode 100644
index 0000000..619b961
--- /dev/null
+++ b/build/template/game.c
@@ -0,0 +1,17 @@
+// emcc -s WASM=1 -Os -I ../include/ hello_ruby.c web/lib/libmruby.a -o hello_ruby.js --closure 1
+
+#include <mruby.h>
+#include <mruby/compile.h>
+
+ int
+main(void)
+{
+ mrb_state *mrb = mrb_open();
+ if (!mrb) { /* handle error */ }
+ // mrb_load_string(mrb, str) to load from NULL terminated strings
+ // mrb_load_nstring(mrb, str, len) for strings without null terminator or with known length
+ mrb_load_string(mrb, "puts 'hello world'");
+ mrb_load_string(mrb, "Ye.c_method");
+ mrb_close(mrb);
+ return 0;
+}
diff --git a/mruby b/mruby
-Subproject d5f38e0504132a1ea94c451c8abc8a05fe723ac
+Subproject 22317bdf38bc3f598a6c3d05a477d9a77ab6a39