{"version":3,"sources":["jsdelivr-header.js","/gh/lavavu/lavavu.github.io@1.8.31/LavaVu-amalgamated.js"],"names":[],"mappings":"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CjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,GAAK,OAAO,GACjB,KAAK,IAAK,OAAO,GACjB,KAAK,IAAK,OAAO,GACjB,KAAK,IAAK,OAAO,GACjB,KAAK,IAAK,OAAO,GAEjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,EAAK,OAAO,IACjB,KAAK,EAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,GAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB,KAAK,IAAK,OAAO,IACjB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","file":"/gh/lavavu/lavavu.github.io@1.8.31/LavaVu-amalgamated.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /gh/lavavu/lavavu.github.io@1.8.31/LavaVu-amalgamated.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.dat=t():e.dat=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"\",t(0)}([function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(1),r=o(i);t.default=r.default,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(2),r=o(i),a=n(6),l=o(a),s=n(3),u=o(s),d=n(7),c=o(d),f=n(8),_=o(f),p=n(10),h=o(p),m=n(11),b=o(m),g=n(12),v=o(g),y=n(13),w=o(y),x=n(14),E=o(x),C=n(15),A=o(C),S=n(16),k=o(S),O=n(9),T=o(O),R=n(17),L=o(R);t.default={color:{Color:r.default,math:l.default,interpret:u.default},controllers:{Controller:c.default,BooleanController:_.default,OptionController:h.default,StringController:b.default,NumberController:v.default,NumberControllerBox:w.default,NumberControllerSlider:E.default,FunctionController:A.default,ColorController:k.default},dom:{dom:T.default},gui:{GUI:L.default},GUI:L.default},e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t,n){Object.defineProperty(e,t,{get:function(){return\"RGB\"===this.__state.space?this.__state[t]:(h.recalculateRGB(this,t,n),this.__state[t])},set:function(e){\"RGB\"!==this.__state.space&&(h.recalculateRGB(this,t,n),this.__state.space=\"RGB\"),this.__state[t]=e}})}function a(e,t){Object.defineProperty(e,t,{get:function(){return\"HSV\"===this.__state.space?this.__state[t]:(h.recalculateHSV(this),this.__state[t])},set:function(e){\"HSV\"!==this.__state.space&&(h.recalculateHSV(this),this.__state.space=\"HSV\"),this.__state[t]=e}})}t.__esModule=!0;var l=n(3),s=o(l),u=n(6),d=o(u),c=n(4),f=o(c),_=n(5),p=o(_),h=function(){function e(){if(i(this,e),this.__state=s.default.apply(this,arguments),this.__state===!1)throw new Error(\"Failed to interpret color arguments\");this.__state.a=this.__state.a||1}return e.prototype.toString=function(){return(0,f.default)(this)},e.prototype.toHexString=function(){return(0,f.default)(this,!0)},e.prototype.toOriginal=function(){return this.__state.conversion.write(this)},e}();h.recalculateRGB=function(e,t,n){if(\"HEX\"===e.__state.space)e.__state[t]=d.default.component_from_hex(e.__state.hex,n);else{if(\"HSV\"!==e.__state.space)throw new Error(\"Corrupted color state\");p.default.extend(e.__state,d.default.hsv_to_rgb(e.__state.h,e.__state.s,e.__state.v))}},h.recalculateHSV=function(e){var t=d.default.rgb_to_hsv(e.r,e.g,e.b);p.default.extend(e.__state,{s:t.s,v:t.v}),p.default.isNaN(t.h)?p.default.isUndefined(e.__state.h)&&(e.__state.h=0):e.__state.h=t.h},h.COMPONENTS=[\"r\",\"g\",\"b\",\"h\",\"s\",\"v\",\"hex\",\"a\"],r(h.prototype,\"r\",2),r(h.prototype,\"g\",1),r(h.prototype,\"b\",0),a(h.prototype,\"h\"),a(h.prototype,\"s\"),a(h.prototype,\"v\"),Object.defineProperty(h.prototype,\"a\",{get:function(){return this.__state.a},set:function(e){this.__state.a=e}}),Object.defineProperty(h.prototype,\"hex\",{get:function(){return\"HEX\"!==!this.__state.space&&(this.__state.hex=d.default.rgb_to_hex(this.r,this.g,this.b)),this.__state.hex},set:function(e){this.__state.space=\"HEX\",this.__state.hex=e}}),t.default=h,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(4),r=o(i),a=n(5),l=o(a),s=[{litmus:l.default.isString,conversions:{THREE_CHAR_HEX:{read:function(e){var t=e.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i);return null!==t&&{space:\"HEX\",hex:parseInt(\"0x\"+t[1].toString()+t[1].toString()+t[2].toString()+t[2].toString()+t[3].toString()+t[3].toString(),0)}},write:r.default},SIX_CHAR_HEX:{read:function(e){var t=e.match(/^#([A-F0-9]{6})$/i);return null!==t&&{space:\"HEX\",hex:parseInt(\"0x\"+t[1].toString(),0)}},write:r.default},CSS_RGB:{read:function(e){var t=e.match(/^rgb\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);return null!==t&&{space:\"RGB\",r:parseFloat(t[1]),g:parseFloat(t[2]),b:parseFloat(t[3])}},write:r.default},CSS_RGBA:{read:function(e){var t=e.match(/^rgba\\(\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*,\\s*(.+)\\s*\\)/);return null!==t&&{space:\"RGB\",r:parseFloat(t[1]),g:parseFloat(t[2]),b:parseFloat(t[3]),a:parseFloat(t[4])}},write:r.default}}},{litmus:l.default.isNumber,conversions:{HEX:{read:function(e){return{space:\"HEX\",hex:e,conversionName:\"HEX\"}},write:function(e){return e.hex}}}},{litmus:l.default.isArray,conversions:{RGB_ARRAY:{read:function(e){return 3===e.length&&{space:\"RGB\",r:e[0],g:e[1],b:e[2]}},write:function(e){return[e.r,e.g,e.b]}},RGBA_ARRAY:{read:function(e){return 4===e.length&&{space:\"RGB\",r:e[0],g:e[1],b:e[2],a:e[3]}},write:function(e){return[e.r,e.g,e.b,e.a]}}}},{litmus:l.default.isObject,conversions:{RGBA_OBJ:{read:function(e){return!!(l.default.isNumber(e.r)&&l.default.isNumber(e.g)&&l.default.isNumber(e.b)&&l.default.isNumber(e.a))&&{space:\"RGB\",r:e.r,g:e.g,b:e.b,a:e.a}},write:function(e){return{r:e.r,g:e.g,b:e.b,a:e.a}}},RGB_OBJ:{read:function(e){return!!(l.default.isNumber(e.r)&&l.default.isNumber(e.g)&&l.default.isNumber(e.b))&&{space:\"RGB\",r:e.r,g:e.g,b:e.b}},write:function(e){return{r:e.r,g:e.g,b:e.b}}},HSVA_OBJ:{read:function(e){return!!(l.default.isNumber(e.h)&&l.default.isNumber(e.s)&&l.default.isNumber(e.v)&&l.default.isNumber(e.a))&&{space:\"HSV\",h:e.h,s:e.s,v:e.v,a:e.a}},write:function(e){return{h:e.h,s:e.s,v:e.v,a:e.a}}},HSV_OBJ:{read:function(e){return!!(l.default.isNumber(e.h)&&l.default.isNumber(e.s)&&l.default.isNumber(e.v))&&{space:\"HSV\",h:e.h,s:e.s,v:e.v}},write:function(e){return{h:e.h,s:e.s,v:e.v}}}}}],u=void 0,d=void 0,c=function(){d=!1;var e=arguments.length>1?l.default.toArray(arguments):arguments[0];return l.default.each(s,function(t){if(t.litmus(e))return l.default.each(t.conversions,function(t,n){if(u=t.read(e),d===!1&&u!==!1)return d=u,u.conversionName=n,u.conversion=t,l.default.BREAK}),l.default.BREAK}),d};t.default=c,e.exports=t.default},function(e,t){\"use strict\";t.__esModule=!0,t.default=function(e,t){var n=e.__state.conversionName.toString(),o=Math.round(e.r),i=Math.round(e.g),r=Math.round(e.b),a=e.a,l=Math.round(e.h),s=e.s.toFixed(1),u=e.v.toFixed(1);if(t||\"THREE_CHAR_HEX\"===n||\"SIX_CHAR_HEX\"===n){for(var d=e.hex.toString(16);d.length<6;)d=\"0\"+d;return\"#\"+d}return\"CSS_RGB\"===n?\"rgb(\"+o+\",\"+i+\",\"+r+\")\":\"CSS_RGBA\"===n?\"rgba(\"+o+\",\"+i+\",\"+r+\",\"+a+\")\":\"HEX\"===n?\"0x\"+e.hex.toString(16):\"RGB_ARRAY\"===n?\"[\"+o+\",\"+i+\",\"+r+\"]\":\"RGBA_ARRAY\"===n?\"[\"+o+\",\"+i+\",\"+r+\",\"+a+\"]\":\"RGB_OBJ\"===n?\"{r:\"+o+\",g:\"+i+\",b:\"+r+\"}\":\"RGBA_OBJ\"===n?\"{r:\"+o+\",g:\"+i+\",b:\"+r+\",a:\"+a+\"}\":\"HSV_OBJ\"===n?\"{h:\"+l+\",s:\"+s+\",v:\"+u+\"}\":\"HSVA_OBJ\"===n?\"{h:\"+l+\",s:\"+s+\",v:\"+u+\",a:\"+a+\"}\":\"unknown format\"},e.exports=t.default},function(e,t){\"use strict\";t.__esModule=!0;var n=Array.prototype.forEach,o=Array.prototype.slice,i={BREAK:{},extend:function(e){return this.each(o.call(arguments,1),function(t){var n=this.isObject(t)?Object.keys(t):[];n.forEach(function(n){this.isUndefined(t[n])||(e[n]=t[n])}.bind(this))},this),e},defaults:function(e){return this.each(o.call(arguments,1),function(t){var n=this.isObject(t)?Object.keys(t):[];n.forEach(function(n){this.isUndefined(e[n])&&(e[n]=t[n])}.bind(this))},this),e},compose:function(){var e=o.call(arguments);return function(){for(var t=o.call(arguments),n=e.length-1;n>=0;n--)t=[e[n].apply(this,t)];return t[0]}},each:function(e,t,o){if(e)if(n&&e.forEach&&e.forEach===n)e.forEach(t,o);else if(e.length===e.length+0){var i=void 0,r=void 0;for(i=0,r=e.length;i<r;i++)if(i in e&&t.call(o,e[i],i)===this.BREAK)return}else for(var a in e)if(t.call(o,e[a],a)===this.BREAK)return},defer:function(e){setTimeout(e,0)},debounce:function(e,t,n){var o=void 0;return function(){function i(){o=null,n||e.apply(r,a)}var r=this,a=arguments,l=n||!o;clearTimeout(o),o=setTimeout(i,t),l&&e.apply(r,a)}},toArray:function(e){return e.toArray?e.toArray():o.call(e)},isUndefined:function(e){return void 0===e},isNull:function(e){return null===e},isNaN:function(e){function t(t){return e.apply(this,arguments)}return t.toString=function(){return e.toString()},t}(function(e){return isNaN(e)}),isArray:Array.isArray||function(e){return e.constructor===Array},isObject:function(e){return e===Object(e)},isNumber:function(e){return e===e+0},isString:function(e){return e===e+\"\"},isBoolean:function(e){return e===!1||e===!0},isFunction:function(e){return\"[object Function]\"===Object.prototype.toString.call(e)}};t.default=i,e.exports=t.default},function(e,t){\"use strict\";t.__esModule=!0;var n=void 0,o={hsv_to_rgb:function(e,t,n){var o=Math.floor(e/60)%6,i=e/60-Math.floor(e/60),r=n*(1-t),a=n*(1-i*t),l=n*(1-(1-i)*t),s=[[n,l,r],[a,n,r],[r,n,l],[r,a,n],[l,r,n],[n,r,a]][o];return{r:255*s[0],g:255*s[1],b:255*s[2]}},rgb_to_hsv:function(e,t,n){var o=Math.min(e,t,n),i=Math.max(e,t,n),r=i-o,a=void 0,l=void 0;return 0===i?{h:NaN,s:0,v:0}:(l=r/i,a=e===i?(t-n)/r:t===i?2+(n-e)/r:4+(e-t)/r,a/=6,a<0&&(a+=1),{h:360*a,s:l,v:i/255})},rgb_to_hex:function(e,t,n){var o=this.hex_with_component(0,2,e);return o=this.hex_with_component(o,1,t),o=this.hex_with_component(o,0,n)},component_from_hex:function(e,t){return e>>8*t&255},hex_with_component:function(e,t,o){return o<<(n=8*t)|e&~(255<<n)}};t.default=o,e.exports=t.default},function(e,t){\"use strict\";function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0;var o=function(){function e(t,o){n(this,e),this.initialValue=t[o],this.domElement=document.createElement(\"div\"),this.object=t,this.property=o,this.__onChange=void 0,this.__onFinishChange=void 0}return e.prototype.onChange=function(e){return this.__onChange=e,this},e.prototype.onFinishChange=function(e){return this.__onFinishChange=e,this},e.prototype.setValue=function(e){return this.object[this.property]=e,this.__onChange&&this.__onChange.call(this,e),this.updateDisplay(),this},e.prototype.getValue=function(){return this.object[this.property]},e.prototype.updateDisplay=function(){return this},e.prototype.isModified=function(){return this.initialValue!==this.getValue()},e}();t.default=o,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function a(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.__esModule=!0;var l=n(7),s=o(l),u=n(9),d=o(u),c=function(e){function t(n,o){function a(){s.setValue(!s.__prev)}i(this,t);var l=r(this,e.call(this,n,o)),s=l;return l.__prev=l.getValue(),l.__checkbox=document.createElement(\"input\"),l.__checkbox.setAttribute(\"type\",\"checkbox\"),d.default.bind(l.__checkbox,\"change\",a,!1),l.domElement.appendChild(l.__checkbox),l.updateDisplay(),l}return a(t,e),t.prototype.setValue=function(t){var n=e.prototype.setValue.call(this,t);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),this.__prev=this.getValue(),n},t.prototype.updateDisplay=function(){return this.getValue()===!0?(this.__checkbox.setAttribute(\"checked\",\"checked\"),this.__checkbox.checked=!0,this.__prev=!0):(this.__checkbox.checked=!1,this.__prev=!1),e.prototype.updateDisplay.call(this)},t}(s.default);t.default=c,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e){if(\"0\"===e||a.default.isUndefined(e))return 0;var t=e.match(u);return a.default.isNull(t)?0:parseFloat(t[1])}t.__esModule=!0;var r=n(5),a=o(r),l={HTMLEvents:[\"change\"],MouseEvents:[\"click\",\"mousemove\",\"mousedown\",\"mouseup\",\"mouseover\"],KeyboardEvents:[\"keydown\"]},s={};a.default.each(l,function(e,t){a.default.each(e,function(e){s[e]=t})});var u=/(\\d+(\\.\\d+)?)px/,d={makeSelectable:function(e,t){void 0!==e&&void 0!==e.style&&(e.onselectstart=t?function(){return!1}:function(){},e.style.MozUserSelect=t?\"auto\":\"none\",e.style.KhtmlUserSelect=t?\"auto\":\"none\",e.unselectable=t?\"on\":\"off\")},makeFullscreen:function(e,t,n){var o=n,i=t;a.default.isUndefined(i)&&(i=!0),a.default.isUndefined(o)&&(o=!0),e.style.position=\"absolute\",i&&(e.style.left=0,e.style.right=0),o&&(e.style.top=0,e.style.bottom=0)},fakeEvent:function(e,t,n,o){var i=n||{},r=s[t];if(!r)throw new Error(\"Event type \"+t+\" not supported.\");var l=document.createEvent(r);switch(r){case\"MouseEvents\":var u=i.x||i.clientX||0,d=i.y||i.clientY||0;l.initMouseEvent(t,i.bubbles||!1,i.cancelable||!0,window,i.clickCount||1,0,0,u,d,!1,!1,!1,!1,0,null);break;case\"KeyboardEvents\":var c=l.initKeyboardEvent||l.initKeyEvent;a.default.defaults(i,{cancelable:!0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,keyCode:void 0,charCode:void 0}),c(t,i.bubbles||!1,i.cancelable,window,i.ctrlKey,i.altKey,i.shiftKey,i.metaKey,i.keyCode,i.charCode);break;default:l.initEvent(t,i.bubbles||!1,i.cancelable||!0)}a.default.defaults(l,o),e.dispatchEvent(l)},bind:function(e,t,n,o){var i=o||!1;return e.addEventListener?e.addEventListener(t,n,i):e.attachEvent&&e.attachEvent(\"on\"+t,n),d},unbind:function(e,t,n,o){var i=o||!1;return e.removeEventListener?e.removeEventListener(t,n,i):e.detachEvent&&e.detachEvent(\"on\"+t,n),d},addClass:function(e,t){if(void 0===e.className)e.className=t;else if(e.className!==t){var n=e.className.split(/ +/);n.indexOf(t)===-1&&(n.push(t),e.className=n.join(\" \").replace(/^\\s+/,\"\").replace(/\\s+$/,\"\"))}return d},removeClass:function(e,t){if(t)if(e.className===t)e.removeAttribute(\"class\");else{var n=e.className.split(/ +/),o=n.indexOf(t);o!==-1&&(n.splice(o,1),e.className=n.join(\" \"))}else e.className=void 0;return d},hasClass:function(e,t){return new RegExp(\"(?:^|\\\\s+)\"+t+\"(?:\\\\s+|$)\").test(e.className)||!1},getWidth:function(e){var t=getComputedStyle(e);return i(t[\"border-left-width\"])+i(t[\"border-right-width\"])+i(t[\"padding-left\"])+i(t[\"padding-right\"])+i(t.width)},getHeight:function(e){var t=getComputedStyle(e);return i(t[\"border-top-width\"])+i(t[\"border-bottom-width\"])+i(t[\"padding-top\"])+i(t[\"padding-bottom\"])+i(t.height)},getOffset:function(e){var t=e,n={left:0,top:0};if(t.offsetParent)do n.left+=t.offsetLeft,n.top+=t.offsetTop,t=t.offsetParent;while(t);return n},isActive:function(e){return e===document.activeElement&&(e.type||e.href)}};t.default=d,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function a(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.__esModule=!0;var l=n(7),s=o(l),u=n(9),d=o(u),c=n(5),f=o(c),_=function(e){function t(n,o,a){i(this,t);var l=r(this,e.call(this,n,o)),s=a,u=l;if(l.__select=document.createElement(\"select\"),f.default.isArray(s)){var c={};f.default.each(s,function(e){c[e]=e}),s=c}return f.default.each(s,function(e,t){var n=document.createElement(\"option\");n.innerHTML=t,n.setAttribute(\"value\",e),u.__select.appendChild(n)}),l.updateDisplay(),d.default.bind(l.__select,\"change\",function(){var e=this.options[this.selectedIndex].value;u.setValue(e)}),l.domElement.appendChild(l.__select),l}return a(t,e),t.prototype.setValue=function(t){var n=e.prototype.setValue.call(this,t);return this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue()),n},t.prototype.updateDisplay=function(){return d.default.isActive(this.__select)?this:(this.__select.value=this.getValue(),e.prototype.updateDisplay.call(this))},t}(s.default);t.default=_,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function a(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.__esModule=!0;var l=n(7),s=o(l),u=n(9),d=o(u),c=function(e){function t(n,o){function a(){u.setValue(u.__input.value)}function l(){u.__onFinishChange&&u.__onFinishChange.call(u,u.getValue())}i(this,t);var s=r(this,e.call(this,n,o)),u=s;return s.__input=document.createElement(\"input\"),s.__input.setAttribute(\"type\",\"text\"),d.default.bind(s.__input,\"keyup\",a),d.default.bind(s.__input,\"change\",a),d.default.bind(s.__input,\"blur\",l),d.default.bind(s.__input,\"keydown\",function(e){13===e.keyCode&&this.blur()}),s.updateDisplay(),s.domElement.appendChild(s.__input),s}return a(t,e),t.prototype.updateDisplay=function(){return d.default.isActive(this.__input)||(this.__input.value=this.getValue()),e.prototype.updateDisplay.call(this)},t}(s.default);t.default=c,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function a(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e){var t=e.toString();return t.indexOf(\".\")>-1?t.length-t.indexOf(\".\")-1:0}t.__esModule=!0;var s=n(7),u=o(s),d=n(5),c=o(d),f=function(e){function t(n,o,a){i(this,t);var s=r(this,e.call(this,n,o)),u=a||{};return s.__min=u.min,s.__max=u.max,s.__step=u.step,c.default.isUndefined(s.__step)?0===s.initialValue?s.__impliedStep=1:s.__impliedStep=Math.pow(10,Math.floor(Math.log(Math.abs(s.initialValue))/Math.LN10))/10:s.__impliedStep=s.__step,s.__precision=l(s.__impliedStep),s}return a(t,e),t.prototype.setValue=function(t){var n=t;return void 0!==this.__min&&n<this.__min?n=this.__min:void 0!==this.__max&&n>this.__max&&(n=this.__max),void 0!==this.__step&&n%this.__step!==0&&(n=Math.round(n/this.__step)*this.__step),e.prototype.setValue.call(this,n)},t.prototype.min=function(e){return this.__min=e,this},t.prototype.max=function(e){return this.__max=e,this},t.prototype.step=function(e){return this.__step=e,this.__impliedStep=e,this.__precision=l(e),this},t}(u.default);t.default=f,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function a(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n=Math.pow(10,t);return Math.round(e*n)/n}t.__esModule=!0;var s=n(12),u=o(s),d=n(9),c=o(d),f=n(5),_=o(f),p=function(e){function t(n,o,a){function l(){var e=parseFloat(m.__input.value);_.default.isNaN(e)||m.setValue(e)}function s(){m.__onFinishChange&&m.__onFinishChange.call(m,m.getValue())}function u(){s()}function d(e){var t=b-e.clientY;m.setValue(m.getValue()+t*m.__impliedStep),b=e.clientY}function f(){c.default.unbind(window,\"mousemove\",d),c.default.unbind(window,\"mouseup\",f),s()}function p(e){c.default.bind(window,\"mousemove\",d),c.default.bind(window,\"mouseup\",f),b=e.clientY}i(this,t);var h=r(this,e.call(this,n,o,a));h.__truncationSuspended=!1;var m=h,b=void 0;return h.__input=document.createElement(\"input\"),h.__input.setAttribute(\"type\",\"text\"),c.default.bind(h.__input,\"change\",l),c.default.bind(h.__input,\"blur\",u),c.default.bind(h.__input,\"mousedown\",p),c.default.bind(h.__input,\"keydown\",function(e){13===e.keyCode&&(m.__truncationSuspended=!0,this.blur(),m.__truncationSuspended=!1,s())}),h.updateDisplay(),h.domElement.appendChild(h.__input),h}return a(t,e),t.prototype.updateDisplay=function(){return this.__input.value=this.__truncationSuspended?this.getValue():l(this.getValue(),this.__precision),e.prototype.updateDisplay.call(this)},t}(u.default);t.default=p,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function a(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t,n,o,i){return o+(i-o)*((e-t)/(n-t))}t.__esModule=!0;var s=n(12),u=o(s),d=n(9),c=o(d),f=function(e){function t(n,o,a,s,u){function d(e){document.activeElement.blur(),c.default.bind(window,\"mousemove\",f),c.default.bind(window,\"mouseup\",_),f(e)}function f(e){e.preventDefault();var t=h.__background.getBoundingClientRect();return h.setValue(l(e.clientX,t.left,t.right,h.__min,h.__max)),!1}function _(){c.default.unbind(window,\"mousemove\",f),c.default.unbind(window,\"mouseup\",_),h.__onFinishChange&&h.__onFinishChange.call(h,h.getValue())}i(this,t);var p=r(this,e.call(this,n,o,{min:a,max:s,step:u})),h=p;return p.__background=document.createElement(\"div\"),p.__foreground=document.createElement(\"div\"),c.default.bind(p.__background,\"mousedown\",d),c.default.addClass(p.__background,\"slider\"),c.default.addClass(p.__foreground,\"slider-fg\"),p.updateDisplay(),p.__background.appendChild(p.__foreground),p.domElement.appendChild(p.__background),p}return a(t,e),t.prototype.updateDisplay=function(){var t=(this.getValue()-this.__min)/(this.__max-this.__min);return this.__foreground.style.width=100*t+\"%\",e.prototype.updateDisplay.call(this)},t}(u.default);t.default=f,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function a(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}t.__esModule=!0;var l=n(7),s=o(l),u=n(9),d=o(u),c=function(e){function t(n,o,a){i(this,t);var l=r(this,e.call(this,n,o)),s=l;return l.__button=document.createElement(\"div\"),l.__button.innerHTML=void 0===a?\"Fire\":a,d.default.bind(l.__button,\"click\",function(e){return e.preventDefault(),s.fire(),!1}),d.default.addClass(l.__button,\"button\"),l.domElement.appendChild(l.__button),l}return a(t,e),t.prototype.fire=function(){this.__onChange&&this.__onChange.call(this),this.getValue().call(this.object),this.__onFinishChange&&this.__onFinishChange.call(this,this.getValue())},t}(s.default);t.default=c,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function r(e,t){if(!e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!t||\"object\"!=typeof t&&\"function\"!=typeof t?e:t}function a(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t,n,o){e.style.background=\"\",g.default.each(y,function(i){e.style.cssText+=\"background: \"+i+\"linear-gradient(\"+t+\", \"+n+\" 0%, \"+o+\" 100%); \"})}function s(e){e.style.background=\"\",e.style.cssText+=\"background: -moz-linear-gradient(top,  #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);\",e.style.cssText+=\"background: -webkit-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);\",e.style.cssText+=\"background: -o-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);\",e.style.cssText+=\"background: -ms-linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);\",e.style.cssText+=\"background: linear-gradient(top,  #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);\"}t.__esModule=!0;var u=n(7),d=o(u),c=n(9),f=o(c),_=n(2),p=o(_),h=n(3),m=o(h),b=n(5),g=o(b),v=function(e){function t(n,o){function a(e){h(e),f.default.bind(window,\"mousemove\",h),f.default.bind(window,\"mouseup\",u)}function u(){f.default.unbind(window,\"mousemove\",h),f.default.unbind(window,\"mouseup\",u),_()}function d(){var e=(0,m.default)(this.value);e!==!1?(y.__color.__state=e,y.setValue(y.__color.toOriginal())):this.value=y.__color.toString()}function c(){f.default.unbind(window,\"mousemove\",b),f.default.unbind(window,\"mouseup\",c),_()}function _(){y.__onFinishChange&&y.__onFinishChange.call(y,y.__color.toOriginal())}function h(e){e.preventDefault();var t=y.__saturation_field.getBoundingClientRect(),n=(e.clientX-t.left)/(t.right-t.left),o=1-(e.clientY-t.top)/(t.bottom-t.top);return o>1?o=1:o<0&&(o=0),n>1?n=1:n<0&&(n=0),y.__color.v=o,y.__color.s=n,y.setValue(y.__color.toOriginal()),!1}function b(e){e.preventDefault();var t=y.__hue_field.getBoundingClientRect(),n=1-(e.clientY-t.top)/(t.bottom-t.top);return n>1?n=1:n<0&&(n=0),y.__color.h=360*n,y.setValue(y.__color.toOriginal()),!1}i(this,t);var v=r(this,e.call(this,n,o));v.__color=new p.default(v.getValue()),v.__temp=new p.default(0);var y=v;v.domElement=document.createElement(\"div\"),f.default.makeSelectable(v.domElement,!1),v.__selector=document.createElement(\"div\"),v.__selector.className=\"selector\",v.__saturation_field=document.createElement(\"div\"),v.__saturation_field.className=\"saturation-field\",v.__field_knob=document.createElement(\"div\"),v.__field_knob.className=\"field-knob\",v.__field_knob_border=\"2px solid \",v.__hue_knob=document.createElement(\"div\"),v.__hue_knob.className=\"hue-knob\",v.__hue_field=document.createElement(\"div\"),v.__hue_field.className=\"hue-field\",v.__input=document.createElement(\"input\"),v.__input.type=\"text\",v.__input_textShadow=\"0 1px 1px \",f.default.bind(v.__input,\"keydown\",function(e){13===e.keyCode&&d.call(this)}),f.default.bind(v.__input,\"blur\",d),f.default.bind(v.__selector,\"mousedown\",function(){f.default.addClass(this,\"drag\").bind(window,\"mouseup\",function(){f.default.removeClass(y.__selector,\"drag\")})});var w=document.createElement(\"div\");return g.default.extend(v.__selector.style,{width:\"122px\",height:\"102px\",padding:\"3px\",backgroundColor:\"#222\",boxShadow:\"0px 1px 3px rgba(0,0,0,0.3)\"}),g.default.extend(v.__field_knob.style,{position:\"absolute\",width:\"12px\",height:\"12px\",border:v.__field_knob_border+(v.__color.v<.5?\"#fff\":\"#000\"),boxShadow:\"0px 1px 3px rgba(0,0,0,0.5)\",borderRadius:\"12px\",zIndex:1}),g.default.extend(v.__hue_knob.style,{position:\"absolute\",width:\"15px\",height:\"2px\",borderRight:\"4px solid #fff\",zIndex:1}),g.default.extend(v.__saturation_field.style,{width:\"100px\",height:\"100px\",border:\"1px solid #555\",marginRight:\"3px\",display:\"inline-block\",cursor:\"pointer\"}),g.default.extend(w.style,{width:\"100%\",height:\"100%\",background:\"none\"}),l(w,\"top\",\"rgba(0,0,0,0)\",\"#000\"),g.default.extend(v.__hue_field.style,{width:\"15px\",height:\"100px\",border:\"1px solid #555\",cursor:\"ns-resize\",position:\"absolute\",top:\"3px\",right:\"3px\"}),s(v.__hue_field),g.default.extend(v.__input.style,{outline:\"none\",textAlign:\"center\",color:\"#fff\",border:0,fontWeight:\"bold\",textShadow:v.__input_textShadow+\"rgba(0,0,0,0.7)\"}),f.default.bind(v.__saturation_field,\"mousedown\",a),f.default.bind(v.__field_knob,\"mousedown\",a),f.default.bind(v.__hue_field,\"mousedown\",function(e){b(e),f.default.bind(window,\"mousemove\",b),f.default.bind(window,\"mouseup\",c)}),v.__saturation_field.appendChild(w),v.__selector.appendChild(v.__field_knob),v.__selector.appendChild(v.__saturation_field),v.__selector.appendChild(v.__hue_field),v.__hue_field.appendChild(v.__hue_knob),v.domElement.appendChild(v.__input),v.domElement.appendChild(v.__selector),v.updateDisplay(),v}return a(t,e),t.prototype.updateDisplay=function(){var e=(0,m.default)(this.getValue());if(e!==!1){var t=!1;g.default.each(p.default.COMPONENTS,function(n){if(!g.default.isUndefined(e[n])&&!g.default.isUndefined(this.__color.__state[n])&&e[n]!==this.__color.__state[n])return t=!0,{}},this),t&&g.default.extend(this.__color.__state,e)}g.default.extend(this.__temp.__state,this.__color.__state),this.__temp.a=1;var n=this.__color.v<.5||this.__color.s>.5?255:0,o=255-n;g.default.extend(this.__field_knob.style,{marginLeft:100*this.__color.s-7+\"px\",marginTop:100*(1-this.__color.v)-7+\"px\",backgroundColor:this.__temp.toHexString(),border:this.__field_knob_border+\"rgb(\"+n+\",\"+n+\",\"+n+\")\"}),this.__hue_knob.style.marginTop=100*(1-this.__color.h/360)+\"px\",this.__temp.s=1,this.__temp.v=1,l(this.__saturation_field,\"left\",\"#fff\",this.__temp.toHexString()),this.__input.value=this.__color.toString(),g.default.extend(this.__input.style,{backgroundColor:this.__color.toHexString(),color:\"rgb(\"+n+\",\"+n+\",\"+n+\")\",textShadow:this.__input_textShadow+\"rgba(\"+o+\",\"+o+\",\"+o+\",.7)\"})},t}(d.default),y=[\"-moz-\",\"-o-\",\"-webkit-\",\"-ms-\",\"\"];t.default=v,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var o=document.createElement(\"li\");return t&&o.appendChild(t),n?e.__ul.insertBefore(o,n):e.__ul.appendChild(o),e.onResize(),o}function r(e,t){var n=e.__preset_select[e.__preset_select.selectedIndex];t?n.innerHTML=n.value+\"*\":n.innerHTML=n.value}function a(e,t,n){if(n.__li=t,n.__gui=e,U.default.extend(n,{options:function(t){if(arguments.length>1){var o=n.__li.nextElementSibling;return n.remove(),s(e,n.object,n.property,{before:o,factoryArgs:[U.default.toArray(arguments)]})}if(U.default.isArray(t)||U.default.isObject(t)){var i=n.__li.nextElementSibling;return n.remove(),s(e,n.object,n.property,{before:i,factoryArgs:[t]})}},name:function(e){return n.__li.firstElementChild.firstElementChild.innerHTML=e,n},listen:function(){return n.__gui.listen(n),n},remove:function(){return n.__gui.remove(n),n}}),n instanceof N.default){var o=new B.default(n.object,n.property,{\nmin:n.__min,max:n.__max,step:n.__step});U.default.each([\"updateDisplay\",\"onChange\",\"onFinishChange\",\"step\"],function(e){var t=n[e],i=o[e];n[e]=o[e]=function(){var e=Array.prototype.slice.call(arguments);return i.apply(o,e),t.apply(n,e)}}),z.default.addClass(t,\"has-slider\"),n.domElement.insertBefore(o.domElement,n.domElement.firstElementChild)}else if(n instanceof B.default){var i=function(t){if(U.default.isNumber(n.__min)&&U.default.isNumber(n.__max)){var o=n.__li.firstElementChild.firstElementChild.innerHTML,i=n.__gui.__listening.indexOf(n)>-1;n.remove();var r=s(e,n.object,n.property,{before:n.__li.nextElementSibling,factoryArgs:[n.__min,n.__max,n.__step]});return r.name(o),i&&r.listen(),r}return t};n.min=U.default.compose(i,n.min),n.max=U.default.compose(i,n.max)}else n instanceof O.default?(z.default.bind(t,\"click\",function(){z.default.fakeEvent(n.__checkbox,\"click\")}),z.default.bind(n.__checkbox,\"click\",function(e){e.stopPropagation()})):n instanceof R.default?(z.default.bind(t,\"click\",function(){z.default.fakeEvent(n.__button,\"click\")}),z.default.bind(t,\"mouseover\",function(){z.default.addClass(n.__button,\"hover\")}),z.default.bind(t,\"mouseout\",function(){z.default.removeClass(n.__button,\"hover\")})):n instanceof j.default&&(z.default.addClass(t,\"color\"),n.updateDisplay=U.default.compose(function(e){return t.style.borderLeftColor=n.__color.toString(),e},n.updateDisplay),n.updateDisplay());n.setValue=U.default.compose(function(t){return e.getRoot().__preset_select&&n.isModified()&&r(e.getRoot(),!0),t},n.setValue)}function l(e,t){var n=e.getRoot(),o=n.__rememberedObjects.indexOf(t.object);if(o!==-1){var i=n.__rememberedObjectIndecesToControllers[o];if(void 0===i&&(i={},n.__rememberedObjectIndecesToControllers[o]=i),i[t.property]=t,n.load&&n.load.remembered){var r=n.load.remembered,a=void 0;if(r[e.preset])a=r[e.preset];else{if(!r[Q])return;a=r[Q]}if(a[o]&&void 0!==a[o][t.property]){var l=a[o][t.property];t.initialValue=l,t.setValue(l)}}}}function s(e,t,n,o){if(void 0===t[n])throw new Error('Object \"'+t+'\" has no property \"'+n+'\"');var r=void 0;if(o.color)r=new j.default(t,n);else{var s=[t,n].concat(o.factoryArgs);r=C.default.apply(e,s)}o.before instanceof S.default&&(o.before=o.before.__li),l(e,r),z.default.addClass(r.domElement,\"c\");var u=document.createElement(\"span\");z.default.addClass(u,\"property-name\"),u.innerHTML=r.property;var d=document.createElement(\"div\");d.appendChild(u),d.appendChild(r.domElement);var c=i(e,d,o.before);return z.default.addClass(c,oe.CLASS_CONTROLLER_ROW),r instanceof j.default?z.default.addClass(c,\"color\"):z.default.addClass(c,g(r.getValue())),a(e,c,r),e.__controllers.push(r),r}function u(e,t){return document.location.href+\".\"+t}function d(e,t,n){var o=document.createElement(\"option\");o.innerHTML=t,o.value=t,e.__preset_select.appendChild(o),n&&(e.__preset_select.selectedIndex=e.__preset_select.length-1)}function c(e,t){t.style.display=e.useLocalStorage?\"block\":\"none\"}function f(e){var t=e.__save_row=document.createElement(\"li\");z.default.addClass(e.domElement,\"has-save\"),e.__ul.insertBefore(t,e.__ul.firstChild),z.default.addClass(t,\"save-row\");var n=document.createElement(\"span\");n.innerHTML=\"&nbsp;\",z.default.addClass(n,\"button gears\");var o=document.createElement(\"span\");o.innerHTML=\"Save\",z.default.addClass(o,\"button\"),z.default.addClass(o,\"save\");var i=document.createElement(\"span\");i.innerHTML=\"New\",z.default.addClass(i,\"button\"),z.default.addClass(i,\"save-as\");var r=document.createElement(\"span\");r.innerHTML=\"Revert\",z.default.addClass(r,\"button\"),z.default.addClass(r,\"revert\");var a=e.__preset_select=document.createElement(\"select\");if(e.load&&e.load.remembered?U.default.each(e.load.remembered,function(t,n){d(e,n,n===e.preset)}):d(e,Q,!1),z.default.bind(a,\"change\",function(){for(var t=0;t<e.__preset_select.length;t++)e.__preset_select[t].innerHTML=e.__preset_select[t].value;e.preset=this.value}),t.appendChild(a),t.appendChild(n),t.appendChild(o),t.appendChild(i),t.appendChild(r),q){var l=document.getElementById(\"dg-local-explain\"),s=document.getElementById(\"dg-local-storage\"),f=document.getElementById(\"dg-save-locally\");f.style.display=\"block\",\"true\"===localStorage.getItem(u(e,\"isLocal\"))&&s.setAttribute(\"checked\",\"checked\"),c(e,l),z.default.bind(s,\"change\",function(){e.useLocalStorage=!e.useLocalStorage,c(e,l)})}var _=document.getElementById(\"dg-new-constructor\");z.default.bind(_,\"keydown\",function(e){!e.metaKey||67!==e.which&&67!==e.keyCode||Z.hide()}),z.default.bind(n,\"click\",function(){_.innerHTML=JSON.stringify(e.getSaveObject(),void 0,2),Z.show(),_.focus(),_.select()}),z.default.bind(o,\"click\",function(){e.save()}),z.default.bind(i,\"click\",function(){var t=prompt(\"Enter a new preset name.\");t&&e.saveAs(t)}),z.default.bind(r,\"click\",function(){e.revert()})}function _(e){function t(t){return t.preventDefault(),e.width+=i-t.clientX,e.onResize(),i=t.clientX,!1}function n(){z.default.removeClass(e.__closeButton,oe.CLASS_DRAG),z.default.unbind(window,\"mousemove\",t),z.default.unbind(window,\"mouseup\",n)}function o(o){return o.preventDefault(),i=o.clientX,z.default.addClass(e.__closeButton,oe.CLASS_DRAG),z.default.bind(window,\"mousemove\",t),z.default.bind(window,\"mouseup\",n),!1}var i=void 0;e.__resize_handle=document.createElement(\"div\"),U.default.extend(e.__resize_handle.style,{width:\"6px\",marginLeft:\"-3px\",height:\"200px\",cursor:\"ew-resize\",position:\"absolute\"}),z.default.bind(e.__resize_handle,\"mousedown\",o),z.default.bind(e.__closeButton,\"mousedown\",o),e.domElement.insertBefore(e.__resize_handle,e.domElement.firstElementChild)}function p(e,t){e.domElement.style.width=t+\"px\",e.__save_row&&e.autoPlace&&(e.__save_row.style.width=t+\"px\"),e.__closeButton&&(e.__closeButton.style.width=t+\"px\")}function h(e,t){var n={};return U.default.each(e.__rememberedObjects,function(o,i){var r={},a=e.__rememberedObjectIndecesToControllers[i];U.default.each(a,function(e,n){r[n]=t?e.initialValue:e.getValue()}),n[i]=r}),n}function m(e){for(var t=0;t<e.__preset_select.length;t++)e.__preset_select[t].value===e.preset&&(e.__preset_select.selectedIndex=t)}function b(e){0!==e.length&&D.default.call(window,function(){b(e)}),U.default.each(e,function(e){e.updateDisplay()})}t.__esModule=!0;var g=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},v=n(18),y=o(v),w=n(19),x=o(w),E=n(20),C=o(E),A=n(7),S=o(A),k=n(8),O=o(k),T=n(15),R=o(T),L=n(13),B=o(L),M=n(14),N=o(M),H=n(16),j=o(H),P=n(21),D=o(P),V=n(22),F=o(V),I=n(9),z=o(I),G=n(5),U=o(G),X=n(23),K=o(X);y.default.inject(K.default);var Y=\"dg\",J=72,W=20,Q=\"Default\",q=function(){try{return\"localStorage\"in window&&null!==window.localStorage}catch(e){return!1}}(),Z=void 0,$=!0,ee=void 0,te=!1,ne=[],oe=function e(t){function n(){var e=o.getRoot();e.width+=1,U.default.defer(function(){e.width-=1})}var o=this,r=t||{};this.domElement=document.createElement(\"div\"),this.__ul=document.createElement(\"ul\"),this.domElement.appendChild(this.__ul),z.default.addClass(this.domElement,Y),this.__folders={},this.__controllers=[],this.__rememberedObjects=[],this.__rememberedObjectIndecesToControllers=[],this.__listening=[],r=U.default.defaults(r,{closeOnTop:!1,autoPlace:!0,width:e.DEFAULT_WIDTH}),r=U.default.defaults(r,{resizable:r.autoPlace,hideable:r.autoPlace}),U.default.isUndefined(r.load)?r.load={preset:Q}:r.preset&&(r.load.preset=r.preset),U.default.isUndefined(r.parent)&&r.hideable&&ne.push(this),r.resizable=U.default.isUndefined(r.parent)&&r.resizable,r.autoPlace&&U.default.isUndefined(r.scrollable)&&(r.scrollable=!0);var a=q&&\"true\"===localStorage.getItem(u(this,\"isLocal\")),l=void 0;if(Object.defineProperties(this,{parent:{get:function(){return r.parent}},scrollable:{get:function(){return r.scrollable}},autoPlace:{get:function(){return r.autoPlace}},closeOnTop:{get:function(){return r.closeOnTop}},preset:{get:function(){return o.parent?o.getRoot().preset:r.load.preset},set:function(e){o.parent?o.getRoot().preset=e:r.load.preset=e,m(this),o.revert()}},width:{get:function(){return r.width},set:function(e){r.width=e,p(o,e)}},name:{get:function(){return r.name},set:function(e){r.name=e,titleRowName&&(titleRowName.innerHTML=r.name)}},closed:{get:function(){return r.closed},set:function(t){r.closed=t,r.closed?z.default.addClass(o.__ul,e.CLASS_CLOSED):z.default.removeClass(o.__ul,e.CLASS_CLOSED),this.onResize(),o.__closeButton&&(o.__closeButton.innerHTML=t?e.TEXT_OPEN:e.TEXT_CLOSED)}},load:{get:function(){return r.load}},useLocalStorage:{get:function(){return a},set:function(e){q&&(a=e,e?z.default.bind(window,\"unload\",l):z.default.unbind(window,\"unload\",l),localStorage.setItem(u(o,\"isLocal\"),e))}}}),U.default.isUndefined(r.parent)){if(r.closed=!1,z.default.addClass(this.domElement,e.CLASS_MAIN),z.default.makeSelectable(this.domElement,!1),q&&a){o.useLocalStorage=!0;var s=localStorage.getItem(u(this,\"gui\"));s&&(r.load=JSON.parse(s))}this.__closeButton=document.createElement(\"div\"),this.__closeButton.innerHTML=e.TEXT_CLOSED,z.default.addClass(this.__closeButton,e.CLASS_CLOSE_BUTTON),r.closeOnTop?(z.default.addClass(this.__closeButton,e.CLASS_CLOSE_TOP),this.domElement.insertBefore(this.__closeButton,this.domElement.childNodes[0])):(z.default.addClass(this.__closeButton,e.CLASS_CLOSE_BOTTOM),this.domElement.appendChild(this.__closeButton)),z.default.bind(this.__closeButton,\"click\",function(){o.closed=!o.closed})}else{void 0===r.closed&&(r.closed=!0);var d=document.createTextNode(r.name);z.default.addClass(d,\"controller-name\");var c=i(o,d),f=function(e){return e.preventDefault(),o.closed=!o.closed,!1};z.default.addClass(this.__ul,e.CLASS_CLOSED),z.default.addClass(c,\"title\"),z.default.bind(c,\"click\",f),r.closed||(this.closed=!1)}r.autoPlace&&(U.default.isUndefined(r.parent)&&($&&(ee=document.createElement(\"div\"),z.default.addClass(ee,Y),z.default.addClass(ee,e.CLASS_AUTO_PLACE_CONTAINER),document.body.appendChild(ee),$=!1),ee.appendChild(this.domElement),z.default.addClass(this.domElement,e.CLASS_AUTO_PLACE)),this.parent||p(o,r.width)),this.__resizeHandler=function(){o.onResizeDebounced()},z.default.bind(window,\"resize\",this.__resizeHandler),z.default.bind(this.__ul,\"webkitTransitionEnd\",this.__resizeHandler),z.default.bind(this.__ul,\"transitionend\",this.__resizeHandler),z.default.bind(this.__ul,\"oTransitionEnd\",this.__resizeHandler),this.onResize(),r.resizable&&_(this),l=function(){q&&\"true\"===localStorage.getItem(u(o,\"isLocal\"))&&localStorage.setItem(u(o,\"gui\"),JSON.stringify(o.getSaveObject()))},this.saveToLocalStorageIfPossible=l,r.parent||n()};oe.toggleHide=function(){te=!te,U.default.each(ne,function(e){e.domElement.style.display=te?\"none\":\"\"})},oe.CLASS_AUTO_PLACE=\"a\",oe.CLASS_AUTO_PLACE_CONTAINER=\"ac\",oe.CLASS_MAIN=\"main\",oe.CLASS_CONTROLLER_ROW=\"cr\",oe.CLASS_TOO_TALL=\"taller-than-window\",oe.CLASS_CLOSED=\"closed\",oe.CLASS_CLOSE_BUTTON=\"close-button\",oe.CLASS_CLOSE_TOP=\"close-top\",oe.CLASS_CLOSE_BOTTOM=\"close-bottom\",oe.CLASS_DRAG=\"drag\",oe.DEFAULT_WIDTH=245,oe.TEXT_CLOSED=\"Close Controls\",oe.TEXT_OPEN=\"Open Controls\",oe._keydownHandler=function(e){\"text\"===document.activeElement.type||e.which!==J&&e.keyCode!==J||oe.toggleHide()},z.default.bind(window,\"keydown\",oe._keydownHandler,!1),U.default.extend(oe.prototype,{add:function(e,t){return s(this,e,t,{factoryArgs:Array.prototype.slice.call(arguments,2)})},addColor:function(e,t){return s(this,e,t,{color:!0})},remove:function(e){this.__ul.removeChild(e.__li),this.__controllers.splice(this.__controllers.indexOf(e),1);var t=this;U.default.defer(function(){t.onResize()})},destroy:function(){this.autoPlace&&ee.removeChild(this.domElement),z.default.unbind(window,\"keydown\",oe._keydownHandler,!1),z.default.unbind(window,\"resize\",this.__resizeHandler),this.saveToLocalStorageIfPossible&&z.default.unbind(window,\"unload\",this.saveToLocalStorageIfPossible)},addFolder:function(e){if(void 0!==this.__folders[e])throw new Error('You already have a folder in this GUI by the name \"'+e+'\"');var t={name:e,parent:this};t.autoPlace=this.autoPlace,this.load&&this.load.folders&&this.load.folders[e]&&(t.closed=this.load.folders[e].closed,t.load=this.load.folders[e]);var n=new oe(t);this.__folders[e]=n;var o=i(this,n.domElement);return z.default.addClass(o,\"folder\"),n},open:function(){this.closed=!1},close:function(){this.closed=!0},onResize:function(){var e=this.getRoot();if(e.scrollable){var t=z.default.getOffset(e.__ul).top,n=0;U.default.each(e.__ul.childNodes,function(t){e.autoPlace&&t===e.__save_row||(n+=z.default.getHeight(t))}),window.innerHeight-t-W<n?(z.default.addClass(e.domElement,oe.CLASS_TOO_TALL),e.__ul.style.height=window.innerHeight-t-W+\"px\"):(z.default.removeClass(e.domElement,oe.CLASS_TOO_TALL),e.__ul.style.height=\"auto\")}e.__resize_handle&&U.default.defer(function(){e.__resize_handle.style.height=e.__ul.offsetHeight+\"px\"}),e.__closeButton&&(e.__closeButton.style.width=e.width+\"px\")},onResizeDebounced:U.default.debounce(function(){this.onResize()},50),remember:function(){if(U.default.isUndefined(Z)&&(Z=new F.default,Z.domElement.innerHTML=x.default),this.parent)throw new Error(\"You can only call remember on a top level GUI.\");var e=this;U.default.each(Array.prototype.slice.call(arguments),function(t){0===e.__rememberedObjects.length&&f(e),e.__rememberedObjects.indexOf(t)===-1&&e.__rememberedObjects.push(t)}),this.autoPlace&&p(this,this.width)},getRoot:function(){for(var e=this;e.parent;)e=e.parent;return e},getSaveObject:function(){var e=this.load;return e.closed=this.closed,this.__rememberedObjects.length>0&&(e.preset=this.preset,e.remembered||(e.remembered={}),e.remembered[this.preset]=h(this)),e.folders={},U.default.each(this.__folders,function(t,n){e.folders[n]=t.getSaveObject()}),e},save:function(){this.load.remembered||(this.load.remembered={}),this.load.remembered[this.preset]=h(this),r(this,!1),this.saveToLocalStorageIfPossible()},saveAs:function(e){this.load.remembered||(this.load.remembered={},this.load.remembered[Q]=h(this,!0)),this.load.remembered[e]=h(this),this.preset=e,d(this,e,!0),this.saveToLocalStorageIfPossible()},revert:function(e){U.default.each(this.__controllers,function(t){this.getRoot().load.remembered?l(e||this.getRoot(),t):t.setValue(t.initialValue),t.__onFinishChange&&t.__onFinishChange.call(t,t.getValue())},this),U.default.each(this.__folders,function(e){e.revert(e)}),e||r(this.getRoot(),!1)},listen:function(e){var t=0===this.__listening.length;this.__listening.push(e),t&&b(this.__listening)},updateDisplay:function(){U.default.each(this.__controllers,function(e){e.updateDisplay()}),U.default.each(this.__folders,function(e){e.updateDisplay()})}}),t.default=oe,e.exports=t.default},function(e,t){\"use strict\";e.exports={load:function(e,t){var n=t||document,o=n.createElement(\"link\");o.type=\"text/css\",o.rel=\"stylesheet\",o.href=e,n.getElementsByTagName(\"head\")[0].appendChild(o)},inject:function(e,t){var n=t||document,o=document.createElement(\"style\");o.type=\"text/css\",o.innerHTML=e;var i=n.getElementsByTagName(\"head\")[0];try{i.appendChild(o)}catch(e){}}}},function(e,t){e.exports=\"<div id=dg-save class=\\\"dg dialogue\\\"> Here's the new load parameter for your <code>GUI</code>'s constructor: <textarea id=dg-new-constructor></textarea> <div id=dg-save-locally> <input id=dg-local-storage type=checkbox /> Automatically save values to <code>localStorage</code> on exit. <div id=dg-local-explain>The values saved to <code>localStorage</code> will override those passed to <code>dat.GUI</code>'s constructor. This makes it easier to work incrementally, but <code>localStorage</code> is fragile, and your friends may not see the same values you do. </div> </div> </div>\"},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(10),r=o(i),a=n(13),l=o(a),s=n(14),u=o(s),d=n(11),c=o(d),f=n(15),_=o(f),p=n(8),h=o(p),m=n(5),b=o(m),g=function(e,t){var n=e[t];return b.default.isArray(arguments[2])||b.default.isObject(arguments[2])?new r.default(e,t,arguments[2]):b.default.isNumber(n)?b.default.isNumber(arguments[2])&&b.default.isNumber(arguments[3])?b.default.isNumber(arguments[4])?new u.default(e,t,arguments[2],arguments[3],arguments[4]):new u.default(e,t,arguments[2],arguments[3]):b.default.isNumber(arguments[4])?new l.default(e,t,{min:arguments[2],max:arguments[3],step:arguments[4]}):new l.default(e,t,{min:arguments[2],max:arguments[3]}):b.default.isString(n)?new c.default(e,t):b.default.isFunction(n)?new _.default(e,t,\"\"):b.default.isBoolean(n)?new h.default(e,t):null};t.default=g,e.exports=t.default},function(e,t){\"use strict\";function n(e){setTimeout(e,1e3/60)}t.__esModule=!0,t.default=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||n,e.exports=t.default},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}t.__esModule=!0;var r=n(9),a=o(r),l=n(5),s=o(l),u=function(){function e(){i(this,e),this.backgroundElement=document.createElement(\"div\"),s.default.extend(this.backgroundElement.style,{backgroundColor:\"rgba(0,0,0,0.8)\",top:0,left:0,display:\"none\",zIndex:\"1000\",opacity:0,WebkitTransition:\"opacity 0.2s linear\",transition:\"opacity 0.2s linear\"}),a.default.makeFullscreen(this.backgroundElement),this.backgroundElement.style.position=\"fixed\",this.domElement=document.createElement(\"div\"),s.default.extend(this.domElement.style,{position:\"fixed\",display:\"none\",zIndex:\"1001\",opacity:0,WebkitTransition:\"-webkit-transform 0.2s ease-out, opacity 0.2s linear\",transition:\"transform 0.2s ease-out, opacity 0.2s linear\"}),document.body.appendChild(this.backgroundElement),document.body.appendChild(this.domElement);var t=this;a.default.bind(this.backgroundElement,\"click\",function(){t.hide()})}return e.prototype.show=function(){var e=this;this.backgroundElement.style.display=\"block\",this.domElement.style.display=\"block\",this.domElement.style.opacity=0,this.domElement.style.webkitTransform=\"scale(1.1)\",this.layout(),s.default.defer(function(){e.backgroundElement.style.opacity=1,e.domElement.style.opacity=1,e.domElement.style.webkitTransform=\"scale(1)\"})},e.prototype.hide=function e(){var t=this,e=function e(){t.domElement.style.display=\"none\",t.backgroundElement.style.display=\"none\",a.default.unbind(t.domElement,\"webkitTransitionEnd\",e),a.default.unbind(t.domElement,\"transitionend\",e),a.default.unbind(t.domElement,\"oTransitionEnd\",e)};a.default.bind(this.domElement,\"webkitTransitionEnd\",e),a.default.bind(this.domElement,\"transitionend\",e),a.default.bind(this.domElement,\"oTransitionEnd\",e),this.backgroundElement.style.opacity=0,this.domElement.style.opacity=0,this.domElement.style.webkitTransform=\"scale(1.1)\"},e.prototype.layout=function(){this.domElement.style.left=window.innerWidth/2-a.default.getWidth(this.domElement)/2+\"px\",this.domElement.style.top=window.innerHeight/2-a.default.getHeight(this.domElement)/2+\"px\"},e}();t.default=u,e.exports=t.default},function(e,t,n){t=e.exports=n(24)(),t.push([e.id,\".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1!important}.dg.main .close-button.drag,.dg.main:hover .close-button{opacity:1}.dg.main .close-button{transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{transition:height .1s ease-out;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid transparent}.dg li.title{margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.boolean,.dg .cr.boolean *,.dg .cr.function,.dg .cr.function *,.dg .cr.function .property-name{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco,monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px Lucida Grande,sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid hsla(0,0%,100%,.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2fa1d6}.dg .cr.number input[type=text]{color:#2fa1d6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.boolean:hover,.dg .cr.function:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2fa1d6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\",\"\"])},function(e,t){e.exports=function(){var e=[];return e.toString=function(){for(var e=[],t=0;t<this.length;t++){var n=this[t];n[2]?e.push(\"@media \"+n[2]+\"{\"+n[1]+\"}\"):e.push(n[1])}return e.join(\"\")},e.i=function(t,n){\"string\"==typeof t&&(t=[[null,t,\"\"]]);for(var o={},i=0;i<this.length;i++){var r=this[i][0];\"number\"==typeof r&&(o[r]=!0)}for(i=0;i<t.length;i++){var a=t[i];\"number\"==typeof a[0]&&o[a[0]]||(n&&!a[2]?a[2]=n:n&&(a[2]=\"(\"+a[2]+\") and (\"+n+\")\"),e.push(a))}},e}}])});\n/*\n Javascript graphics utility library\n Helper functions, WebGL classes, Mouse input, Colours and Gradients UI\n Copyright (c) 2014, Owen Kaluza\n Released into public domain:\n This program is free software. It comes without any warranty, to\n the extent permitted by applicable law. You can redistribute it\n and/or modify it as long as this header remains intact\n*/\nvar $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.checkStringArgs=function(a,b,c){if(null==a)throw new TypeError(\"The 'this' value for String.prototype.\"+c+\" must not be null or undefined\");if(b instanceof RegExp)throw new TypeError(\"First argument to String.prototype.\"+c+\" must not be a regular expression\");return a+\"\"};\n$jscomp.defineProperty=\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(c.get||c.set)throw new TypeError(\"ES3 does not support getters and setters.\");a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return\"undefined\"!=typeof window&&window===a?a:\"undefined\"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);\n$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(\".\");for(d=0;d<a.length-1;d++){var e=a[d];e in c||(c[e]={});c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};\n$jscomp.polyfill(\"String.prototype.repeat\",function(a){return a?a:function(a){var b=$jscomp.checkStringArgs(this,null,\"repeat\");if(0>a||1342177279<a)throw new RangeError(\"Invalid count value\");a|=0;for(var d=\"\";a;)if(a&1&&(d+=b),a>>>=1)b+=b;return d}},\"es6-impl\",\"es3\");$jscomp.stringPadding=function(a,b){var c=void 0!==a?String(a):\" \";return 0<b&&c?c.repeat(Math.ceil(b/c.length)).substring(0,b):\"\"};\n$jscomp.polyfill(\"String.prototype.padStart\",function(a){return a?a:function(a,c){var b=$jscomp.checkStringArgs(this,null,\"padStart\");return $jscomp.stringPadding(c,a-b.length)+b}},\"es8\",\"es3\");var OK=function(){var a={debug_on:!1,debug:function(b){if(a.debug_on){var c=document.getElementById(\"console\");c?c.innerHTML=\"<div style=\\\"font-family: 'monospace'; font-size: 8pt;\\\">\"+b+\"</div>\"+c.innerHTML:console.log(b)}},clear:function(){var a=document.getElementById(\"console\");a&&(a.innerHTML=\"\")}};return a}();\nfunction getSearchVariable(a,b){for(var c=window.location.search.substring(1).split(\"&\"),d=0;d<c.length;d++){var e=c[d].split(\"=\");if(unescape(e[0])==a)return unescape(e[1])}return b}function getImageDataURL(a){var b=document.createElement(\"canvas\");b.width=a.width;b.height=a.height;b.getContext(\"2d\").drawImage(a,0,0);return b.toDataURL(\"image/png\")}\nfunction toggle(a){var b=document.getElementById(a).style.display;\"none\"!=b&&b?document.getElementById(a).style.display=\"none\":document.getElementById(a).style.display=\"block\"}function setAll(a,b){for(var c=document.getElementsByClassName(b),d=0;d<c.length;d++)c[d].style.display=a}function getSourceFromElement(a){var b=document.getElementById(a);if(!b)return null;a=\"\";for(b=b.firstChild;b;)3==b.nodeType&&(a+=b.textContent),b=b.nextSibling;return a}\nfunction removeChildren(a){if(a.hasChildNodes())for(;0<a.childNodes.length;)a.removeChild(a.firstChild)}function requestFullScreen(a){a=document.getElementById(a);a.requestFullscreen?a.requestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullScreen&&a.webkitRequestFullScreen()}function typeOf(a){var b=typeof a;\"object\"===b&&(a?\"number\"!==typeof a.length||a.propertyIsEnumerable(\"length\")||\"function\"!==typeof a.splice||(b=\"array\"):b=\"null\");return b}\nfunction isEmpty(a){var b,c;if(\"object\"===typeOf(a))for(b in a)if(c=a[b],void 0!==c&&\"function\"!==typeOf(c))return!1;return!0}\nfunction ajaxReadFile(a,b,c,d,e){var f=new XMLHttpRequest,g=0;void 0!=d&&(\"number\"==typeof d?g=d:f.onprogress=d);f.onreadystatechange=function(){if(0<g&&2<f.readyState){var c=parseInt(f.responseText.length);d&&setProgress(c/g*100)}4==f.readyState&&(200==f.status?(d&&setProgress(100),OK.debug(\"RECEIVED: \"+a),b&&b(f.responseText,a)):b?b(\"Error: \"+f.status+\" : \"+a):OK.debug(\"Ajax Read File Error: returned status code \"+f.status+\" \"+f.statusText))};c?f.open(\"GET\",a+\"?d=\"+(new Date).getTime(),!0):f.open(\"GET\",\na,!0);for(var h in e)f.setRequestHeader(h,e[h]);f.send(null)}function readURL(a,b,c){var d=new XMLHttpRequest,e=0;void 0!=c&&(\"number\"==typeof c?e=c:d.onprogress=c);d.onreadystatechange=function(){if(0<e&&2<d.readyState){var a=parseInt(d.responseText.length);c&&setProgress(a/e*100)}};b?d.open(\"GET\",a+\"?d=\"+(new Date).getTime(),!1):d.open(\"GET\",a,!1);d.overrideMimeType(\"text/plain; charset=x-user-defined\");d.send(null);if(200!=d.status)return\"\";c&&setProgress(100);return d.responseText}\nfunction updateProgress(a){a.lengthComputable&&(setProgress(a.loaded/a.total*100),OK.debug(a.loaded+\" / \"+a.total))}function setProgress(a){a=Math.round(a);document.getElementById(\"progressbar\").style.width=3*a+\"px\";document.getElementById(\"progressstatus\").innerHTML=a+\"%\"}\nfunction ajaxPost(a,b,c,d,e){var f=new XMLHttpRequest;void 0!=d&&(f.upload.onprogress=d);f.onreadystatechange=function(){4==f.readyState&&(200==f.status?(d&&setProgress(100),OK.debug(\"POST: \"+a),c&&c(f.responseText)):c?c(\"Error, status:\"+f.status):OK.debug(\"Ajax Post Error: returned status code \"+f.status+\" \"+f.statusText))};f.open(\"POST\",a,!0);\"string\"==typeof b&&f.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\");if(e)for(key in e)f.setRequestHeader(key,e[key]);f.send(b)}\nvar defaultMouse,dragMouse;function MouseEventHandler(a,b,c,d,e,f,g){this.click=a;this.wheel=b;this.move=c;this.down=d;this.up=e;this.leave=f;this.pinch=g}\nfunction Mouse(a,b,c){this.element=a;this.handler=b;this.isdown=this.disabled=!1;this.button=null;this.dragged=!1;this.lastY=this.lastX=this.absoluteY=this.absoluteX=this.x=this.x=0;this.slider=null;this.spin=0;this.moveUpdate=!1;this.enableContext=c?!0:!1;a.addEventListener(\"onwheel\"in document?\"wheel\":\"mousewheel\",handleMouseWheel,!1);a.onmousedown=handleMouseDown;a.onmouseout=handleMouseLeave;document.onmouseup=handleMouseUp;document.onmousemove=handleMouseMove;a.addEventListener(\"touchstart\",\ntouchHandler,!0);a.addEventListener(\"touchmove\",touchHandler,!0);a.addEventListener(\"touchend\",touchHandler,!0);a.oncontextmenu=function(){return this.mouse.enableContext}}Mouse.prototype.setDefault=function(){defaultMouse=document.mouse=this};\nMouse.prototype.update=function(a){a||(a=window.event);this.x=a.clientX;this.y=a.clientY;this.absoluteX=this.x;this.absoluteY=this.y;var b=this.element.getBoundingClientRect(),b=[b.left,b.top];this.x-=b[0];this.y-=b[1];this.clientx=a.pageX-b[0];this.clienty=a.pageY-b[1]};function getMouse(a){a||(a=window.event);var b=a.target.mouse;if(b)return b;for(a=a.target;a!=document;)if(a=a.parentNode,a.mouse)return a.mouse;return null}\nfunction handleMouseDown(a){var b=getMouse(a);if(!b||b.disabled)return!0;b.target=(a||window.event).target;b.dragged=!1;b.update(a);b.isdown||(b.lastX=b.absoluteX,b.lastY=b.absoluteY);b.isdown=!0;dragMouse=b;b.button=a.button;document.mouse=b;var c=!0;b.handler.down&&(c=b.handler.down(a,b));!c&&a.preventDefault&&a.preventDefault();return c}\nfunction handleMouseUp(a){var b=document.mouse;if(!b||b.disabled)return!0;var c=!0;b.isdown&&(b.update(a),b.handler.click&&(c=b.handler.click(a,b)),b.isdown=!1,dragMouse=null,b.button=null,b.dragged=!1);b.handler.up&&(c=c&&b.handler.up(a,b));document.mouse=defaultMouse;!c&&a.preventDefault&&a.preventDefault();return c}\nfunction handleMouseMove(a){var b=dragMouse?dragMouse:getMouse(a);if(!b||b.disabled)return!0;b.update(a);b.deltaX=b.absoluteX-b.lastX;b.deltaY=b.absoluteY-b.lastY;var c=!0;!b.dragged&&b.isdown&&3<Math.abs(b.deltaX)+Math.abs(b.deltaY)&&(b.dragged=!0);b.handler.move&&(c=b.handler.move(a,b));b.moveUpdate&&(b.lastX=b.absoluteX,b.lastY=b.absoluteY);!c&&a.preventDefault&&a.preventDefault();return c}\nfunction handleMouseWheel(a){var b=getMouse(a);if(!b||b.disabled)return!0;b.update(a);var c=!1;a.spin=0<(a.deltaY?-a.deltaY:a.wheelDelta)?1:-1;b.handler.wheel&&(c=b.handler.wheel(a,b));!c&&a.preventDefault&&a.preventDefault();return c}function handleMouseLeave(a){var b=getMouse(a);if(!b||b.disabled)return!0;var c=!0;b.handler.leave&&(c=b.handler.leave(a,b));!c&&a.preventDefault&&a.preventDefault();return a.returnValue=c}\nfunction touchHandler(a){var b=a.changedTouches[0],c=null,d=getMouse(a);switch(a.type){case \"touchstart\":2==a.touches.length?(d.isdown=!1,d.scaling=0):c=\"mousedown\";break;case \"touchmove\":if(null!=d.scaling&&2==a.touches.length){var e=Math.sqrt((a.touches[0].pageX-a.touches[1].pageX)*(a.touches[0].pageX-a.touches[1].pageX)+(a.touches[0].pageY-a.touches[1].pageY)*(a.touches[0].pageY-a.touches[1].pageY));0<d.scaling?(a.distance=e-d.scaling,d.handler.pinch&&d.handler.pinch(a,d),a.returnValue=!0):d.scaling=\ne}else c=\"mousemove\";break;case \"touchend\":null!=d.scaling?d.scaling=0==d.scaling?null:0:c=\"mouseup\";break;default:return}1<a.touches.length&&(c=null);c&&(d=document.createEvent(\"MouseEvent\"),d.initMouseEvent(c,!0,!0,window,1,b.screenX,b.screenY,b.clientX,b.clientY,a.ctrlKey,a.altKey,a.shiftKey,a.metaKey,0,null),b.target.dispatchEvent(d),a.preventDefault())}\nfunction printMatrix(a){console.log(\"--------- --------- --------- ---------\");for(var b=0;4>b;b++){for(var c=\"\",d=0;4>d;d++)var e=\"\"+(4*d+b),f=\"\"+a[4*d+b].toFixed(5),c=c+(e.padStart(2)+\" \"+f.padStart(8)+\" \");console.log(c)}console.log(\"--------- --------- --------- ---------\")}function Viewport(a,b,c,d){this.x=a;this.y=b;this.width=c;this.height=d;this.array=new Float32Array([a,b,c,d])}\nfunction WebGL(a,b){this.program=null;this.modelView=new ViewMatrix;this.projection=new ViewMatrix;this.textures=[];this.timer=null;if(!window.WebGLRenderingContext)throw\"No browser WebGL support\";try{this.gl=a.getContext(\"webgl\",b)||a.getContext(\"experimental-webgl\",b)}catch(c){throw OK.debug(\"detectGL exception: \"+c),\"No context\";}this.viewport=new Viewport(0,0,a.width,a.height);if(!this.gl)throw\"Failed to get context\";}\nWebGL.prototype.setMatrices=function(){this.gl.uniformMatrix4fv(this.program.mvMatrixUniform,!1,this.modelView.matrix);this.gl.uniformMatrix4fv(this.program.pMatrixUniform,!1,this.projection.matrix);this.setNormalMatrix()};WebGL.prototype.setNormalMatrix=function(){this.program.nMatrixUniform&&(this.nMatrix=mat4.create(this.modelView.matrix),mat4.inverse(this.nMatrix),mat4.transpose(this.nMatrix),this.gl.uniformMatrix4fv(this.program.nMatrixUniform,!1,this.nMatrix))};\nWebGL.prototype.initDraw2d=function(){this.gl.enableVertexAttribArray(this.program.attributes.aVertexPosition);this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexPositionBuffer);this.gl.vertexAttribPointer(this.program.attributes.aVertexPosition,this.vertexPositionBuffer.itemSize,this.gl.FLOAT,!1,0,0);this.program.attributes.aTextureCoord&&(this.gl.enableVertexAttribArray(this.program.attributes.aTextureCoord),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.textureCoordBuffer),this.gl.vertexAttribPointer(this.program.attributes.aTextureCoord,\nthis.textureCoordBuffer.itemSize,this.gl.FLOAT,!1,0,0));this.setMatrices()};WebGL.prototype.updateTexture=function(a,b,c){void 0==c&&(c=this.gl.TEXTURE0);this.gl.activeTexture(c);this.gl.bindTexture(this.gl.TEXTURE_2D,a);this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,b);this.gl.bindTexture(this.gl.TEXTURE_2D,null)};\nWebGL.prototype.init2dBuffers=function(a){void 0==a&&(a=this.gl.TEXTURE0);this.vertexPositionBuffer=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.vertexPositionBuffer);this.gl.bufferData(this.gl.ARRAY_BUFFER,new Float32Array([1,1,-1,1,1,-1,-1,-1]),this.gl.STATIC_DRAW);this.vertexPositionBuffer.itemSize=2;this.vertexPositionBuffer.numItems=4;this.gl.activeTexture(a);this.gradientTexture=this.gl.createTexture();this.gl.bindTexture(this.gl.TEXTURE_2D,this.gradientTexture);this.gl.texParameteri(this.gl.TEXTURE_2D,\nthis.gl.TEXTURE_MAG_FILTER,this.gl.NEAREST);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.NEAREST);this.textureCoordBuffer=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.textureCoordBuffer);this.gl.bufferData(this.gl.ARRAY_BUFFER,new Float32Array([1,1,0,1,1,0,0,0]),this.gl.STATIC_DRAW);this.textureCoordBuffer.itemSize=2;this.textureCoordBuffer.numItems=4};\nWebGL.prototype.loadTexture=function(a,b,c,d){void 0==b&&(b=this.gl.NEAREST);void 0==c&&(c=this.gl.RGBA);this.texid=this.textures.length;this.textures.push(this.gl.createTexture());this.gl.bindTexture(this.gl.TEXTURE_2D,this.textures[this.texid]);d&&this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL,!0);this.gl.texImage2D(this.gl.TEXTURE_2D,0,c,c,this.gl.UNSIGNED_BYTE,a);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,b);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,\nb);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE);this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE);this.gl.bindTexture(this.gl.TEXTURE_2D,null);return this.textures[this.texid]};WebGL.prototype.setPerspective=function(a,b,c,d){void 0==a&&(a=45);void 0==b&&(b=1);void 0==c&&(c=.1);void 0==d&&(d=1E3);this.projection.matrix=mat4.perspective(a,b,c,d)};WebGL.prototype.use=function(a){this.program=a;this.program.program&&this.gl.useProgram(this.program.program)};\nWebGL.prototype.view=function(a){this.gl&&(this.gl.viewport(this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT),this.apply(a))};\nWebGL.prototype.apply=function(a){if(this.gl){this.setPerspective(a.fov,this.viewport.width/this.viewport.height,a.near_clip,a.far_clip);this.modelView.identity();this.modelView.translate([a.translate[0],a.translate[1],a.translate[2]]);var b=[-(a.focus[0]-a.centre[0]),-(a.focus[1]-a.centre[1]),-(a.focus[2]-a.centre[2])];this.modelView.translate(b);this.modelView.mult(quat4.toMat4(a.rotate));this.modelView.scale(a.scale);this.modelView.translate([-b[0],-b[1],-b[2]]);this.modelView.translate([-a.focus[0],\n-a.focus[1],-a.focus[2]*a.orientation]);1==a.orientation?this.gl.frontFace(a.gl.CCW):(this.gl.frontFace(a.gl.CW),this.modelView.scale([1,1,-1]))}};\nfunction WebGLProgram(a,b,c){this.program=null;0>b.indexOf(\"main\")&&(b=getSourceFromElement(b));0>c.indexOf(\"main\")&&(c=getSourceFromElement(c));this.gl=a;this.program&&this.gl.isProgram(this.program)&&(this.gl.isShader(this.vshader)&&(this.gl.detachShader(this.program,this.vshader),this.gl.deleteShader(this.vshader)),this.gl.isShader(this.fshader)&&(this.gl.detachShader(this.program,this.fshader),this.gl.deleteShader(this.fshader)),this.gl.deleteProgram(this.program));this.program=this.gl.createProgram();\nthis.vshader=this.compileShader(b,this.gl.VERTEX_SHADER);this.fshader=this.compileShader(c,this.gl.FRAGMENT_SHADER);this.gl.attachShader(this.program,this.vshader);this.gl.attachShader(this.program,this.fshader);this.gl.linkProgram(this.program);if(!this.gl.getProgramParameter(this.program,this.gl.LINK_STATUS))throw\"Could not initialise shaders: \"+this.gl.getProgramInfoLog(this.program);}\nWebGLProgram.prototype.compileShader=function(a,b){var c=this.gl.createShader(b);this.gl.shaderSource(c,a);this.gl.compileShader(c);if(!this.gl.getShaderParameter(c,this.gl.COMPILE_STATUS))throw this.gl.getShaderInfoLog(c);return c};\nWebGLProgram.prototype.setup=function(a,b,c){if(this.program){if(void 0==a){a=[];for(var d=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),e=0;e<d;++e){var f=this.gl.getActiveAttrib(this.program,e);a.push(f.name)}}if(void 0==b)for(b=[],d=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_UNIFORMS),e=0;e<d;++e)f=this.gl.getActiveUniform(this.program,e),b.push(f.name);this.attributes={};for(e in a)this.attributes[a[e]]=this.gl.getAttribLocation(this.program,a[e]),c||this.gl.enableVertexAttribArray(this.attributes[a[e]]);\nthis.uniforms={};for(e in b)this.uniforms[b[e]]=this.gl.getUniformLocation(this.program,b[e]);this.mvMatrixUniform=this.gl.getUniformLocation(this.program,\"uMVMatrix\");this.pMatrixUniform=this.gl.getUniformLocation(this.program,\"uPMatrix\");this.nMatrixUniform=this.gl.getUniformLocation(this.program,\"uNMatrix\")}};function ViewMatrix(){this.matrix=mat4.create();mat4.identity(this.matrix);this.stack=[]}ViewMatrix.prototype.toString=function(){return JSON.stringify(this.toArray())};\nViewMatrix.prototype.toArray=function(){return JSON.parse(mat4.str(this.matrix))};ViewMatrix.prototype.push=function(a){a?(this.stack.push(mat4.create(a)),this.matrix=mat4.create(a)):this.stack.push(mat4.create(this.matrix))};ViewMatrix.prototype.pop=function(){if(0==this.stack.length)throw\"Matrix stack underflow\";return this.matrix=this.stack.pop()};ViewMatrix.prototype.mult=function(a){mat4.multiply(this.matrix,a)};ViewMatrix.prototype.identity=function(){mat4.identity(this.matrix)};\nViewMatrix.prototype.scale=function(a){mat4.scale(this.matrix,a)};ViewMatrix.prototype.translate=function(a){mat4.translate(this.matrix,a)};ViewMatrix.prototype.rotate=function(a,b){mat4.rotate(this.matrix,a*Math.PI/180,b)};\nfunction Palette(a,b){this.premultiply=b;this.background=new Colour(\"rgba(0,0,0,0)\");this.colours=[];this.slider=new Image;this.slider.src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAPCAYAAAA2yOUNAAAAj0lEQVQokWNIjHT8/+zZs//Pnj37/+TJk/9XLp/+f+bEwf9HDm79v2Prqv9aKrz/GUYVEaeoMDMQryJXayWIoi0bFmFV1NWS+z/E1/Q/AwMDA0NVcez/LRsWoSia2luOUAADVcWx/xfO6/1/5fLp/1N7y//HhlmhKoCBgoyA/w3Vyf8jgyyxK4CBUF8zDAUAAJRXY0G1eRgAAAAASUVORK5CYII=\";if(a){var c=!1;if(\"string\"==typeof a)for(var d=a.split(/[\\n;]/),e,f=0;f<\nd.length;f++){var g=d[f].trim();if(g){var h=g.split(\"=\");if(\"Background\"==h[0])this.background=new Colour(h[1]);else if(\"P\"==h[0][0])e=parseFloat(h[1]);else if(\"C\"==h[0][0]){if(this.colours.push(new ColourPos(h[1],e)),1==e)break}else 2==h.length?this.colours.push(new ColourPos(h[1],h[0])):(c=!0,this.colours.push(new ColourPos(g)))}}else{for(d=0;d<a.length;d++)void 0==a[d].position&&(c=!0),this.colours.push(new ColourPos(a[d].colour,a[d].position));a.background&&(this.background=new Colour(a.background))}if(c)for(d=\n0;d<this.colours.length;d++)this.colours[d].position=1/(this.colours.length-1)*d;this.sort();c=!1;for(d=0;d<this.colours.length;d++)0<this.colours[d].colour.alpha&&(c=!0),1<this.colours[d].colour.alpha&&(this.colours[d].colour.alpha=1);if(!c)for(d=0;d<this.colours.length;d++)this.colours[d].colour.alpha=1}else this.colours.push(new ColourPos(\"rgba(255,255,255,1)\",0)),this.colours.push(new ColourPos(\"rgba(0,0,0,1)\",1))}\nPalette.prototype.sort=function(){this.colours.sort(function(a,b){return a.position-b.position})};Palette.prototype.newColour=function(a,b){var c=new ColourPos(b,a);this.colours.push(c);this.sort();for(c=1;c<this.colours.length-1;c++)if(this.colours[c].position==a)return c;return-1};Palette.prototype.inRange=function(a,b,c){for(var d=0;d<this.colours.length;d++){var e=this.colours[d].position*c;if(a==e||1<b&&a>=e-b/2&&a<=e+b/2)return d}return-1};\nPalette.prototype.inDragRange=function(a,b,c){for(var d=1;d<this.colours.length-1;d++){var e=this.colours[d].position*c;if(a==e||1<b&&a>=e-b/2&&a<=e+b/2)return d}return 0};Palette.prototype.remove=function(a){this.colours.splice(a,1)};Palette.prototype.toString=function(){for(var a=\"Background=\"+this.background.html(),b=0;b<this.colours.length;b++)a+=\"\\n\"+this.colours[b].position.toFixed(6)+\"=\"+this.colours[b].colour.html();return a};\nPalette.prototype.get=function(a){a||(a={});a.background=this.background.html();a.colours=[];for(var b=0;b<this.colours.length;b++)a.colours.push({position:this.colours[b].position,colour:this.colours[b].colour.html()});return a};Palette.prototype.toJSON=function(){return JSON.stringify(this.get())};\nPalette.prototype.draw=function(a,b){if(!this.slider.width&&b){var c=this;setTimeout(function(){c.draw(a,b)},150)}else if(a){var d=/webkit/.test(navigator.userAgent.toLowerCase());0==this.colours.length&&(this.background=new Colour(\"#ffffff\"),this.colours.push(new ColourPos(\"#000000\",0)),this.colours.push(new ColourPos(\"#ffffff\",1)));list=this.colours.slice(0);list.sort(function(a,b){return a.position-b.position});if(a.getContext){var e=a.width,f=a.height,g=a.getContext(\"2d\");g.clearRect(0,0,e,f);\nif(d)for(var h=0,d=1;d<list.length;d++){var k=Math.round(e*list[d].position);g.fillStyle=g.createLinearGradient(h,0,k,0);var l=list[d-1].colour,m=list[d].colour;this.premultiply&&!b&&(l=this.background.blend(l),m=this.background.blend(m));g.fillStyle.addColorStop(0,l.html());g.fillStyle.addColorStop(1,m.html());g.fillRect(h,0,k-h,f);h=k}else{g.fillStyle=g.createLinearGradient(0,0,e,0);for(d=0;d<list.length;d++)h=list[d].colour,this.premultiply&&!b&&(h=this.background.blend(h)),g.fillStyle.addColorStop(list[d].position,\nh.html());g.fillRect(0,0,e,f)}if(f=document.getElementById(\"backgroundCUR\"))f.style.background=this.background.html();if(b)for(d=1;d<list.length-1;d++)f=Math.floor(e*list[d].position)+.5,50<list[d].colour.HSV().V?g.strokeStyle=\"black\":g.strokeStyle=\"white\",g.beginPath(),g.moveTo(f,0),g.lineTo(f,a.height),g.closePath(),g.stroke(),f-=this.slider.width/2,g.drawImage(this.slider,f,0)}else alert(\"getContext failed!\")}else alert(\"Invalid canvas!\")};\nfunction ColourPos(a,b){this.position=void 0==b?0:parseFloat(b);if(0<=this.position&&1>=this.position)this.colour=a?\"object\"==typeof a?a:new Colour(a):new Colour(\"#000000\");else throw\"Invalid Colour Position: \"+b;}\nfunction Colour(a){\"undefined\"==typeof a?this.set(\"#ffffff\"):\"string\"==typeof a?this.set(a):\"object\"==typeof a?\"undefined\"!=typeof a.H?this.setHSV(a):\"undefined\"!=typeof a.red?(this.red=a.red,this.green=a.green,this.blue=a.blue,this.alpha=a.alpha):a.R?(this.red=a.R,this.green=a.G,this.blue=a.B,this.alpha=\"undefined\"==typeof a.A?1:a.A):(this.red=a[0],this.green=a[1],this.blue=a[2],1>=this.red&&1>=this.green&&1>=this.blue&&(this.red=Math.round(255*this.red),this.green=Math.round(255*this.green),this.blue=\nMath.round(255*this.blue)),this.alpha=\"undefined\"==typeof a[3]?1:a[3]):this.fromInt(a);1<this.alpha&&(this.alpha/=255)}\nColour.prototype.set=function(a){a||(a=\"#ffffff\");var b=/^rgba?\\((\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,?\\s*(\\d\\.?\\d*)?\\)$/.exec(a);b?(this.red=parseInt(b[1]),this.green=parseInt(b[2]),this.blue=parseInt(b[3]),this.alpha=\"undefined\"==typeof b[4]?1:parseFloat(b[4])):\"#\"==a.charAt(0)?(a=a.substring(1,7),this.alpha=1,this.red=parseInt(a.substring(0,2),16),this.green=parseInt(a.substring(2,4),16),this.blue=parseInt(a.substring(4,6),16)):this.fromInt(parseInt(a));1<this.alpha&&(this.alpha/=255)};\nColour.prototype.fromInt=function(a){this.red=a&255;this.green=(a&65280)>>>8;this.blue=(a&16711680)>>>16;this.alpha=((a&4278190080)>>>24)/255};Colour.prototype.toInt=function(){var a=this.red,a=a+(this.green<<8),a=a+(this.blue<<16);return a+=Math.round(255*this.alpha)<<24};Colour.prototype.toString=function(){return this.html()};Colour.prototype.html=function(){return\"rgba(\"+this.red+\",\"+this.green+\",\"+this.blue+\",\"+this.alpha.toFixed(2)/1+\")\"};\nColour.prototype.rgbaGL=function(){return new Float32Array([this.red/255,this.green/255,this.blue/255,this.alpha])};Colour.prototype.rgbaGLSL=function(){var a=this.rgbaGL();return\"rgba(\"+a[0].toFixed(4)/1+\",\"+a[1].toFixed(4)/1+\",\"+a[2].toFixed(4)/1+\",\"+a[3].toFixed(4)/1+\")\"};Colour.prototype.rgba=function(){return[this.red/255,this.green/255,this.blue/255,this.alpha]};Colour.prototype.rgbaObj=function(){return{R:this.red,G:this.green,B:this.blue,A:this.alpha}};Colour.prototype.print=function(){OK.debug(this.printString(!0))};\nColour.prototype.printString=function(a){return\"R:\"+this.red+\" G:\"+this.green+\" B:\"+this.blue+(a?\" A:\"+this.alpha:\"\")};Colour.prototype.HEX=function(a){a=Math.round(Math.min(Math.max(0,a),255));return\"0123456789ABCDEF\".charAt((a-a%16)/16)+\"0123456789ABCDEF\".charAt(a%16)};Colour.prototype.htmlHex=function(a){return\"#\"+this.HEX(this.red)+this.HEX(this.green)+this.HEX(this.blue)};Colour.prototype.hex=function(a){return this.HEX(this.red)+this.HEX(this.green)+this.HEX(this.blue)+this.HEX(255*this.alpha)};\nColour.prototype.hexGL=function(a){return this.HEX(255*this.alpha)+this.HEX(this.blue)+this.HEX(this.green)+this.HEX(this.red)};\nColour.prototype.setHSV=function(a){var b,c,d,e,f;f=a.S/100;var g=a.V/100,h=a.H/360;if(0<f){1<=h&&(h=0);h*=6;F=h-Math.floor(h);d=Math.round(255*g*(1-f));e=Math.round(255*g*(1-f*F));f=Math.round(255*g*(1-f*(1-F)));g=Math.round(255*g);switch(Math.floor(h)){case 0:b=g;c=f;e=d;break;case 1:b=e;c=g;e=d;break;case 2:b=d;c=g;e=f;break;case 3:b=d;c=e;e=g;break;case 4:b=f;c=d;e=g;break;case 5:b=g,c=d}this.red=b?b:0;this.green=c?c:0;this.blue=e?e:0}else this.blue=this.green=this.red=g=Math.round(255*g);this.alpha=\n\"undefined\"==typeof a.A?1:a.A};Colour.prototype.HSV=function(){var a=this.red/255,b=this.green/255,c=this.blue/255,d=Math.max(a,b,c);deltaMax=d-Math.min(a,b,c);var e,f,g,h,k;0==deltaMax?e=f=0:(e=deltaMax/d,g=((d-a)/6+deltaMax/2)/deltaMax,h=((d-b)/6+deltaMax/2)/deltaMax,k=((d-c)/6+deltaMax/2)/deltaMax,a==d?f=k-h:b==d?f=1/3+g-k:c==d&&(f=2/3+h-g),0>f&&(f+=1),1<f&&--f);return{H:360*f,S:100*e,V:100*d}};Colour.prototype.HSVA=function(){var a=this.HSV();a.A=this.alpha;return a};\nColour.prototype.interpolate=function(a,b){this.red=Math.round(this.red+b*(a.red-this.red));this.green=Math.round(this.green+b*(a.green-this.green));this.blue=Math.round(this.blue+b*(a.blue-this.blue));this.alpha=Math.round(this.alpha+b*(a.alpha-this.alpha))};Colour.prototype.blend=function(a){return new Colour([Math.round((1-a.alpha)*this.red+a.alpha*a.red),Math.round((1-a.alpha)*this.green+a.alpha*a.green),Math.round((1-a.alpha)*this.blue+a.alpha*a.blue),(1-a.alpha)*this.alpha+a.alpha*a.alpha])};\nfunction MoveWindow(a){if(a){this.element=document.getElementById(a);if(!this.element)return alert(\"No such element: \"+a),null;this.mouse=new Mouse(this.element,this);this.mouse.moveUpdate=!0;this.element.mouse=this.mouse}}\nMoveWindow.prototype.open=function(a,b){var c=this.element.style;0>a&&(a=0);0>b&&(b=0);void 0!=a&&(c.left=a+\"px\");void 0!=b&&(c.top=b+\"px\");c.display=\"block\";var d=this.element.offsetWidth,e=this.element.offsetHeight;a+d>window.innerWidth-20&&(c.left=window.innerWidth-d-20+\"px\");b+e>window.innerHeight-20&&(c.top=window.innerHeight-e-20+\"px\")};MoveWindow.prototype.close=function(){this.element.style.display=\"none\"};\nMoveWindow.prototype.move=function(a,b){if(b.isdown&&!(0<b.button)){var c=b.element.style;c.left=parseInt(c.left)+b.deltaX+\"px\";c.top=parseInt(c.top)+b.deltaY+\"px\"}};MoveWindow.prototype.down=function(a,b){return!1};function scale(a,b,c,d){return clamp(d*a/b,c,d)}function clamp(a,b,c){return Math.max(b,Math.min(c,a))}\nfunction ColourPicker(a,b){function c(a,b,c){var d=document.createElement(\"div\");d.id=a;b&&(d.innerHTML=b);c&&(d.style.cssText=c);return d}var d=document.getElementById(\"picker\");if(d&&d.picker)return d.picker.savefn=a,d.picker.abortfn=b,d.picker;d=document.body;this.element=c(\"picker\",null,\"display:none; top: 58px; z-index: 20; background: #0d0d0d; color: #aaa; cursor: move; font-family: sans; font-size: 11px; padding: 7px 10px 11px 10px; position: fixed; width: 252px; border-radius: 5px; border: 1px solid #444;\");\nvar e=c(\"pickCURBG\",null,'background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIElEQVQ4jWP4TwAcOHAAL2YYNWBYGEBIASEwasCwMAAALvidroqDalkAAAAASUVORK5CYII=\"); float: left; width: 12px; height: 12px; margin-right: 3px;');e.appendChild(c(\"pickCUR\",null,\"float: left; width: 12px; height: 12px; background: #fff; margin-right: 3px;\"));this.element.appendChild(e);e=c(\"pickRGB\",\"R: 255 G: 255 B: 255\",\"float: left; position: relative; top: -1px;\");e.onclick=\"colours.picker.updateString()\";\nthis.element.appendChild(e);this.element.appendChild(c(\"pickCLOSE\",\"X\",\"float: right; cursor: pointer; margin: 0 8px 3px;\"));this.element.appendChild(c(\"pickOK\",\"OK\",\"float: right; cursor: pointer; margin: 0 8px 3px;\"));e=c(\"SV\",null,\"position: relative; cursor: crosshair; float: left; height: 170px; width: 170px; margin-right: 10px; background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAEG0lEQVQ4jQEQBO/7APz8/Pz7+/vx+/v75Pr6+tb6+vrF+Pj4tPf396H4+PiO9/f3e/X19Wfz8/NU8PDwQuvr6zLi4uIjzs7OFZmZmQoA8PDw/O/v7/Ht7e3l7Ozs2Ozs7Mjq6uq35ubmpeXl5ZLf39+A3NzcbtXV1VvMzMxLvr6+O6ioqCyEhIQfQEBAFADk5OT84eHh8uDg4Obe3t7Z3Nzcy9nZ2brV1dWq0NDQmcrKyofCwsJ2uLi4ZKqqqlSYmJhFfX19N1lZWSsnJychANPT0/zT09Pz0NDQ6c3NzdzKysrNx8fHv8DAwK+6urqfsrKyj6mpqX+cnJxvjIyMX3l5eVBeXl5EPz8/ORsbGy8Aw8PD/MHBwfS+vr7qurq63ra2ttKxsbHErKystaOjo6eampqXj4+PiYODg3lycnJrXl5eX0hISFIuLi5IEBAQPwCwsLD9r6+v9aysrOynp6fioqKi1p2dncmVlZW8jo6OroODg6F5eXmUa2trhl1dXXlLS0ttNzc3YiIiIlkNDQ1RAJ6env2bm5v2l5eX7pSUlOWPj4/aiIiIz4GBgcN5eXm3cHBwq2RkZJ5XV1eSSkpKhzk5OX0qKipzGBgYawgICGMAioqK/YeHh/eDg4PvgICA6Hp6et90dHTVbW1ty2VlZcBcXFy1UVFRqkZGRqA6OjqWLS0tjSEhIYQSEhJ9BgYGdwB2dnb+c3Nz+HFxcfJra2vrZmZm42JiYttaWlrRUlJSyUtLS79CQkK2Nzc3rS0tLaQiIiKdGBgYlQ4ODo8EBASKAGNjY/5gYGD5XV1d9FpaWu5VVVXnTk5O4UlJSdlCQkLRPDw8yTQ0NMEqKiq7IiIisxkZGa0RERGmCgoKoQMDA5wAUFBQ/k9PT/pKSkr3R0dH8kNDQ+w+Pj7mOTk54DMzM9otLS3TJycnzSAgIMgZGRnBExMTvA0NDbcHBweyAwMDrwA9PT3+PDw8+zo6Ovg2Njb0MzMz8DAwMOwqKirnJSUl4iEhId4cHBzYFxcX1BISEtAODg7KCQkJxwQEBMQBAQHBAC0tLf4rKyv9Kioq+iYmJvclJSX0ISEh8R4eHu4aGhrqFhYW5xMTE+MQEBDgDQ0N3AgICNkGBgbWBAQE0wAAANEAHh4e/h0dHf0bGxv7Ghoa+hgYGPcWFhb2FBQU8xEREfEPDw/uDAwM7AoKCuoICAjoBgYG5gMDA+MBAQHiAAAA4QARERH+EBAQ/g8PD/0NDQ38DQ0N+wsLC/kKCgr4CAgI9wcHB/YFBQX0BAQE8wICAvIBAQHwAQEB7wAAAO8AAADuAAUFBf4FBQX+BAQE/gQEBP4DAwP+AwMD/QMDA/0CAgL8AQEB/AEBAfsAAAD7AAAA+wAAAPoAAAD6AAAA+QAAAPmq2NbsCl2m4wAAAABJRU5ErkJggg==') no-repeat; background-size: 100%;\");\ne.appendChild(c(\"SVslide\",null,\"background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYlWNgQAX/kTBW8B8ZYFMIk0ARQFaIoQCbQuopIspNRPsOrpABSzgBAFHzU61KjdKlAAAAAElFTkSuQmCC'); height: 9px; width: 9px; position: absolute; cursor: crosshair\"));this.element.appendChild(e);e=c(\"H\",null,'cursor: crosshair; float: left; height: 170px; position: relative; width: 19px; padding: 0;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIElEQVQ4jWP4TwAcOHAAL2YYNWBYGEBIASEwasCwMAAALvidroqDalkAAAAASUVORK5CYII=\");');\ne.appendChild(c(\"Hmodel\",null,\"position: relative;\"));e.appendChild(c(\"Hslide\",null,'top: 0px; left: -5px; background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAFCAYAAAC5Fuf5AAAAKklEQVQokWP4////fwY6gv////9n+A8F9LIQxVJaW4xiz4D5lB4WIlsMAPjER7mTpG/OAAAAAElFTkSuQmCC\"); height: 5px; width: 29px; position: absolute; '));this.element.appendChild(e);e=c(\"O\",null,'cursor: crosshair; float: left; height: 170px; position: relative; width: 19px; padding: 0;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIElEQVQ4jWP4TwAcOHAAL2YYNWBYGEBIASEwasCwMAAALvidroqDalkAAAAASUVORK5CYII=\");border: 1px solid #888; left: 9px;');\ne.appendChild(c(\"Omodel\",null,\"position: relative;\"));e.appendChild(c(\"Oslide\",null,'top: 0px; left: -5px; background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB0AAAAFCAYAAAC5Fuf5AAAAKklEQVQokWP4////fwY6gv////9n+A8F9LIQxVJaW4xiz4D5lB4WIlsMAPjER7mTpG/OAAAAAElFTkSuQmCC\"); height: 5px; width: 29px; position: absolute; '));this.element.appendChild(e);d.appendChild(this.element);d=document.createElement(\"style\");d.styleSheet?d.styleSheet.cssText=\"#pickRGB:hover {color: #FFD000;} #pickCLOSE:hover {color: #FFD000;} #pickOK:hover {color: #FFD000;}\":\nd.appendChild(document.createTextNode(\"#pickRGB:hover {color: #FFD000;} #pickCLOSE:hover {color: #FFD000;} #pickOK:hover {color: #FFD000;}\"));document.getElementsByTagName(\"head\")[0].appendChild(d);MoveWindow.call(this,\"picker\");this.savefn=a;this.abortfn=b;this.size=170;this.sv=5;this.oh=2;this.picked={H:360,S:100,V:100,A:1};this.max={H:360,S:100,V:100,A:1};this.colour=new Colour;for(var e=\"\",f,d=0;d<=this.size;d++)f=new Colour({H:Math.round(360/this.size*d),S:100,V:100,A:1}),e+=\"<div class='hue' style='height: 1px; width: 19px; margin: 0; padding: 0; background: \"+\nf.htmlHex()+\";'> </div>\";document.getElementById(\"Hmodel\").innerHTML=e;e=\"\";for(d=0;d<=this.size;d++)f=1-d/this.size,e+=\"<div class='opacity' style='height: 1px; width: 19px; margin: 0; padding: 0; background: #000;opacity: \"+f.toFixed(2)+\";'> </div>\";document.getElementById(\"Omodel\").innerHTML=e;this.element.picker=this}ColourPicker.prototype=new MoveWindow;ColourPicker.prototype.constructor=MoveWindow;\nColourPicker.prototype.pick=function(a,b,c){this.update(a.HSVA());\"block\"!=this.element.style.display&&MoveWindow.prototype.open.call(this,b,c)};ColourPicker.prototype.select=function(a,b,c){if(!b||!c){var d=a.getBoundingClientRect();b=b?b:d.left+32;c=c?c:d.top+32}d=new Colour(a.style.backgroundColor);this.update(d.HSVA());\"block\"!=this.element.style.display&&(MoveWindow.prototype.open.call(this,b,c),this.target=a)};\nColourPicker.prototype.click=function(a,b){if(\"pickCLOSE\"==b.target.id)this.abortfn&&this.abortfn(),toggle(\"picker\");else if(\"pickOK\"==b.target.id){this.savefn&&this.savefn(this.picked);if(this.target){var c=new Colour(this.picked);this.target.style.backgroundColor=c.html()}toggle(\"picker\")}else\"SV\"==b.target.id?this.setSV(b):\"Hslide\"==b.target.id||\"hue\"==b.target.className?this.setHue(b):\"Oslide\"!=b.target.id&&\"opacity\"!=b.target.className||this.setOpacity(b)};\nColourPicker.prototype.move=function(a,b){b.isdown&&0==b.button&&(\"picker\"==b.target.id||\"pickCUR\"==b.target.id||\"pickRGB\"==b.target.id?MoveWindow.prototype.move.call(this,a,b):b.target&&this.click(a,b))};ColourPicker.prototype.wheel=function(a,b){this.incHue(-a.spin)};\nColourPicker.prototype.setSV=function(a){var b=document.getElementById(\"SV\").getBoundingClientRect(),c=a.absoluteX-parseInt(b.left);a=a.absoluteY-parseInt(b.top);this.picked.S=scale(c,this.size,0,this.max.S);this.picked.V=this.max.V-scale(a,this.size,0,this.max.V);this.update(this.picked)};ColourPicker.prototype.setHue=function(a){var b=document.getElementById(\"H\").getBoundingClientRect();parseInt(b.left);a=a.absoluteY-parseInt(b.top);this.picked.H=scale(a,this.size,0,this.max.H);this.update(this.picked)};\nColourPicker.prototype.incHue=function(a){this.picked.H+=a;this.picked.H=clamp(this.picked.H,0,this.max.H);this.update(this.picked)};ColourPicker.prototype.setOpacity=function(a){var b=document.getElementById(\"O\").getBoundingClientRect();parseInt(b.left);a=a.absoluteY-parseInt(b.top);this.picked.A=1-clamp(a/this.size,0,1);this.update(this.picked)};ColourPicker.prototype.updateString=function(a){a||(a=prompt(\"Edit colour:\",this.colour.html()));a&&(this.colour=new Colour(a),this.update(this.colour.HSV()))};\nColourPicker.prototype.update=function(a){this.picked=a;this.colour=new Colour(a);rgba=this.colour.rgbaObj();rgbaStr=this.colour.html();bgcol=new Colour({H:a.H,S:100,V:100,A:255});document.getElementById(\"pickRGB\").innerHTML=this.colour.printString();document.getElementById(\"pickCUR\").style.background=rgbaStr;document.getElementById(\"pickCUR\").style.backgroundColour=rgbaStr;document.getElementById(\"SV\").style.backgroundColor=bgcol.htmlHex();document.getElementById(\"Hslide\").style.top=a.H/360*this.size-\nthis.oh+\"px\";document.getElementById(\"SVslide\").style.top=Math.round(this.size-a.V/100*this.size-this.sv)+\"px\";document.getElementById(\"SVslide\").style.left=Math.round(a.S/100*this.size-this.sv)+\"px\";document.getElementById(\"Oslide\").style.top=this.size*(1-a.A)-this.oh-1+\"px\"};\nfunction GradientEditor(a,b,c,d,e){this.canvas=a;this.callback=b;this.premultiply=c;this.changed=!0;this.inserting=!1;this.element=this.editing=null;this.spin=0;this.scrollable=e;d||(this.picker=new ColourPicker(this.save.bind(this),this.cancel.bind(this)));this.palette=new Palette(null,c);this.canvas.mouse=new Mouse(this.canvas,this);this.canvas.oncontextmenu=\"return false;\";this.canvas.oncontextmenu=function(){return!1}}\nGradientEditor.prototype.read=function(a){this.palette=new Palette(a,this.premultiply);this.reset();this.update(!0)};GradientEditor.prototype.update=function(a){this.changed=!0;this.palette.draw(this.canvas,!0);!a&&this.callback&&this.callback(this)};GradientEditor.prototype.get=function(a,b){if(b&&!this.changed)return!1;this.changed=!1;this.palette.draw(a,!1);return!0};\nGradientEditor.prototype.insert=function(a,b,c){this.inserting=!0;var d=new Colour;this.editing=this.palette.newColour(a,d);this.update();this.picker=new ColourPicker(this.save.bind(this),this.cancel.bind(this));this.picker.pick(d,b,c)};GradientEditor.prototype.editBackground=function(a){this.editing=-1;this.element=a;this.picker=new ColourPicker(this.save.bind(this),this.cancel.bind(this));a=a.getBoundingClientRect();this.picker.pick(this.palette.background,a.left+32,a.top+32)};\nGradientEditor.prototype.edit=function(a,b,c){this.picker=new ColourPicker(this.save.bind(this),this.cancel.bind(this));\"number\"==typeof a?(this.editing=a,this.picker.pick(this.palette.colours[a].colour,b,c)):\"object\"==typeof a&&(this.cancel(),this.element=a,b=new Colour(a.style.backgroundColor),a=a.getBoundingClientRect(),this.picker.pick(b,a.left+32,a.top+32));this.update()};\nGradientEditor.prototype.save=function(a){null!=this.editing&&(0<=this.editing?this.palette.colours[this.editing].colour.setHSV(a):this.palette.background.setHSV(a));if(this.element){var b=new Colour(0);b.setHSV(a);this.element.style.backgroundColor=b.html();if(this.element.onchange)this.element.onchange()}this.reset();this.update()};GradientEditor.prototype.cancel=function(){0<=this.editing&&this.inserting&&this.palette.remove(this.editing);this.reset();this.update()};\nGradientEditor.prototype.reset=function(){this.inserting=!1;this.element=this.editing=null};\nGradientEditor.prototype.click=function(a,b){if(a.ctrlKey){for(var c=0;c<this.palette.colours.length;c++)this.palette.colours[c].position=1-this.palette.colours[c].position;this.update();return!1}if(null!=b.slider)return b.slider=null,this.palette.sort(),this.update(),!1;var d=this.canvas;if(d.getContext){this.cancel();d.getContext(\"2d\");var e=d.getBoundingClientRect().top+30,c=this.palette.inRange(b.x,this.palette.slider.width,d.width);0<=c?0==a.button?this.edit(c,a.clientX-128,e):2==a.button&&(this.palette.remove(c),\nthis.update()):this.insert(b.x/d.width,a.clientX-128,e)}return!1};GradientEditor.prototype.down=function(a,b){return!1};GradientEditor.prototype.move=function(a,b){if(!b.isdown)return!0;if(null==b.slider){var c=this.palette.inDragRange(b.x,this.palette.slider.width,this.canvas.width);0<c&&(b.slider=c)}null==b.slider?b.isdown=!1:(1>b.x&&(b.x=1),b.x>this.canvas.width-1&&(b.x=this.canvas.width-1),this.palette.colours[b.slider].position=b.x/this.canvas.width,this.update(!0))};\nGradientEditor.prototype.wheel=function(a,b){this.timer?clearTimeout(this.timer):this.canvas.style.cursor=\"wait\";this.spin+=.01*a.spin;var c=this;this.timer=setTimeout(function(){c.cycle(c.spin);c.spin=0},150)};GradientEditor.prototype.leave=function(a,b){};\nGradientEditor.prototype.cycle=function(a){this.canvas.style.cursor=\"default\";this.timer=null;for(var b=1;b<this.palette.colours.length-1;b++){var c=this.palette.colours[b].position,c=c+a;0>=c&&(c+=1);1<=c&&--c;this.palette.colours[b].position=c}this.palette.sort();this.update()};\n\n//Base functions to communicate between emscripten WebGL2 viewer and IPython/Javascript page\n\n//Init standalong gui menu handler\nvar hideBoxTimer;\nfunction initBase(dict, defaultcmaps) {\n  var c = document.getElementById(\"canvas\");\n  c.style.display = 'block';\n\n  //console.log(\"INITBOX: \" + el.id);\n  var viewer = new BaseViewer();\n  window.viewer = viewer;\n\n  //Command callback function\n  viewer.command = function(cmds) {window.commands.push(cmds);}\n\n  //Data dict and colourmap names from passed strings\n  window.dictionary = viewer.dict = JSON.parse(dict);\n  window.defaultcolourmaps = viewer.defaultcolourmaps = JSON.parse(defaultcmaps);\n\n  document.addEventListener('mousemove', mouseover);\n\n  //Touch events\n  c.addEventListener(\"touchstart\", touchHandler, true);\n  c.addEventListener(\"touchmove\", touchHandler, true);\n  c.addEventListener(\"touchend\", touchHandler, true);\n\n  return viewer;\n}\n\nfunction mouseover() {\n  //GUI elements to show on mouseover\n  if (window.viewer.gui)\n    window.viewer.gui.domElement.style.display = \"block\";\n  if (hideBoxTimer) clearTimeout(hideBoxTimer);\n  hideBoxTimer = setTimeout(function () { hideMenu(null, window.viewer.gui);}, 1000 );\n}\n\n//This object holds the viewer details and calls the renderers\nfunction BaseViewer() {\n  this.vis = {};\n  this.vis.objects = [];\n  this.vis.colourmaps = [];\n  this.canvas = undefined;\n\n  //Non-persistant settings\n  this.mode = 'Rotate';\n}\n\nBaseViewer.prototype.reload = function() {\n  this.command('reload');\n}\n\nBaseViewer.prototype.sendState = function(reload) {\n  //Remove the cam data\n  this.vis.exported = true;\n  this.vis.reload = reload;\n  this.command(JSON.stringify(this.vis));\n}\n\nfunction Merge(obj1, obj2) {\n  for (var p in obj2) {\n    try {\n      //console.log(p + \" ==> \" + obj2[p].constructor);\n      // Property in destination object set; update its value.\n      if (!obj2.hasOwnProperty(p)) continue;\n      if (obj2[p].constructor == Object || obj2[p].constructor == Array) {\n        obj1[p] = Merge(obj1[p], obj2[p]);\n      } else {\n        //Just copy\n        obj1[p] = obj2[p];\n      }\n    } catch(e) {\n      // Property in destination object not set; create it and set its value.\n      obj1[p] = obj2[p];\n    }\n  }\n\n  //Clear any keys in obj1 that are not in obj2\n  for (var p in obj1) {\n    if (!obj1.hasOwnProperty(p)) continue; //Ignore built in keys\n    if (p in obj2) continue;\n    if (typeof(obj1[p]) != 'object') {\n      //Just delete\n      delete obj1[p]\n    }\n  }\n\n  return obj1;\n}\n\nBaseViewer.prototype.toString = function(nocam, reload) {\n\n  this.vis.exported = true;\n  this.vis.reload = reload ? true : false;\n\n  if (nocam) return JSON.stringify(this.vis);\n  //Export with 2 space indentation\n  return JSON.stringify(this.vis, undefined, 2);\n}\n\nBaseViewer.prototype.exportFile = function() {\n  window.open('data:text/plain;base64,' + window.btoa(this.toString(false, true)));\n}\n\nBaseViewer.prototype.loadFile = function(source) {\n  //Skip update to rotate/translate etc if in process of updating\n  //if (document.mouse.isdown) return;\n  //console.log(\"LOADING: \\n\" + source);\n  if (source.length < 3) {\n    console.log('Invalid source data, ignoring');\n    console.log(source);\n    console.log(BaseViewer.prototype.loadFile.caller);\n    return; //Invalid\n  }\n\n  if (!this.vis)\n    this.vis = {};\n\n  //Parse data\n  var src = {};\n  try {\n    src = JSON.parse(source);\n  } catch(e) {\n    console.log(source);\n    console.log(\"Parse Error: \" + e);\n    return;\n  }\n\n  //Before merge, delete all colourmap data if changed\n  for (var c in this.vis.colourmaps) {\n    //Name or colour count mismatch? delete so can be recreated\n    if (this.vis.colourmaps[c].name != src.colourmaps[c].name || \n        this.vis.colourmaps[c].colours.length != src.colourmaps[c].colours.length) {\n      //Delete the colourmap folder for this map, will be re-created\n      if (this.cgui && this.cgui.__folders[this.vis.colourmaps[c].name]) {\n        this.cgui.removeFolder(this.cgui.__folders[this.vis.colourmaps[c].name]);\n        this.cgui.__folders[this.vis.colourmaps[c].name] = undefined;\n      }\n      //Clear all the colours so new data will replace in merge\n      this.vis.colourmaps[c].colours = undefined;\n    }\n  }\n\n  //Merge keys - preserves original objects for gui access\n  Merge(this.vis, src);\n\n  //No model loaded? Prevents errors so default are loaded\n  if (!this.vis.properties)\n    this.vis.properties = {};\n\n  //Create UI - disable by omitting dat.gui.min.js\n  //(If menu doesn't exist or is open, update immediately\n  // otherwise, wait until clicked/opened as update is slow)\n  if (!this.gui || !this.gui.closed)\n    this.menu();\n  else\n    this.reloadgui = true;\n}\n\nBaseViewer.prototype.menu = function() {\n  //Create UI - disable by omitting dat.gui.min.js\n  //This is slow! Don't call while animating\n  var viewer = this;\n  var changefn = function(value, reload) {\n    //console.log(JSON.stringify(Object.keys(this)));\n    //console.log(value);\n    if (reload == undefined) {\n      reload = true;\n      if (this.property && viewer.dict[this.property])\n      {\n        //Get reload level from prop dict\n        //console.log(this.property + \" REDRAW: \" + viewer.dict[this.property].redraw);\n        reload = viewer.dict[this.property].redraw;\n      }\n    }\n\n    //Sync state and reload\n    viewer.sendState(reload);\n  };\n\n  if (!this.gui || this.gui.closed) {\n    //Re-create from scratch if closed or not present\n    createMenu(this, changefn, 2);\n  } else {\n    updateMenu(this, changefn);\n  }\n  this.reloadgui = false;\n}\n\nBaseViewer.prototype.syncRotation = function(rot) {\n  if (rot)\n    this.vis.views[0].rotate = rot;\n  rstr = '' + this.getRotationString();\n  that = this;\n  window.requestAnimationFrame(function() {that.command(rstr);});\n}\n\nBaseViewer.prototype.getRotationString = function() {\n  //Return current rotation quaternion as string\n  var q = this.vis.views[0].rotate;\n  return 'rotation ' + q[0] + ' ' + q[1] + ' ' + q[2] + ' ' + q[3];\n}\n\nBaseViewer.prototype.getTranslationString = function() {\n  return 'translation ' + this.translate[0] + ' ' + this.translate[1] + ' ' + this.translate[2];\n}\n\nBaseViewer.prototype.reset = function() {\n  this.command('reset');\n}\n\n//Basic touch event handling\nfunction touchHandler(event)\n{\n  var mouse = event.target.mouse;\n  if (!mouse)\n    event.target.mouse = mouse = {\"identifier\" : -1};\n\n  if (window.viewer.gui)\n    mouseover();\n\n  switch(event.type)\n  {\n    case \"touchstart\":\n      if (!mouse.touchmax || mouse.touchmax < event.touches.length) {\n        mouse.touchmax = event.touches.length;\n        //console.log(\"touchmax: \" + mouse.touchmax);\n        if (event.touches.length == 2)\n          mouse.scaling = 0;\n      }\n      break;\n    case \"touchmove\":\n      //console.log(\"touchmax: \" + mouse.touchmax + \" == \" + event.touches.length);\n      if (event.touches.length == mouse.touchmax) {\n        var down = false;\n        var touch;\n        //Get the touch to track, always use the same id\n        if (mouse.identifier == -1) {\n          mouse.identifier = event.touches[0].identifier;\n          touch = event.touches[0];\n          down = true;\n        } else {\n          //Find logged touch\n          for (var t=0; t<event.touches.length; t++) {\n            //console.log(t + \" / \" + event.touches.length + \" : \" + event.touches[t].identifier + ' === ' + mouse.identifier)\n            if (event.touches[t].identifier === mouse.identifier) {\n              touch = event.touches[t];\n              break;\n            }\n          }\n        }\n\n        var x = touch.pageX;\n        var y = touch.pageY;\n\n        //Delayed mouse-down event post (need to wait until all of multiple touches registered)\n        if (down)\n          window.viewer.command('mouse mouse=down,button=' + (event.touches.length > 1 ? 2 : 0) + ',x=' + x + ',y=' + y);\n\n        if (event.touches.length == 3) {\n          //Translate on drag with 3 fingers(equivalent to drag with right mouse)\n          window.viewer.command('mouse mouse=move,button=2,x=' + x + ',y=' + y);\n\n        } else if (event.touches.length == 2) {\n          var pinch = 0;\n          if (mouse.scaling != null && event.touches.length == 2) {\n            var dist = Math.sqrt(\n              (event.touches[0].pageX-event.touches[1].pageX) * (event.touches[0].pageX-event.touches[1].pageX) +\n              (event.touches[0].pageY-event.touches[1].pageY) * (event.touches[0].pageY-event.touches[1].pageY));\n\n            if (mouse.scaling > 0)\n              pinch = (dist - mouse.scaling);\n            else\n              mouse.scaling = dist;\n            //console.log(\"DIST \" + dist + \" SCALING \" + mouse.scaling + \" PINCH \" + pinch);\n          }\n\n          //Pinch to scale? If not sufficient scaling, interpret as translate drag\n          if (Math.abs(pinch) > 50)\n            window.viewer.command('zoom ' + (pinch * 0.0005));\n          else\n            //Also translate on drag with 2 fingers(equivalent to drag with right mouse)\n            window.viewer.command('mouse mouse=move,button=2,x=' + x + ',y=' + y);\n\n        } else if (event.touches.length == 1) {\n          //Rotate\n          window.viewer.command('mouse mouse=move,button=0,x=' + x + ',y=' + y);\n        }\n      }\n      break;\n    case \"touchend\":\n      if (event.touches.length == mouse.touchmax) {\n        mouse.scaling = null;\n        window.viewer.command('mouse mouse=up,button=' + (event.touches.length > 1 ? 2 : 0));\n      }\n      mouse.identifier = -1;\n      mouse.touchmax = 0;\n      break;\n    default:\n      return;\n  }\n\n  event.preventDefault();\n  return false;\n}\n\n\n\n/* dat.gui menu */\n\nfunction parseColour(input) {\n  if (typeof(input) != 'object') {\n    //var div = document.createElement('div');\n    var div = document.getElementById('hidden_style_div');\n    div.style.color = input;\n    //This triggers a full layout calc - can slow things down\n    c = getComputedStyle(div).color;\n    o = getComputedStyle(div).opacity;\n    C = new Colour(c);\n    //c.alpha = o;\n    //toFixed() / 1 rounds to fixed position and removes trailing zeros\n    c.alpha = parseFloat(o).toFixed(2) / 1;\n  } else {\n    C = new Colour(input);\n  }\n  return C.html();\n}\n\n//Attempts to get range from data/volume objects for range controls\nfunction menu_getrange(obj, ctrl) {\n    //Ranged?\n    if (ctrl.length > 1 && ctrl[1].length == 3) {\n      var range = [ctrl[1][0], ctrl[1][1]];\n      //Mapped range?\n      if (ctrl[1][0] === ctrl[1][1] && ctrl[1][0] === 0.0) {\n        //Try volume range\n        if (obj.volume && obj.volume.minimum < obj.volume.maximum)\n          range = [obj.volume.minimum, obj.volume.maximum];\n        //Or value data range\n        else if (obj.values && obj.values.minimum < obj.values.maximum)\n          range = [obj.values.minimum, obj.values.maximum];\n      }\n      if (range[1] <= range[0]) {\n        //console.log(obj.name + \" : range (invalid) = \" + range);\n        return [0.0, 1.0]; //No valid range data, use a default\n      }\n      //console.log(obj.name + \" : range = \" + range);\n      return range;\n    }\n    return null;\n}\n\n//Add controls to menu, using property metadata\nfunction menu_addctrl(menu, obj, viewer, prop, changefn) {\n  //TODO: implement delayed high quality render for faster interaction\n  //var changefn = function(value) {viewer.delayedRender(250);};\n  var ctrl = viewer.dict[prop].control;\n\n  //Query prop dict for data type, default, min/max/step etc\n  var dtype = viewer.dict[prop].type;\n  if (prop === 'colourmap') {\n    var maps = ['']\n    for (var i=0; i<viewer.vis.colourmaps.length; i++)\n      maps.push(viewer.vis.colourmaps[i].name);\n    //console.log(JSON.stringify(maps));\n    menu.add(obj, prop, maps).onFinishChange(changefn);\n\n  } else if (ctrl.length > 2 && ctrl[2] != null) {\n    //Select from list of options\n    menu.add(obj, prop, ctrl[2]).onFinishChange(changefn);\n\n  } else if ((dtype.indexOf('real') >= 0 || dtype.indexOf('integer') >= 0)) { // && typeof(obj[prop]) == 'number') {\n\n    //Ranged?\n    var range = menu_getrange(obj, ctrl);\n    var addnumeric = function(menu, obj, prop, range, changefn) {\n      if (range) {\n        if (obj[prop] < range[0]) obj[prop] = range[0];\n        if (obj[prop] > range[1]) obj[prop] = range[1];\n        return menu.add(obj, prop, range[0], range[1], ctrl[1][2]).onFinishChange(changefn);\n      } else {\n        return menu.add(obj, prop).onFinishChange(changefn);\n      }\n    }\n\n    //Array quantities\n    var dims = 1;\n    var p0 = dtype.indexOf('[');\n    var p1 = dtype.indexOf(']');\n    if (p0 >= 0 && p1 >= 0)\n      dims = parseInt(dtype.slice(p0+1, p1));\n    if (dims > 1) {\n      //2d, 3d ?\n      for (var d=0; d<dims; d++) {\n        //console.log(\"Adding DIM \" + d);\n        var added = addnumeric(menu, obj[prop], \"\" + d, range, changefn)\n        added.name(prop + '[' + d + ']');\n      }\n\n    //Only add if a number, anything else will cause dat.gui to error\n    } else if (typeof(obj[prop]) == 'number') {\n      //1d\n      console.log(\"Adding \", prop, typeof(obj[prop]));\n      addnumeric(menu, obj, prop, range, changefn)\n    }\n\n  } else if (dtype === 'string' || dtype === 'boolean') {\n    menu.add(obj, prop).onFinishChange(changefn);\n  } else if (dtype === 'boolean') {\n    menu.add(obj, prop).onFinishChange(changefn);\n  } else if (dtype === 'colour') {\n    try {\n      //Convert to html colour first\n      obj[prop] = parseColour(obj[prop]);\n      menu.addColor(obj, prop).onChange(changefn);\n    } catch(e) {\n      console.log(e);\n    }\n  }\n}\n\nfunction menu_addctrls(menu, obj, viewer, onchange) {\n  //Loop through every available property\n  var extras = [];\n  for (var prop in viewer.dict) {\n\n    //Check if it is enabled in GUI\n    var ctrl = viewer.dict[prop].control;\n    if (!ctrl || ctrl[0] === false) continue; //Control disabled\n\n    //Check if it has been set on the target object\n    if (prop in obj) {\n      //console.log(prop + \" ==> \" + JSON.stringify(viewer.dict[prop]));\n      menu_addctrl(menu, obj, viewer, prop, onchange);\n\n    } else {\n      //Save list of properties without controls\n      extras.push(prop);\n      continue;\n    }\n  }\n\n  //Sort into alphabetical order\n  extras.sort();\n\n  //Add the extra properties to a dropdown list\n  //Selecting a property will add a controller for it\n  var propadd = {\"properties\" : \"\"};\n  var propselfn = function(prop) {\n    //Set the property to the default value\n    propadd.ref[prop] = viewer.dict[prop][\"default\"];\n    //Add new property controller\n    menu_addctrl(propadd.menu, propadd.ref, viewer, prop, onchange);\n    //Remove, then add the props list back at the bottom, minus new prop\n    propadd.menu.remove(propadd.controller);\n    //Save the new filtered list\n    propadd.list = propadd.list.filter(word => word != prop);\n    propadd.controller = propadd.menu.add(propadd, \"properties\", propadd.list).name(\"More properties\").onFinishChange(propadd.fn);\n  }\n  propadd.controller = menu.add(propadd, \"properties\", extras).name(\"More properties\").onFinishChange(propselfn);\n  propadd.ref = obj;\n  propadd.menu = menu;\n  propadd.fn = propselfn;\n  propadd.list = extras;\n}\n\n\nfunction menu_addcmaps(menu, obj, viewer, onchange) {\n  //Colourmap editing menu\n  if (viewer.cgui.prmenu) viewer.cgui.removeFolder(viewer.cgui.prmenu);\n  if (viewer.cgui.cmenu) viewer.cgui.removeFolder(viewer.cgui.cmenu);\n  if (viewer.cgui.pomenu) viewer.cgui.removeFolder(viewer.cgui.pomenu);\n  viewer.cgui.prmenu = viewer.cgui.addFolder(\"Properties\");\n  viewer.cgui.cmenu = viewer.cgui.addFolder(\"Colours\");\n  viewer.cgui.pomenu = viewer.cgui.addFolder(\"Positions\");\n  //Loop through every available property\n  for (var prop in viewer.dict) {\n    //Check if it is enabled in GUI\n    var ctrl = viewer.dict[prop].control;\n    if (!ctrl || ctrl[0] === false) continue; //Control disabled\n\n    //Check if it applies to colourmap object\n    if (viewer.dict[prop][\"target\"] == 'colourmap') {\n      //console.log(prop + \" ==> \" + JSON.stringify(viewer.dict[prop]));\n      //Need to add property default if not set\n      if (!obj[prop])\n        obj[prop] = viewer.dict[prop].default;\n      menu_addctrl(menu.prmenu, obj, viewer, prop, onchange);\n    }\n  }\n\n  var reload_onchange = function() {onchange(\"\", true);};\n\n  //Loop through colours\n  menu.cmenu.add({\"Add Colour\" : function() {obj.colours.unshift({\"colour\" : \"rgba(0,0,0,1)\", \"position\" : 0.0}); viewer.gui.close(); reload_onchange(); }}, \"Add Colour\");\n  //Need to add delete buttons in closure to get correct pos/index\n  function del_btn(pos) {menu.pomenu.add({\"Delete\" : function() {obj.colours.splice(pos, 1); viewer.gui.close(); reload_onchange(); }}, 'Delete').name('Delete ' + pos);}\n  for (var c in obj.colours) {\n    var o = obj.colours[c];\n    //Convert to html colour first\n    o.colour = parseColour(o.colour);\n    o.opacity = 1.0;\n    menu.cmenu.addColor(o, 'colour').onChange(reload_onchange).name('Colour ' + c);\n    menu.pomenu.add(o, 'position', 0.0, 1.0, 0.01).onFinishChange(reload_onchange).name('Position ' + c);\n    del_btn(c);\n  }\n}\n\nfunction createMenu(viewer, onchange, webglmode, global) {\n  if (!dat) return null;\n  //var t0 = performance.now();\n\n  //Exists? Destroy\n  if (viewer.gui)\n    viewer.gui.destroy();\n\n  var el = null;\n  //Insert within element rather than whole document\n  if (!global && viewer.canvas && viewer.canvas.parentElement != document.body && viewer.canvas.parentElement.parentElement != document.body) {\n    var pel = viewer.canvas.parentElement;\n    //A bit of a hack to detect converted HTML output and skip going up two parent elements\n    if (pel.parentElement.className != 'section')\n      pel = pel.parentElement;\n    pel.style.position = 'relative'; //Parent element relative prevents menu escaping wrapper div\n    //Jupyter notebook overflow hacks (allows gui to be larger than cell)\n    var e = pel;\n    //These parent elements need 'overflow: visible' to prevent scrolling or cut-off of menu\n    //Add the \"pgui\" class to all the parent containers \n    while (e != document.body) {\n      e.classList.add(\"pgui\");\n      e = e.parentElement;\n    }\n    //pel.style.overflow = 'visible'; //Parent element relative prevents menu escaping wrapper div\n    //pel.parentElement.style.overflow = 'visible'; //Parent element relative prevents menu escaping wrapper div\n    var id = 'dat_gui_menu_' + (viewer.canvas ? viewer.canvas.id : 'default');\n    el = document.getElementById(id)\n    if (el)\n      el.parentNode.removeChild(el);\n    el = document.createElement(\"div\");\n    el.id = id;\n    el.style.cssText = \"position: absolute; top: 0em; right: 0em; z-index: 255;\";\n    pel.insertBefore(el, pel.childNodes[0]);\n  }\n\n  var gui;\n  //Insert within element rather than whole document\n  if (el) {\n    gui = new dat.GUI({ autoPlace: false, width: 275, hideable: false });\n    el.appendChild(gui.domElement);\n  } else {\n    gui = new dat.GUI({ hideable: false, width: 275 });\n  }\n\n  //Re-create menu on element mouse down if we need to reload\n  //(Instead of calling whenever state changes, re-creation is slow!)\n  gui.domElement.onmousedown = function(e) {\n    if (viewer.reloadgui)\n      viewer.menu();\n    return true;\n  }\n\n  //Horrible hack to stop codemirror stealing events when menu is over an editor element\n  gui.domElement.onmouseenter = function(e) {\n    //console.log('mouseenter');\n    var stylesheet = document.styleSheets[0];\n    stylesheet.insertRule('.CodeMirror-code { pointer-events: none;}', 0);\n  };\n\n  gui.domElement.onmouseleave = function(e) {\n    //console.log('mouseleave');\n    var stylesheet = document.styleSheets[0];\n    if (stylesheet.cssRules[0].cssText.indexOf('CodeMirror') >= 0)\n      stylesheet.deleteRule(0);\n  };\n\n  //Hidden element for style compute, required to be on page for chrome, can't just use createElement\n  var elem = document.getElementById('hidden_style_div');\n  if (!elem) {\n    elem = document.createElement('div');\n    elem.style.display = 'none';\n    elem.id = 'hidden_style_div';\n    document.body.appendChild(elem);\n  }\n\n  //Move above other controls\n  gui.domElement.parentElement.style.zIndex = '255';\n  //Save close button for hide menu check\n  gui.closebtn = gui.domElement.getElementsByClassName('close-button')[0];\n  //Hide/show on mouseover (only if overlapping)\n  if (!viewer.reloadgui) {\n    //Create closed and hidden for the first time, leave as is otherwise\n    gui.close();\n    hideMenu(viewer.canvas, gui);\n  }\n\n  gui.add({\"Reload\" : function() {viewer.reload();}}, \"Reload\");\n  //VR supported? (WebGL only)\n  if (webglmode === 1 && navigator.getVRDisplays) {\n    viewer.vrDisplay = null;\n    viewer.inVR = false;\n    gui.add({\"VR Mode\" : function() {start_VR(viewer);}}, 'VR Mode');\n  }\n\n  if (!!window.chrome) //Stupid chrome disabled data URL open\n    gui.add({\"Export\" : function() {var w = window.open(); w.document.write('<pre>' + viewer.toString()  + '</pre>');}}, 'Export');\n  else\n    gui.add({\"Export\" : function() {window.open('data:application/json;base64,' + window.btoa(viewer.toString()));}}, 'Export');\n  //gui.add({\"loadFile\" : function() {document.getElementById('fileupload').click();}}, 'loadFile'). name('Load Image file');\n\n  //Non-persistent settings\n  gui.add(viewer, \"mode\", ['Rotate', 'Translate', 'Zoom']);\n  if (webglmode === 0) {\n    viewer.cmd = '';\n    gui.add(viewer, \"cmd\").onFinishChange(function(cmd) {if (cmd.length) {viewer.command(cmd); viewer.cmd = '';}}).name('Command');\n  }\n\n  //var s = gui.addFolder('Settings');\n  if (webglmode === 1) {\n    //Old WebGL 1.0 mode\n    gui.add(viewer.vis, \"interactive\").name(\"Interactive Render\");\n    gui.add(viewer.vis, \"immediatesort\").name(\"Immediate Sort\");\n    gui.add(viewer.vis, \"sortenabled\").name('Sort Enabled');\n  } else if (webglmode === 2) {\n    //Emscripten WebGL2 mode\n    gui.add({\"Full Screen\" : function() {Module.requestFullscreen(false,true);}}, 'Full Screen');\n    var params = {loadBrowserFile : function() { document.getElementById('fileinput').click(); } };\n    gui.add(params, 'loadBrowserFile').name('Load file');\n    gui.add({\"Export GLDB\" : function() {window.commands.push('export');}}, 'Export GLDB');\n  } else if (viewer.canvas) {\n    //Server render\n    var url = viewer.canvas.imgtarget.baseurl;\n    if (url)\n      gui.add({\"Popup Viewer\" : function() {window.open(url, \"LavaVu\", \"toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=1024,height=768\");}}, 'Popup Viewer');\n  }\n\n  var g = gui.addFolder('Globals/Defaults');\n  menu_addctrls(g, viewer.vis.properties, viewer, onchange);\n\n  var v = gui.addFolder('Views');\n  var ir2 = 1.0 / Math.sqrt(2.0);\n  v.add({\"Reset\" : function() {viewer.reset(); }}, 'Reset');\n  v.add({\"XY\" : function() {viewer.syncRotation([0, 0, 0, 1]); }}, 'XY');\n  v.add({\"YX\" : function() {viewer.syncRotation([0, 1, 0, 0]);}}, 'YX');\n  v.add({\"XZ\" : function() {viewer.syncRotation([ir2, 0, 0, -ir2]);}}, 'XZ');\n  v.add({\"ZX\" : function() {viewer.syncRotation([ir2, 0, 0, ir2]);}}, 'ZX');\n  v.add({\"YZ\" : function() {viewer.syncRotation([0, -ir2, 0, -ir2]);}}, 'YZ');\n  v.add({\"ZY\" : function() {viewer.syncRotation([0, -ir2, 0, ir2]);}}, 'ZY');\n  //console.log(JSON.stringify(viewer.view));\n  if (viewer.view)\n    menu_addctrls(v, viewer.view, viewer, onchange);\n  else\n    menu_addctrls(v, viewer.vis.views[0], viewer, onchange);\n\n  var o = gui.addFolder('Objects');\n  for (var id in viewer.vis.objects) {\n    var of = o.addFolder(viewer.vis.objects[id].name);\n    menu_addctrls(of, viewer.vis.objects[id], viewer, onchange);\n  }\n\n  viewer.gui = gui;\n  if (!viewer.selectedcolourmap) {\n    viewer.selectedcolourmap = \"\";\n    viewer.newcolourmap = \"\";\n  }\n  viewer.cgui = viewer.gui.addFolder('ColourMaps');\n\n  createColourMapMenu(viewer, onchange, webglmode === 1);\n\n  //var t1 = performance.now();\n  //console.log(\"Call to menu() took \" + (t1 - t0) + \" milliseconds.\")\n}\n\nfunction createColourMapMenu(viewer, onchange, webglmode) {\n  //Remove existing entries\n  for (var i in viewer.cgui.__controllers)\n    viewer.cgui.__controllers[i].remove();\n\n  var cms = [];\n\n  //Dropdown to select a colourmap, when selected the editing menu will be populated\n  for (var id in viewer.vis.colourmaps)\n    cms.push(viewer.vis.colourmaps[id].name);\n\n  if (webglmode) {\n    //Add a default colourmap\n    viewer.cgui.add({\"Add\" : function() {viewer.addColourMap(); viewer.gui.close();}}, 'Add');\n  } else {\n    //Add a colourmap from list of defaults\n    cmapaddfn = function(value) {\n      if (!value || !value.length) return;\n      viewer.command(\"select; colourmap \" + value + \" \" + value);\n      viewer.gui.close();\n    };\n\n    viewer.cgui.add(viewer, \"newcolourmap\", viewer.defaultcolourmaps).onFinishChange(cmapaddfn).name(\"Add\");\n  }\n\n  //Do the rest only if colourmaps exist...\n  if (cms.length == 0) return;\n\n  //When selected, populate the Colours & Positions menus\n  cmapselfn = function(value) {\n    if (!value) return;\n    for (var id in viewer.vis.colourmaps) {\n      if (value == viewer.vis.colourmaps[id].name)\n        menu_addcmaps(viewer.cgui, viewer.vis.colourmaps[id], viewer, onchange);\n    }\n  };\n\n  viewer.cgui.cmap = viewer.cgui.add(viewer, \"selectedcolourmap\", cms).onFinishChange(cmapselfn).name(\"Colourmap\");\n\n  //Re-select if previous value if any\n  if (viewer.selectedcolourmap)\n  cmapselfn(viewer.selectedcolourmap);\n}\n\nfunction updateMenu(viewer, onchange) {\n  //Attempt to update DAT.GUI controls\n  function updateDisplay(gui) {\n    for (var i in gui.__controllers)\n      gui.__controllers[i].updateDisplay();\n    for (var f in gui.__folders)\n      updateDisplay(gui.__folders[f]);\n  }\n  updateDisplay(viewer.gui);\n  updateDisplay(viewer.cgui);\n}\n\nfunction hideMenu(canvas, gui) {\n  //No menu, but hide the mode controls\n  if (!gui) {\n    if (canvas && canvas.imgtarget)\n      canvas.imgtarget.nextElementSibling.style.display = \"none\";\n    return;\n  }\n\n  //Requires menu to be closed and hiding enabled\n  if (!gui.closed) return;\n\n  //Only hide if overlapping the canvas (unless no canvas passed)\n  if (canvas) {\n    var rect0 = gui.closebtn.getBoundingClientRect();\n    var rect1 = canvas.getBoundingClientRect();\n    if (rect0.right < rect1.left || rect0.left > rect1.right ||\n        rect0.bottom < rect1.top || rect0.top > rect1.bottom) {\n      //No overlap, don't hide\n      return;\n    }\n  }\n\n  //Reached this point? Menu needs hiding\n  gui.domElement.style.display = \"none\";\n}\n\n//https://hacks.mozilla.org/2018/09/converting-a-webgl-application-to-webvr/\n//https://github.com/Manishearth/webgl-to-webvr/\n// This function is triggered when the user clicks the \"enter VR\" button\nfunction start_VR(viewer) {\n  if (viewer.vrDisplay != null) {\n    if (!viewer.inVR) {\n      viewer.inVR = true;\n      // hand the canvas to the WebVR API\n      viewer.vrDisplay.requestPresent([{ source: viewer.canvas }]);\n      // requestPresent() will request permission to enter VR mode,\n      // and once the user has done this our `vrdisplaypresentchange`\n      // callback will be triggered\n\n      //Show stats\n      if (!document.getElementById(\"stats_info\")) {\n        var stats = new Stats();\n        document.body.appendChild(stats.dom);\n        requestAnimationFrame(function loop() {\n          stats.update();\n          requestAnimationFrame(loop)\n        });\n      }\n\n    } else {\n      stop_VR(viewer);\n    }\n  }\n}\n\nfunction stop_VR(viewer) {\n  viewer.inVR = false;\n  // resize canvas to regular non-VR size if necessary\n  viewer.width = 0; //Auto resize\n  viewer.height = 0;\n  viewer.canvas.style.width = \"100%\";\n  viewer.canvas.style.height = \"100%\";\n\n  viewer.drawFrame();\n  viewer.draw();\n}\n\nfunction setup_VR(viewer) {\n  if (!navigator.getVRDisplays) {\n    alert(\"Your browser does not support WebVR\");\n    return;\n  }\n\n  function display_setup(displays) {\n    if (displays.length === 0)\n      return;\n    //Use last in list\n    viewer.vrDisplay = displays[displays.length-1];\n  }\n\n  navigator.getVRDisplays().then(display_setup);\n\n  function VR_change() {\n    // no VR display, exit\n    if (viewer.vrDisplay == null)\n        return;\n\n    // are we entering or exiting VR?\n    if (viewer.vrDisplay.isPresenting) {\n      // optional, but recommended\n      viewer.vrDisplay.depthNear = viewer.near_clip;\n      viewer.vrDisplay.depthFar = viewer.far_clip;\n\n      // We should make our canvas the size expected\n      // by WebVR\n      const eye = viewer.vrDisplay.getEyeParameters(\"left\");\n      // multiply by two since we're rendering both eyes side\n      // by side\n      viewer.width = eye.renderWidth * 2;\n      viewer.height = eye.renderHeight;\n      viewer.canvas.style.width = viewer.width + \"px\";\n      viewer.canvas.style.height = viewer.height + \"px\";\n      viewer.canvas.width = viewer.canvas.clientWidth;\n      viewer.canvas.height = viewer.canvas.clientHeight;\n\n      const vrCallback = () => {\n        if (viewer.vrDisplay == null || !viewer.inVR)\n          return;\n\n        // reregister callback if we're still in VR\n        viewer.vrDisplay.requestAnimationFrame(vrCallback);\n\n        // render scene\n        renderVR(viewer);\n      };\n\n      // register callback\n      viewer.vrDisplay.requestAnimationFrame(vrCallback);\n\n    } else {\n      stop_VR(viewer);\n    }\n  }\n\n  window.addEventListener('vrdisplaypresentchange', VR_change);\n}\n\nfunction renderVR(viewer) {\n  //Clear full canvas\n  viewer.gl.viewport(0, 0, viewer.canvas.width, viewer.canvas.height);\n  viewer.gl.clear(viewer.gl.COLOR_BUFFER_BIT | viewer.gl.DEPTH_BUFFER_BIT);\n\n  //Left eye\n  renderEye(viewer, true);\n\n  //Right eye\n  renderEye(viewer, false);\n\n  viewer.vrDisplay.submitFrame();\n}\n\nfunction renderEye(viewer, isLeft) {\n  let projection, mview;\n  let frameData = new VRFrameData();\n  var gl = viewer.webgl.gl;\n  var width = viewer.canvas.width / 2;\n  var height = viewer.canvas.height;\n\n  viewer.vrDisplay.getFrameData(frameData);\n\n  // choose which half of the canvas to draw on\n  if (isLeft) {\n    viewer.webgl.viewport = new Viewport(0, 0, width, height);\n    gl.viewport(0, 0, width, height);\n    //Apply the default camera\n    viewer.webgl.apply(viewer);\n\n    projection = frameData.leftProjectionMatrix;\n    mview = frameData.leftViewMatrix;\n  } else {\n    viewer.webgl.viewport = new Viewport(width, 0, width, height);\n    gl.viewport(width, 0, width, height);\n//viewer.webgl.viewport = new Viewport(0, 0, width, height);\n//gl.viewport(0, 0, width, height);\n    projection = frameData.rightProjectionMatrix;\n    mview = frameData.rightViewMatrix;\n  }\n\n  //Apply the default camera\n  viewer.webgl.apply(viewer);\n\n  //Update matrices with VR modified versions\n  //mat4.multiply(mview, viewer.webgl.modelView.matrix);\n  //viewer.webgl.modelView.matrix = mview;\n  mat4.multiply(viewer.webgl.modelView.matrix, mview);\n//console.log(isLeft ? \"LEFT \" : \"RIGHT \"); printMatrix(mview);\n  //gl.uniformMatrix4fv(viewer.webgl.program.mvMatrixUniform, false, mview);\n\n  viewer.webgl.projection.matrix = projection;\n\n  //Render objects\n  for (var r in viewer.renderers) {\n    if (viewer.renderers[r].border && !viewer.showBorder) continue;\n    viewer.renderers[r].draw();\n  }\n\n  viewer.rotated = false; //Clear rotation flag\n}\n\n\nvar statusElement = document.getElementById('status');\nvar progressElement = document.getElementById('progress');\nvar spinnerElement = document.getElementById('spinner');\nvar canvasElement = document.getElementById('canvas');\n\ncanvasElement.addEventListener(\"webglcontextlost\", function(e) { document.location.reload(); }, false);\n\n\n//LavaVu args - can be parsed in url params\nwindow.args = window.location.search.substr(1).split('&');\n//window.args.push(\"-v\")\n\nvar Module = {\n  arguments: window.args,\n  preRun: [],\n  postRun: [],\n  print: (function() {\n    var element = null;\n    if (\"-v\" in args) {\n      element = document.getElementById('output');\n      element.style.display = 'block';\n      if (element) element.value = ''; // clear browser cache\n    }\n    return function(text) {\n      if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');\n      console.log(text);\n      if (element) {\n        element.value += text + \"\\n\";\n        element.scrollTop = element.scrollHeight; // focus on bottom\n      }\n    };\n  })(),\n\n  printErr: function(text) {\n    if (arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');\n    //console.error(text);\n    console.log(text);\n    //Module.print(text);\n  },\n\n  canvas: (function() {\n    var canvas = document.getElementById('canvas');\n    return canvas;\n  })(),\n\n  setStatus: function(text) {\n    if (!Module.setStatus.last) Module.setStatus.last = { time: Date.now(), text: '' };\n    if (text === Module.setStatus.last.text) return;\n    var m = text.match(/([^(]+)\\((\\d+(\\.\\d+)?)\\/(\\d+)\\)/);\n    var now = Date.now();\n    if (m && now - Module.setStatus.last.time < 30) return; // if this is a progress update, skip it if too soon\n    Module.setStatus.last.time = now;\n    Module.setStatus.last.text = text;\n    if (m) {\n      text = m[1];\n      progressElement.value = parseInt(m[2])*100;\n      progressElement.max = parseInt(m[4])*100;\n      progressElement.hidden = false;\n      spinnerElement.hidden = false;\n    } else {\n      progressElement.value = null;\n      progressElement.max = null;\n      progressElement.hidden = true;\n      if (!text) spinnerElement.style.display = 'none';\n    }\n    statusElement.innerHTML = text;\n  },\n  locateFile: function(path, prefix) {\n    // Source from github by default\n    if (path.endsWith(\"LavaVu.wasm\") || path.endsWith(\"LavaVu.data\")) return \"https://cdn.jsdelivr.net/gh/lavavu/lavavu.github.io@1.8.31/\" + path;\n    // otherwise, use the default, the prefix (JS file's dir) + the path\n    return prefix + path;\n  },\n  totalDependencies: 0,\n  monitorRunDependencies: function(left) {\n    this.totalDependencies = Math.max(this.totalDependencies, left);\n    Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');\n  }\n};\nModule.setStatus('Downloading...');\nwindow.onerror = function(event) {\n  // TODO: do not warn on ok events like simulating an infinite loop or exitStatus\n  Module.setStatus('Exception thrown, see JavaScript console');\n  spinnerElement.style.display = 'none';\n  Module.setStatus = function(text) {\n    if (text) Module.printErr('[post-exception status] ' + text);\n  };\n};\n\n//https://stackoverflow.com/questions/54466870/emscripten-offer-to-download-save-a-generated-memfs-file\n//https://motley-coder.com/2019/04/01/download-files-emscripten/\nfunction download(filenamePtr, mimePtr) {\n  const filename = UTF8ToString(filenamePtr)\n  let mime = UTF8ToString(mimePtr)\n  if (mime.length == 0)\n    mime = \"application/octet-stream\";\n\n  let content = Module.FS.readFile(filename);\n  console.log(`Offering download of \"${filename}\", with ${content.length} bytes...`);\n\n  var a = document.createElement('a');\n  a.download = filename;\n  a.href = URL.createObjectURL(new Blob([content], {type: mime}));\n  a.style.display = 'none';\n\n  document.body.appendChild(a);\n  a.click();\n  setTimeout(() => {\n    document.body.removeChild(a);\n    URL.revokeObjectURL(a.href);\n  }, 2000);\n}\nwindow.download = download\nwindow.reload_flag = false;\nwindow.resized = true;\nwindow.commands = [];\n\n//Flag window resize\nwindow.onresize = function() {\n  window.resized = true;\n  clear_mods();\n};\n\n//Hack for firefox to fix mod key state bugs in emscripten glfw\nwindow.set_mods = function(e) {\n  window.m_alt = e.getModifierState('Alt');\n  window.m_shift = e.getModifierState('Shift');\n  window.m_ctrl = e.getModifierState('Control');\n  //console.log(e.key + \" ALT: \" + window.m_alt + \" SHIFT: \" + window.m_shift + \" CTRL: \" + window.m_ctrl);\n}\nwindow.clear_mods = function() {\n  window.m_alt = false;\n  window.m_shift = false;\n  window.m_ctrl = false;\n  //console.log(\" ALT: \" + window.m_alt + \" SHIFT: \" + window.m_shift + \" CTRL: \" + window.m_ctrl);\n}\nwindow.onkeydown = function(e){\n  set_mods(e);\n}\nwindow.onkeyup = function(e){\n  set_mods(e);\n}\n\n//Switch the theme, called when background changed\nvar light_theme = \"dat-gui-light-theme.css\";\n\nwindow.set_light_theme = function(enabled) {\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    var href = document.styleSheets[i].href;\n    if (href && href.includes(light_theme)) {\n      document.styleSheets[i].disabled = !enabled;\n      return;\n    }\n  }\n\n  //If we reach here, light theme is not loaded, add it\n  if (enabled) {\n    var head = document.getElementsByTagName(\"head\")[0];\n    var fileref = document.createElement(\"link\")\n    fileref.setAttribute(\"rel\", \"stylesheet\")\n    fileref.setAttribute(\"type\", \"text/css\")\n    fileref.setAttribute(\"href\", light_theme)\n    head.appendChild(fileref);\n  }\n}\n\n// https://stackoverflow.com/questions/47313403/passing-client-files-to-webassembly-from-the-front-end\nfunction useFileInput(fileInput) {\n  if (fileInput.files.length == 0)\n    return;\n  //TODO: support multiple?\n  var file = fileInput.files[0];\n\n  var fr = new FileReader();\n  fr.onload = function () {\n    var data = new Uint8Array(fr.result);\n\n    Module['FS_createDataFile']('/', file.name, data, true, true, true);\n    window.commands.push(\"clear all; file \" + file.name);\n\n    fileInput.value = '';\n  };\n  fr.readAsArrayBuffer(file);\n}\n\n\n\n// The Module object: Our interface to the outside world. We import\n// and export values on it. There are various ways Module can be used:\n// 1. Not defined. We create it here\n// 2. A function parameter, function(Module) { ..generated code.. }\n// 3. pre-run appended it, var Module = {}; ..generated code..\n// 4. External script tag defines var Module.\n// We need to check if Module already exists (e.g. case 3 above).\n// Substitution will be replaced with actual code on later stage of the build,\n// this way Closure Compiler will not mangle it (e.g. case 4. above).\n// Note that if you want to run closure, and also to use Module\n// after the generated code, you will need to define   var Module = {};\n// before the code. Then that object will be used in the code, and you\n// can continue to use Module afterwards as well.\nvar Module = typeof Module !== 'undefined' ? Module : {};\n\n// --pre-jses are emitted after the Module integration code, so that they can\n// refer to Module (if they choose; they can also define Module)\n\n  if (!Module.expectedDataFileDownloads) {\n    Module.expectedDataFileDownloads = 0;\n  }\n  Module.expectedDataFileDownloads++;\n  (function() {\n   var loadPackage = function(metadata) {\n  \n      var PACKAGE_PATH;\n      if (typeof window === 'object') {\n        PACKAGE_PATH = window['encodeURIComponent'](window.location.pathname.toString().substring(0, window.location.pathname.toString().lastIndexOf('/')) + '/');\n      } else if (typeof location !== 'undefined') {\n        // worker\n        PACKAGE_PATH = encodeURIComponent(location.pathname.toString().substring(0, location.pathname.toString().lastIndexOf('/')) + '/');\n      } else {\n        throw 'using preloaded data can only be done on a web page or in a web worker';\n      }\n      var PACKAGE_NAME = 'lavavu/html/LavaVu.data';\n      var REMOTE_PACKAGE_BASE = 'LavaVu.data';\n      if (typeof Module['locateFilePackage'] === 'function' && !Module['locateFile']) {\n        Module['locateFile'] = Module['locateFilePackage'];\n        err('warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)');\n      }\n      var REMOTE_PACKAGE_NAME = Module['locateFile'] ? Module['locateFile'](REMOTE_PACKAGE_BASE, '') : REMOTE_PACKAGE_BASE;\n    \n      var REMOTE_PACKAGE_SIZE = metadata['remote_package_size'];\n      var PACKAGE_UUID = metadata['package_uuid'];\n    \n      function fetchRemotePackage(packageName, packageSize, callback, errback) {\n        var xhr = new XMLHttpRequest();\n        xhr.open('GET', packageName, true);\n        xhr.responseType = 'arraybuffer';\n        xhr.onprogress = function(event) {\n          var url = packageName;\n          var size = packageSize;\n          if (event.total) size = event.total;\n          if (event.loaded) {\n            if (!xhr.addedTotal) {\n              xhr.addedTotal = true;\n              if (!Module.dataFileDownloads) Module.dataFileDownloads = {};\n              Module.dataFileDownloads[url] = {\n                loaded: event.loaded,\n                total: size\n              };\n            } else {\n              Module.dataFileDownloads[url].loaded = event.loaded;\n            }\n            var total = 0;\n            var loaded = 0;\n            var num = 0;\n            for (var download in Module.dataFileDownloads) {\n            var data = Module.dataFileDownloads[download];\n              total += data.total;\n              loaded += data.loaded;\n              num++;\n            }\n            total = Math.ceil(total * Module.expectedDataFileDownloads/num);\n            if (Module['setStatus']) Module['setStatus']('Downloading data... (' + loaded + '/' + total + ')');\n          } else if (!Module.dataFileDownloads) {\n            if (Module['setStatus']) Module['setStatus']('Downloading data...');\n          }\n        };\n        xhr.onerror = function(event) {\n          throw new Error(\"NetworkError for: \" + packageName);\n        }\n        xhr.onload = function(event) {\n          if (xhr.status == 200 || xhr.status == 304 || xhr.status == 206 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\n            var packageData = xhr.response;\n            callback(packageData);\n          } else {\n            throw new Error(xhr.statusText + \" : \" + xhr.responseURL);\n          }\n        };\n        xhr.send(null);\n      };\n\n      function handleError(error) {\n        console.error('package error:', error);\n      };\n    \n        var fetchedCallback = null;\n        var fetched = Module['getPreloadedPackage'] ? Module['getPreloadedPackage'](REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE) : null;\n\n        if (!fetched) fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE, function(data) {\n          if (fetchedCallback) {\n            fetchedCallback(data);\n            fetchedCallback = null;\n          } else {\n            fetched = data;\n          }\n        }, handleError);\n      \n    function runWithFS() {\n  \n      function assert(check, msg) {\n        if (!check) throw msg + new Error().stack;\n      }\n  Module['FS_createPath'](\"/\", \"shaders\", true, true);\n\n          /** @constructor */\n          function DataRequest(start, end, audio) {\n            this.start = start;\n            this.end = end;\n            this.audio = audio;\n          }\n          DataRequest.prototype = {\n            requests: {},\n            open: function(mode, name) {\n              this.name = name;\n              this.requests[name] = this;\n              Module['addRunDependency']('fp ' + this.name);\n            },\n            send: function() {},\n            onload: function() {\n              var byteArray = this.byteArray.subarray(this.start, this.end);\n              this.finish(byteArray);\n            },\n            finish: function(byteArray) {\n              var that = this;\n      \n          Module['FS_createDataFile'](this.name, null, byteArray, true, true, true); // canOwn this data in the filesystem, it is a slide into the heap that will never change\n          Module['removeRunDependency']('fp ' + that.name);\n  \n              this.requests[this.name] = null;\n            }\n          };\n      \n              var files = metadata['files'];\n              for (var i = 0; i < files.length; ++i) {\n                new DataRequest(files[i]['start'], files[i]['end'], files[i]['audio']).open('GET', files[i]['filename']);\n              }\n      \n        \n      function processPackageData(arrayBuffer) {\n        assert(arrayBuffer, 'Loading data file failed.');\n        assert(arrayBuffer instanceof ArrayBuffer, 'bad input to processPackageData');\n        var byteArray = new Uint8Array(arrayBuffer);\n        var curr;\n        \n          // Reuse the bytearray from the XHR as the source for file reads.\n          DataRequest.prototype.byteArray = byteArray;\n    \n            var files = metadata['files'];\n            for (var i = 0; i < files.length; ++i) {\n              DataRequest.prototype.requests[files[i].filename].onload();\n            }\n                Module['removeRunDependency']('datafile_lavavu/html/LavaVu.data');\n\n      };\n      Module['addRunDependency']('datafile_lavavu/html/LavaVu.data');\n    \n      if (!Module.preloadResults) Module.preloadResults = {};\n    \n        Module.preloadResults[PACKAGE_NAME] = {fromCache: false};\n        if (fetched) {\n          processPackageData(fetched);\n          fetched = null;\n        } else {\n          fetchedCallback = processPackageData;\n        }\n      \n    }\n    if (Module['calledRun']) {\n      runWithFS();\n    } else {\n      if (!Module['preRun']) Module['preRun'] = [];\n      Module[\"preRun\"].push(runWithFS); // FS is not initialized yet, wait for it\n    }\n  \n   }\n   loadPackage({\"files\": [{\"filename\": \"/dict.json\", \"start\": 0, \"end\": 52017, \"audio\": 0}, {\"filename\": \"/shaders/default.vert\", \"start\": 52017, \"end\": 52334, \"audio\": 0}, {\"filename\": \"/shaders/volumeShader.vert\", \"start\": 52334, \"end\": 52412, \"audio\": 0}, {\"filename\": \"/shaders/lineShader.frag\", \"start\": 52412, \"end\": 53357, \"audio\": 0}, {\"filename\": \"/shaders/fontShader.vert\", \"start\": 53357, \"end\": 53647, \"audio\": 0}, {\"filename\": \"/shaders/volumeShader.frag\", \"start\": 53647, \"end\": 69767, \"audio\": 0}, {\"filename\": \"/shaders/pointShader.vert\", \"start\": 69767, \"end\": 71002, \"audio\": 0}, {\"filename\": \"/shaders/triShader.vert\", \"start\": 71002, \"end\": 72122, \"audio\": 0}, {\"filename\": \"/shaders/pointShader.frag\", \"start\": 72122, \"end\": 75506, \"audio\": 0}, {\"filename\": \"/shaders/triShader.frag\", \"start\": 75506, \"end\": 80513, \"audio\": 0}, {\"filename\": \"/shaders/lineShader.vert\", \"start\": 80513, \"end\": 81035, \"audio\": 0}, {\"filename\": \"/shaders/default.frag\", \"start\": 81035, \"end\": 81293, \"audio\": 0}, {\"filename\": \"/shaders/fontShader.frag\", \"start\": 81293, \"end\": 81737, \"audio\": 0}, {\"filename\": \"/font.bin\", \"start\": 81737, \"end\": 307097, \"audio\": 0}], \"remote_package_size\": 307097, \"package_uuid\": \"d3850322-2edc-4ff7-b22e-02869b8362dd\"});\n  \n  })();\n  \n\n    // All the pre-js content up to here must remain later on, we need to run\n    // it.\n    var necessaryPreJSTasks = Module['preRun'].slice();\n  \n    if (!Module['preRun']) throw 'Module.preRun should exist because file support used it; did a pre-js delete it?';\n    necessaryPreJSTasks.forEach(function(task) {\n      if (Module['preRun'].indexOf(task) < 0) throw 'All preRun tasks that exist before user pre-js code should remain after; did you replace Module or modify Module.preRun?';\n    });\n  \n\n// Sometimes an existing Module object exists with properties\n// meant to overwrite the default module functionality. Here\n// we collect those properties and reapply _after_ we configure\n// the current environment's defaults to avoid having to be so\n// defensive during initialization.\nvar moduleOverrides = {};\nvar key;\nfor (key in Module) {\n  if (Module.hasOwnProperty(key)) {\n    moduleOverrides[key] = Module[key];\n  }\n}\n\nvar arguments_ = [];\nvar thisProgram = './this.program';\nvar quit_ = function(status, toThrow) {\n  throw toThrow;\n};\n\n// Determine the runtime environment we are in. You can customize this by\n// setting the ENVIRONMENT setting at compile time (see settings.js).\n\nvar ENVIRONMENT_IS_WEB = false;\nvar ENVIRONMENT_IS_WORKER = false;\nvar ENVIRONMENT_IS_NODE = false;\nvar ENVIRONMENT_IS_SHELL = false;\nENVIRONMENT_IS_WEB = typeof window === 'object';\nENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\n// N.b. Electron.js environment is simultaneously a NODE-environment, but\n// also a web environment.\nENVIRONMENT_IS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\nENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER;\n\nif (Module['ENVIRONMENT']) {\n  throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)');\n}\n\n// `/` should be present at the end if `scriptDirectory` is not empty\nvar scriptDirectory = '';\nfunction locateFile(path) {\n  if (Module['locateFile']) {\n    return Module['locateFile'](path, scriptDirectory);\n  }\n  return scriptDirectory + path;\n}\n\n// Hooks that are implemented differently in different runtime environments.\nvar read_,\n    readAsync,\n    readBinary,\n    setWindowTitle;\n\nvar nodeFS;\nvar nodePath;\n\nif (ENVIRONMENT_IS_NODE) {\n  if (ENVIRONMENT_IS_WORKER) {\n    scriptDirectory = require('path').dirname(scriptDirectory) + '/';\n  } else {\n    scriptDirectory = __dirname + '/';\n  }\n\n// include: node_shell_read.js\n\n\nread_ = function shell_read(filename, binary) {\n  if (!nodeFS) nodeFS = require('fs');\n  if (!nodePath) nodePath = require('path');\n  filename = nodePath['normalize'](filename);\n  return nodeFS['readFileSync'](filename, binary ? null : 'utf8');\n};\n\nreadBinary = function readBinary(filename) {\n  var ret = read_(filename, true);\n  if (!ret.buffer) {\n    ret = new Uint8Array(ret);\n  }\n  assert(ret.buffer);\n  return ret;\n};\n\n// end include: node_shell_read.js\n  if (process['argv'].length > 1) {\n    thisProgram = process['argv'][1].replace(/\\\\/g, '/');\n  }\n\n  arguments_ = process['argv'].slice(2);\n\n  if (typeof module !== 'undefined') {\n    module['exports'] = Module;\n  }\n\n  process['on']('uncaughtException', function(ex) {\n    // suppress ExitStatus exceptions from showing an error\n    if (!(ex instanceof ExitStatus)) {\n      throw ex;\n    }\n  });\n\n  process['on']('unhandledRejection', abort);\n\n  quit_ = function(status) {\n    process['exit'](status);\n  };\n\n  Module['inspect'] = function () { return '[Emscripten Module object]'; };\n\n} else\nif (ENVIRONMENT_IS_SHELL) {\n\n  if (typeof read != 'undefined') {\n    read_ = function shell_read(f) {\n      return read(f);\n    };\n  }\n\n  readBinary = function readBinary(f) {\n    var data;\n    if (typeof readbuffer === 'function') {\n      return new Uint8Array(readbuffer(f));\n    }\n    data = read(f, 'binary');\n    assert(typeof data === 'object');\n    return data;\n  };\n\n  if (typeof scriptArgs != 'undefined') {\n    arguments_ = scriptArgs;\n  } else if (typeof arguments != 'undefined') {\n    arguments_ = arguments;\n  }\n\n  if (typeof quit === 'function') {\n    quit_ = function(status) {\n      quit(status);\n    };\n  }\n\n  if (typeof print !== 'undefined') {\n    // Prefer to use print/printErr where they exist, as they usually work better.\n    if (typeof console === 'undefined') console = /** @type{!Console} */({});\n    console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);\n    console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr !== 'undefined' ? printErr : print);\n  }\n\n} else\n\n// Note that this includes Node.js workers when relevant (pthreads is enabled).\n// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and\n// ENVIRONMENT_IS_NODE.\nif (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {\n  if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled\n    scriptDirectory = self.location.href;\n  } else if (typeof document !== 'undefined' && document.currentScript) { // web\n    scriptDirectory = document.currentScript.src;\n  }\n  // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.\n  // otherwise, slice off the final part of the url to find the script directory.\n  // if scriptDirectory does not contain a slash, lastIndexOf will return -1,\n  // and scriptDirectory will correctly be replaced with an empty string.\n  if (scriptDirectory.indexOf('blob:') !== 0) {\n    scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1);\n  } else {\n    scriptDirectory = '';\n  }\n\n  // Differentiate the Web Worker from the Node Worker case, as reading must\n  // be done differently.\n  {\n\n// include: web_or_worker_shell_read.js\n\n\n  read_ = function(url) {\n      var xhr = new XMLHttpRequest();\n      xhr.open('GET', url, false);\n      xhr.send(null);\n      return xhr.responseText;\n  };\n\n  if (ENVIRONMENT_IS_WORKER) {\n    readBinary = function(url) {\n        var xhr = new XMLHttpRequest();\n        xhr.open('GET', url, false);\n        xhr.responseType = 'arraybuffer';\n        xhr.send(null);\n        return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response));\n    };\n  }\n\n  readAsync = function(url, onload, onerror) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.responseType = 'arraybuffer';\n    xhr.onload = function() {\n      if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0\n        onload(xhr.response);\n        return;\n      }\n      onerror();\n    };\n    xhr.onerror = onerror;\n    xhr.send(null);\n  };\n\n// end include: web_or_worker_shell_read.js\n  }\n\n  setWindowTitle = function(title) { document.title = title };\n} else\n{\n  throw new Error('environment detection error');\n}\n\n// Set up the out() and err() hooks, which are how we can print to stdout or\n// stderr, respectively.\nvar out = Module['print'] || console.log.bind(console);\nvar err = Module['printErr'] || console.warn.bind(console);\n\n// Merge back in the overrides\nfor (key in moduleOverrides) {\n  if (moduleOverrides.hasOwnProperty(key)) {\n    Module[key] = moduleOverrides[key];\n  }\n}\n// Free the object hierarchy contained in the overrides, this lets the GC\n// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.\nmoduleOverrides = null;\n\n// Emit code to handle expected values on the Module object. This applies Module.x\n// to the proper local x. This has two benefits: first, we only emit it if it is\n// expected to arrive, and second, by using a local everywhere else that can be\n// minified.\n\nif (Module['arguments']) arguments_ = Module['arguments'];\nif (!Object.getOwnPropertyDescriptor(Module, 'arguments')) {\n  Object.defineProperty(Module, 'arguments', {\n    configurable: true,\n    get: function() {\n      abort('Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\n\nif (Module['thisProgram']) thisProgram = Module['thisProgram'];\nif (!Object.getOwnPropertyDescriptor(Module, 'thisProgram')) {\n  Object.defineProperty(Module, 'thisProgram', {\n    configurable: true,\n    get: function() {\n      abort('Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\n\nif (Module['quit']) quit_ = Module['quit'];\nif (!Object.getOwnPropertyDescriptor(Module, 'quit')) {\n  Object.defineProperty(Module, 'quit', {\n    configurable: true,\n    get: function() {\n      abort('Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\n\n// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message\n// Assertions on removed incoming Module JS APIs.\nassert(typeof Module['memoryInitializerPrefixURL'] === 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');\nassert(typeof Module['pthreadMainPrefixURL'] === 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');\nassert(typeof Module['cdInitializerPrefixURL'] === 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');\nassert(typeof Module['filePackagePrefixURL'] === 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead');\nassert(typeof Module['read'] === 'undefined', 'Module.read option was removed (modify read_ in JS)');\nassert(typeof Module['readAsync'] === 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)');\nassert(typeof Module['readBinary'] === 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)');\nassert(typeof Module['setWindowTitle'] === 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)');\nassert(typeof Module['TOTAL_MEMORY'] === 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');\n\nif (!Object.getOwnPropertyDescriptor(Module, 'read')) {\n  Object.defineProperty(Module, 'read', {\n    configurable: true,\n    get: function() {\n      abort('Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\n\nif (!Object.getOwnPropertyDescriptor(Module, 'readAsync')) {\n  Object.defineProperty(Module, 'readAsync', {\n    configurable: true,\n    get: function() {\n      abort('Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\n\nif (!Object.getOwnPropertyDescriptor(Module, 'readBinary')) {\n  Object.defineProperty(Module, 'readBinary', {\n    configurable: true,\n    get: function() {\n      abort('Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\n\nif (!Object.getOwnPropertyDescriptor(Module, 'setWindowTitle')) {\n  Object.defineProperty(Module, 'setWindowTitle', {\n    configurable: true,\n    get: function() {\n      abort('Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\nvar IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js';\nvar PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js';\nvar WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js';\nvar NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js';\n\n\n\n\nvar STACK_ALIGN = 16;\n\nfunction alignMemory(size, factor) {\n  if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default\n  return Math.ceil(size / factor) * factor;\n}\n\nfunction getNativeTypeSize(type) {\n  switch (type) {\n    case 'i1': case 'i8': return 1;\n    case 'i16': return 2;\n    case 'i32': return 4;\n    case 'i64': return 8;\n    case 'float': return 4;\n    case 'double': return 8;\n    default: {\n      if (type[type.length-1] === '*') {\n        return 4; // A pointer\n      } else if (type[0] === 'i') {\n        var bits = Number(type.substr(1));\n        assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type);\n        return bits / 8;\n      } else {\n        return 0;\n      }\n    }\n  }\n}\n\nfunction warnOnce(text) {\n  if (!warnOnce.shown) warnOnce.shown = {};\n  if (!warnOnce.shown[text]) {\n    warnOnce.shown[text] = 1;\n    err(text);\n  }\n}\n\n// include: runtime_functions.js\n\n\n// Wraps a JS function as a wasm function with a given signature.\nfunction convertJsFunctionToWasm(func, sig) {\n\n  // If the type reflection proposal is available, use the new\n  // \"WebAssembly.Function\" constructor.\n  // Otherwise, construct a minimal wasm module importing the JS function and\n  // re-exporting it.\n  if (typeof WebAssembly.Function === \"function\") {\n    var typeNames = {\n      'i': 'i32',\n      'j': 'i64',\n      'f': 'f32',\n      'd': 'f64'\n    };\n    var type = {\n      parameters: [],\n      results: sig[0] == 'v' ? [] : [typeNames[sig[0]]]\n    };\n    for (var i = 1; i < sig.length; ++i) {\n      type.parameters.push(typeNames[sig[i]]);\n    }\n    return new WebAssembly.Function(type, func);\n  }\n\n  // The module is static, with the exception of the type section, which is\n  // generated based on the signature passed in.\n  var typeSection = [\n    0x01, // id: section,\n    0x00, // length: 0 (placeholder)\n    0x01, // count: 1\n    0x60, // form: func\n  ];\n  var sigRet = sig.slice(0, 1);\n  var sigParam = sig.slice(1);\n  var typeCodes = {\n    'i': 0x7f, // i32\n    'j': 0x7e, // i64\n    'f': 0x7d, // f32\n    'd': 0x7c, // f64\n  };\n\n  // Parameters, length + signatures\n  typeSection.push(sigParam.length);\n  for (var i = 0; i < sigParam.length; ++i) {\n    typeSection.push(typeCodes[sigParam[i]]);\n  }\n\n  // Return values, length + signatures\n  // With no multi-return in MVP, either 0 (void) or 1 (anything else)\n  if (sigRet == 'v') {\n    typeSection.push(0x00);\n  } else {\n    typeSection = typeSection.concat([0x01, typeCodes[sigRet]]);\n  }\n\n  // Write the overall length of the type section back into the section header\n  // (excepting the 2 bytes for the section id and length)\n  typeSection[1] = typeSection.length - 2;\n\n  // Rest of the module is static\n  var bytes = new Uint8Array([\n    0x00, 0x61, 0x73, 0x6d, // magic (\"\\0asm\")\n    0x01, 0x00, 0x00, 0x00, // version: 1\n  ].concat(typeSection, [\n    0x02, 0x07, // import section\n      // (import \"e\" \"f\" (func 0 (type 0)))\n      0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,\n    0x07, 0x05, // export section\n      // (export \"f\" (func 0 (type 0)))\n      0x01, 0x01, 0x66, 0x00, 0x00,\n  ]));\n\n   // We can compile this wasm module synchronously because it is very small.\n  // This accepts an import (at \"e.f\"), that it reroutes to an export (at \"f\")\n  var module = new WebAssembly.Module(bytes);\n  var instance = new WebAssembly.Instance(module, {\n    'e': {\n      'f': func\n    }\n  });\n  var wrappedFunc = instance.exports['f'];\n  return wrappedFunc;\n}\n\nvar freeTableIndexes = [];\n\n// Weak map of functions in the table to their indexes, created on first use.\nvar functionsInTableMap;\n\nfunction getEmptyTableSlot() {\n  // Reuse a free index if there is one, otherwise grow.\n  if (freeTableIndexes.length) {\n    return freeTableIndexes.pop();\n  }\n  // Grow the table\n  try {\n    wasmTable.grow(1);\n  } catch (err) {\n    if (!(err instanceof RangeError)) {\n      throw err;\n    }\n    throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.';\n  }\n  return wasmTable.length - 1;\n}\n\n// Add a wasm function to the table.\nfunction addFunctionWasm(func, sig) {\n  // Check if the function is already in the table, to ensure each function\n  // gets a unique index. First, create the map if this is the first use.\n  if (!functionsInTableMap) {\n    functionsInTableMap = new WeakMap();\n    for (var i = 0; i < wasmTable.length; i++) {\n      var item = wasmTable.get(i);\n      // Ignore null values.\n      if (item) {\n        functionsInTableMap.set(item, i);\n      }\n    }\n  }\n  if (functionsInTableMap.has(func)) {\n    return functionsInTableMap.get(func);\n  }\n\n  // It's not in the table, add it now.\n\n  var ret = getEmptyTableSlot();\n\n  // Set the new value.\n  try {\n    // Attempting to call this with JS function will cause of table.set() to fail\n    wasmTable.set(ret, func);\n  } catch (err) {\n    if (!(err instanceof TypeError)) {\n      throw err;\n    }\n    assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction: ' + func);\n    var wrapped = convertJsFunctionToWasm(func, sig);\n    wasmTable.set(ret, wrapped);\n  }\n\n  functionsInTableMap.set(func, ret);\n\n  return ret;\n}\n\nfunction removeFunction(index) {\n  functionsInTableMap.delete(wasmTable.get(index));\n  freeTableIndexes.push(index);\n}\n\n// 'sig' parameter is required for the llvm backend but only when func is not\n// already a WebAssembly function.\nfunction addFunction(func, sig) {\n  assert(typeof func !== 'undefined');\n\n  return addFunctionWasm(func, sig);\n}\n\n// end include: runtime_functions.js\n// include: runtime_debug.js\n\n\n// end include: runtime_debug.js\nvar tempRet0 = 0;\n\nvar setTempRet0 = function(value) {\n  tempRet0 = value;\n};\n\nvar getTempRet0 = function() {\n  return tempRet0;\n};\n\n\n\n// === Preamble library stuff ===\n\n// Documentation for the public APIs defined in this file must be updated in:\n//    site/source/docs/api_reference/preamble.js.rst\n// A prebuilt local version of the documentation is available at:\n//    site/build/text/docs/api_reference/preamble.js.txt\n// You can also build docs locally as HTML or other formats in site/\n// An online HTML version (which may be of a different version of Emscripten)\n//    is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html\n\nvar wasmBinary;\nif (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];\nif (!Object.getOwnPropertyDescriptor(Module, 'wasmBinary')) {\n  Object.defineProperty(Module, 'wasmBinary', {\n    configurable: true,\n    get: function() {\n      abort('Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\nvar noExitRuntime = Module['noExitRuntime'] || true;\nif (!Object.getOwnPropertyDescriptor(Module, 'noExitRuntime')) {\n  Object.defineProperty(Module, 'noExitRuntime', {\n    configurable: true,\n    get: function() {\n      abort('Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\n\nif (typeof WebAssembly !== 'object') {\n  abort('no native wasm support detected');\n}\n\n// include: runtime_safe_heap.js\n\n\n// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking.\n// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties)\n\n/** @param {number} ptr\n    @param {number} value\n    @param {string} type\n    @param {number|boolean=} noSafe */\nfunction setValue(ptr, value, type, noSafe) {\n  type = type || 'i8';\n  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\n    switch (type) {\n      case 'i1': HEAP8[((ptr)>>0)] = value; break;\n      case 'i8': HEAP8[((ptr)>>0)] = value; break;\n      case 'i16': HEAP16[((ptr)>>1)] = value; break;\n      case 'i32': HEAP32[((ptr)>>2)] = value; break;\n      case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)] = tempI64[0],HEAP32[(((ptr)+(4))>>2)] = tempI64[1]); break;\n      case 'float': HEAPF32[((ptr)>>2)] = value; break;\n      case 'double': HEAPF64[((ptr)>>3)] = value; break;\n      default: abort('invalid type for setValue: ' + type);\n    }\n}\n\n/** @param {number} ptr\n    @param {string} type\n    @param {number|boolean=} noSafe */\nfunction getValue(ptr, type, noSafe) {\n  type = type || 'i8';\n  if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit\n    switch (type) {\n      case 'i1': return HEAP8[((ptr)>>0)];\n      case 'i8': return HEAP8[((ptr)>>0)];\n      case 'i16': return HEAP16[((ptr)>>1)];\n      case 'i32': return HEAP32[((ptr)>>2)];\n      case 'i64': return HEAP32[((ptr)>>2)];\n      case 'float': return HEAPF32[((ptr)>>2)];\n      case 'double': return HEAPF64[((ptr)>>3)];\n      default: abort('invalid type for getValue: ' + type);\n    }\n  return null;\n}\n\n// end include: runtime_safe_heap.js\n// Wasm globals\n\nvar wasmMemory;\n\n//========================================\n// Runtime essentials\n//========================================\n\n// whether we are quitting the application. no code should run after this.\n// set in exit() and abort()\nvar ABORT = false;\n\n// set by exit() and abort().  Passed to 'onExit' handler.\n// NOTE: This is also used as the process return code code in shell environments\n// but only when noExitRuntime is false.\nvar EXITSTATUS;\n\n/** @type {function(*, string=)} */\nfunction assert(condition, text) {\n  if (!condition) {\n    abort('Assertion failed: ' + text);\n  }\n}\n\n// Returns the C function with a specified identifier (for C++, you need to do manual name mangling)\nfunction getCFunc(ident) {\n  var func = Module['_' + ident]; // closure exported function\n  assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');\n  return func;\n}\n\n// C calling interface.\n/** @param {string|null=} returnType\n    @param {Array=} argTypes\n    @param {Arguments|Array=} args\n    @param {Object=} opts */\nfunction ccall(ident, returnType, argTypes, args, opts) {\n  // For fast lookup of conversion functions\n  var toC = {\n    'string': function(str) {\n      var ret = 0;\n      if (str !== null && str !== undefined && str !== 0) { // null string\n        // at most 4 bytes per UTF-8 code point, +1 for the trailing '\\0'\n        var len = (str.length << 2) + 1;\n        ret = stackAlloc(len);\n        stringToUTF8(str, ret, len);\n      }\n      return ret;\n    },\n    'array': function(arr) {\n      var ret = stackAlloc(arr.length);\n      writeArrayToMemory(arr, ret);\n      return ret;\n    }\n  };\n\n  function convertReturnValue(ret) {\n    if (returnType === 'string') return UTF8ToString(ret);\n    if (returnType === 'boolean') return Boolean(ret);\n    return ret;\n  }\n\n  var func = getCFunc(ident);\n  var cArgs = [];\n  var stack = 0;\n  assert(returnType !== 'array', 'Return type should not be \"array\".');\n  if (args) {\n    for (var i = 0; i < args.length; i++) {\n      var converter = toC[argTypes[i]];\n      if (converter) {\n        if (stack === 0) stack = stackSave();\n        cArgs[i] = converter(args[i]);\n      } else {\n        cArgs[i] = args[i];\n      }\n    }\n  }\n  var ret = func.apply(null, cArgs);\n\n  ret = convertReturnValue(ret);\n  if (stack !== 0) stackRestore(stack);\n  return ret;\n}\n\n/** @param {string=} returnType\n    @param {Array=} argTypes\n    @param {Object=} opts */\nfunction cwrap(ident, returnType, argTypes, opts) {\n  return function() {\n    return ccall(ident, returnType, argTypes, arguments, opts);\n  }\n}\n\n// We used to include malloc/free by default in the past. Show a helpful error in\n// builds with assertions.\n\nvar ALLOC_NORMAL = 0; // Tries to use _malloc()\nvar ALLOC_STACK = 1; // Lives for the duration of the current function call\n\n// allocate(): This is for internal use. You can use it yourself as well, but the interface\n//             is a little tricky (see docs right below). The reason is that it is optimized\n//             for multiple syntaxes to save space in generated code. So you should\n//             normally not use allocate(), and instead allocate memory using _malloc(),\n//             initialize it with setValue(), and so forth.\n// @slab: An array of data.\n// @allocator: How to allocate memory, see ALLOC_*\n/** @type {function((Uint8Array|Array<number>), number)} */\nfunction allocate(slab, allocator) {\n  var ret;\n  assert(typeof allocator === 'number', 'allocate no longer takes a type argument')\n  assert(typeof slab !== 'number', 'allocate no longer takes a number as arg0')\n\n  if (allocator == ALLOC_STACK) {\n    ret = stackAlloc(slab.length);\n  } else {\n    ret = _malloc(slab.length);\n  }\n\n  if (slab.subarray || slab.slice) {\n    HEAPU8.set(/** @type {!Uint8Array} */(slab), ret);\n  } else {\n    HEAPU8.set(new Uint8Array(slab), ret);\n  }\n  return ret;\n}\n\n// include: runtime_strings.js\n\n\n// runtime_strings.js: Strings related runtime functions that are part of both MINIMAL_RUNTIME and regular runtime.\n\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns\n// a copy of that string as a Javascript String object.\n\nvar UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;\n\n/**\n * @param {number} idx\n * @param {number=} maxBytesToRead\n * @return {string}\n */\nfunction UTF8ArrayToString(heap, idx, maxBytesToRead) {\n  var endIdx = idx + maxBytesToRead;\n  var endPtr = idx;\n  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\n  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\n  // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity)\n  while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr;\n\n  if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) {\n    return UTF8Decoder.decode(heap.subarray(idx, endPtr));\n  } else {\n    var str = '';\n    // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that\n    while (idx < endPtr) {\n      // For UTF8 byte structure, see:\n      // http://en.wikipedia.org/wiki/UTF-8#Description\n      // https://www.ietf.org/rfc/rfc2279.txt\n      // https://tools.ietf.org/html/rfc3629\n      var u0 = heap[idx++];\n      if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }\n      var u1 = heap[idx++] & 63;\n      if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }\n      var u2 = heap[idx++] & 63;\n      if ((u0 & 0xF0) == 0xE0) {\n        u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;\n      } else {\n        if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte 0x' + u0.toString(16) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!');\n        u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heap[idx++] & 63);\n      }\n\n      if (u0 < 0x10000) {\n        str += String.fromCharCode(u0);\n      } else {\n        var ch = u0 - 0x10000;\n        str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\n      }\n    }\n  }\n  return str;\n}\n\n// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a\n// copy of that string as a Javascript String object.\n// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit\n//                 this parameter to scan the string until the first \\0 byte. If maxBytesToRead is\n//                 passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the\n//                 middle, then the string will cut short at that byte index (i.e. maxBytesToRead will\n//                 not produce a string of exact length [ptr, ptr+maxBytesToRead[)\n//                 N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may\n//                 throw JS JIT optimizations off, so it is worth to consider consistently using one\n//                 style or the other.\n/**\n * @param {number} ptr\n * @param {number=} maxBytesToRead\n * @return {string}\n */\nfunction UTF8ToString(ptr, maxBytesToRead) {\n  return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';\n}\n\n// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx',\n// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP.\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   heap: the array to copy to. Each index in this array is assumed to be one 8-byte element.\n//   outIdx: The starting offset in the array to begin the copying.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array.\n//                    This count should include the null terminator,\n//                    i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {\n  if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes.\n    return 0;\n\n  var startIdx = outIdx;\n  var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.\n  for (var i = 0; i < str.length; ++i) {\n    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629\n    var u = str.charCodeAt(i); // possibly a lead surrogate\n    if (u >= 0xD800 && u <= 0xDFFF) {\n      var u1 = str.charCodeAt(++i);\n      u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);\n    }\n    if (u <= 0x7F) {\n      if (outIdx >= endIdx) break;\n      heap[outIdx++] = u;\n    } else if (u <= 0x7FF) {\n      if (outIdx + 1 >= endIdx) break;\n      heap[outIdx++] = 0xC0 | (u >> 6);\n      heap[outIdx++] = 0x80 | (u & 63);\n    } else if (u <= 0xFFFF) {\n      if (outIdx + 2 >= endIdx) break;\n      heap[outIdx++] = 0xE0 | (u >> 12);\n      heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n      heap[outIdx++] = 0x80 | (u & 63);\n    } else {\n      if (outIdx + 3 >= endIdx) break;\n      if (u >= 0x200000) warnOnce('Invalid Unicode code point 0x' + u.toString(16) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x1FFFFF).');\n      heap[outIdx++] = 0xF0 | (u >> 18);\n      heap[outIdx++] = 0x80 | ((u >> 12) & 63);\n      heap[outIdx++] = 0x80 | ((u >> 6) & 63);\n      heap[outIdx++] = 0x80 | (u & 63);\n    }\n  }\n  // Null-terminate the pointer to the buffer.\n  heap[outIdx] = 0;\n  return outIdx - startIdx;\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP.\n// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF8(str, outPtr, maxBytesToWrite) {\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte.\nfunction lengthBytesUTF8(str) {\n  var len = 0;\n  for (var i = 0; i < str.length; ++i) {\n    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var u = str.charCodeAt(i); // possibly a lead surrogate\n    if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\n    if (u <= 0x7F) ++len;\n    else if (u <= 0x7FF) len += 2;\n    else if (u <= 0xFFFF) len += 3;\n    else len += 4;\n  }\n  return len;\n}\n\n// end include: runtime_strings.js\n// include: runtime_strings_extra.js\n\n\n// runtime_strings_extra.js: Strings related runtime functions that are available only in regular runtime.\n\n// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns\n// a copy of that string as a Javascript String object.\n\nfunction AsciiToString(ptr) {\n  var str = '';\n  while (1) {\n    var ch = HEAPU8[((ptr++)>>0)];\n    if (!ch) return str;\n    str += String.fromCharCode(ch);\n  }\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP.\n\nfunction stringToAscii(str, outPtr) {\n  return writeAsciiToMemory(str, outPtr, false);\n}\n\n// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns\n// a copy of that string as a Javascript String object.\n\nvar UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined;\n\nfunction UTF16ToString(ptr, maxBytesToRead) {\n  assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!');\n  var endPtr = ptr;\n  // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself.\n  // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage.\n  var idx = endPtr >> 1;\n  var maxIdx = idx + maxBytesToRead / 2;\n  // If maxBytesToRead is not passed explicitly, it will be undefined, and this\n  // will always evaluate to true. This saves on code size.\n  while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx;\n  endPtr = idx << 1;\n\n  if (endPtr - ptr > 32 && UTF16Decoder) {\n    return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr));\n  } else {\n    var str = '';\n\n    // If maxBytesToRead is not passed explicitly, it will be undefined, and the for-loop's condition\n    // will always evaluate to true. The loop is then terminated on the first null char.\n    for (var i = 0; !(i >= maxBytesToRead / 2); ++i) {\n      var codeUnit = HEAP16[(((ptr)+(i*2))>>1)];\n      if (codeUnit == 0) break;\n      // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through.\n      str += String.fromCharCode(codeUnit);\n    }\n\n    return str;\n  }\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP.\n// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   outPtr: Byte address in Emscripten HEAP where to write the string to.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\n//                    terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF16(str, outPtr, maxBytesToWrite) {\n  assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!');\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n  if (maxBytesToWrite === undefined) {\n    maxBytesToWrite = 0x7FFFFFFF;\n  }\n  if (maxBytesToWrite < 2) return 0;\n  maxBytesToWrite -= 2; // Null terminator.\n  var startPtr = outPtr;\n  var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length;\n  for (var i = 0; i < numCharsToWrite; ++i) {\n    // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP.\n    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n    HEAP16[((outPtr)>>1)] = codeUnit;\n    outPtr += 2;\n  }\n  // Null-terminate the pointer to the HEAP.\n  HEAP16[((outPtr)>>1)] = 0;\n  return outPtr - startPtr;\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\n\nfunction lengthBytesUTF16(str) {\n  return str.length*2;\n}\n\nfunction UTF32ToString(ptr, maxBytesToRead) {\n  assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!');\n  var i = 0;\n\n  var str = '';\n  // If maxBytesToRead is not passed explicitly, it will be undefined, and this\n  // will always evaluate to true. This saves on code size.\n  while (!(i >= maxBytesToRead / 4)) {\n    var utf32 = HEAP32[(((ptr)+(i*4))>>2)];\n    if (utf32 == 0) break;\n    ++i;\n    // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    if (utf32 >= 0x10000) {\n      var ch = utf32 - 0x10000;\n      str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));\n    } else {\n      str += String.fromCharCode(utf32);\n    }\n  }\n  return str;\n}\n\n// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr',\n// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP.\n// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write.\n// Parameters:\n//   str: the Javascript string to copy.\n//   outPtr: Byte address in Emscripten HEAP where to write the string to.\n//   maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null\n//                    terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else.\n//                    maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator.\n// Returns the number of bytes written, EXCLUDING the null terminator.\n\nfunction stringToUTF32(str, outPtr, maxBytesToWrite) {\n  assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!');\n  assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');\n  // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed.\n  if (maxBytesToWrite === undefined) {\n    maxBytesToWrite = 0x7FFFFFFF;\n  }\n  if (maxBytesToWrite < 4) return 0;\n  var startPtr = outPtr;\n  var endPtr = startPtr + maxBytesToWrite - 4;\n  for (var i = 0; i < str.length; ++i) {\n    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var codeUnit = str.charCodeAt(i); // possibly a lead surrogate\n    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) {\n      var trailSurrogate = str.charCodeAt(++i);\n      codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF);\n    }\n    HEAP32[((outPtr)>>2)] = codeUnit;\n    outPtr += 4;\n    if (outPtr + 4 > endPtr) break;\n  }\n  // Null-terminate the pointer to the HEAP.\n  HEAP32[((outPtr)>>2)] = 0;\n  return outPtr - startPtr;\n}\n\n// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte.\n\nfunction lengthBytesUTF32(str) {\n  var len = 0;\n  for (var i = 0; i < str.length; ++i) {\n    // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap.\n    // See http://unicode.org/faq/utf_bom.html#utf16-3\n    var codeUnit = str.charCodeAt(i);\n    if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate.\n    len += 4;\n  }\n\n  return len;\n}\n\n// Allocate heap space for a JS string, and write it there.\n// It is the responsibility of the caller to free() that memory.\nfunction allocateUTF8(str) {\n  var size = lengthBytesUTF8(str) + 1;\n  var ret = _malloc(size);\n  if (ret) stringToUTF8Array(str, HEAP8, ret, size);\n  return ret;\n}\n\n// Allocate stack space for a JS string, and write it there.\nfunction allocateUTF8OnStack(str) {\n  var size = lengthBytesUTF8(str) + 1;\n  var ret = stackAlloc(size);\n  stringToUTF8Array(str, HEAP8, ret, size);\n  return ret;\n}\n\n// Deprecated: This function should not be called because it is unsafe and does not provide\n// a maximum length limit of how many bytes it is allowed to write. Prefer calling the\n// function stringToUTF8Array() instead, which takes in a maximum length that can be used\n// to be secure from out of bounds writes.\n/** @deprecated\n    @param {boolean=} dontAddNull */\nfunction writeStringToMemory(string, buffer, dontAddNull) {\n  warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!');\n\n  var /** @type {number} */ lastChar, /** @type {number} */ end;\n  if (dontAddNull) {\n    // stringToUTF8Array always appends null. If we don't want to do that, remember the\n    // character that existed at the location where the null will be placed, and restore\n    // that after the write (below).\n    end = buffer + lengthBytesUTF8(string);\n    lastChar = HEAP8[end];\n  }\n  stringToUTF8(string, buffer, Infinity);\n  if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character.\n}\n\nfunction writeArrayToMemory(array, buffer) {\n  assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)')\n  HEAP8.set(array, buffer);\n}\n\n/** @param {boolean=} dontAddNull */\nfunction writeAsciiToMemory(str, buffer, dontAddNull) {\n  for (var i = 0; i < str.length; ++i) {\n    assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff);\n    HEAP8[((buffer++)>>0)] = str.charCodeAt(i);\n  }\n  // Null-terminate the pointer to the HEAP.\n  if (!dontAddNull) HEAP8[((buffer)>>0)] = 0;\n}\n\n// end include: runtime_strings_extra.js\n// Memory management\n\nfunction alignUp(x, multiple) {\n  if (x % multiple > 0) {\n    x += multiple - (x % multiple);\n  }\n  return x;\n}\n\nvar HEAP,\n/** @type {ArrayBuffer} */\n  buffer,\n/** @type {Int8Array} */\n  HEAP8,\n/** @type {Uint8Array} */\n  HEAPU8,\n/** @type {Int16Array} */\n  HEAP16,\n/** @type {Uint16Array} */\n  HEAPU16,\n/** @type {Int32Array} */\n  HEAP32,\n/** @type {Uint32Array} */\n  HEAPU32,\n/** @type {Float32Array} */\n  HEAPF32,\n/** @type {Float64Array} */\n  HEAPF64;\n\nfunction updateGlobalBufferAndViews(buf) {\n  buffer = buf;\n  Module['HEAP8'] = HEAP8 = new Int8Array(buf);\n  Module['HEAP16'] = HEAP16 = new Int16Array(buf);\n  Module['HEAP32'] = HEAP32 = new Int32Array(buf);\n  Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf);\n  Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf);\n  Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf);\n  Module['HEAPF32'] = HEAPF32 = new Float32Array(buf);\n  Module['HEAPF64'] = HEAPF64 = new Float64Array(buf);\n}\n\nvar TOTAL_STACK = 5242880;\nif (Module['TOTAL_STACK']) assert(TOTAL_STACK === Module['TOTAL_STACK'], 'the stack size can no longer be determined at runtime')\n\nvar INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216;\nif (!Object.getOwnPropertyDescriptor(Module, 'INITIAL_MEMORY')) {\n  Object.defineProperty(Module, 'INITIAL_MEMORY', {\n    configurable: true,\n    get: function() {\n      abort('Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)')\n    }\n  });\n}\n\nassert(INITIAL_MEMORY >= TOTAL_STACK, 'INITIAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')');\n\n// check for full engine support (use string 'subarray' to avoid closure compiler confusion)\nassert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined,\n       'JS engine does not provide full typed array support');\n\n// If memory is defined in wasm, the user can't provide it.\nassert(!Module['wasmMemory'], 'Use of `wasmMemory` detected.  Use -s IMPORTED_MEMORY to define wasmMemory externally');\nassert(INITIAL_MEMORY == 16777216, 'Detected runtime INITIAL_MEMORY setting.  Use -s IMPORTED_MEMORY to define wasmMemory dynamically');\n\n// include: runtime_init_table.js\n// In regular non-RELOCATABLE mode the table is exported\n// from the wasm module and this will be assigned once\n// the exports are available.\nvar wasmTable;\n\n// end include: runtime_init_table.js\n// include: runtime_stack_check.js\n\n\n// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.\nfunction writeStackCookie() {\n  var max = _emscripten_stack_get_end();\n  assert((max & 3) == 0);\n  // The stack grows downwards\n  HEAPU32[(max >> 2)+1] = 0x2135467;\n  HEAPU32[(max >> 2)+2] = 0x89BACDFE;\n  // Also test the global address 0 for integrity.\n  HEAP32[0] = 0x63736d65; /* 'emsc' */\n}\n\nfunction checkStackCookie() {\n  if (ABORT) return;\n  var max = _emscripten_stack_get_end();\n  var cookie1 = HEAPU32[(max >> 2)+1];\n  var cookie2 = HEAPU32[(max >> 2)+2];\n  if (cookie1 != 0x2135467 || cookie2 != 0x89BACDFE) {\n    abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x' + cookie2.toString(16) + ' ' + cookie1.toString(16));\n  }\n  // Also test the global address 0 for integrity.\n  if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) abort('Runtime error: The application has corrupted its heap memory area (address zero)!');\n}\n\n// end include: runtime_stack_check.js\n// include: runtime_assertions.js\n\n\n// Endianness check\n(function() {\n  var h16 = new Int16Array(1);\n  var h8 = new Int8Array(h16.buffer);\n  h16[0] = 0x6373;\n  if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -s SUPPORT_BIG_ENDIAN=1 to bypass)';\n})();\n\n// end include: runtime_assertions.js\nvar __ATPRERUN__  = []; // functions called before the runtime is initialized\nvar __ATINIT__    = []; // functions called during startup\nvar __ATMAIN__    = []; // functions called when main() is to be run\nvar __ATEXIT__    = []; // functions called during shutdown\nvar __ATPOSTRUN__ = []; // functions called after the main() is called\n\nvar runtimeInitialized = false;\nvar runtimeExited = false;\n\nfunction preRun() {\n\n  if (Module['preRun']) {\n    if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];\n    while (Module['preRun'].length) {\n      addOnPreRun(Module['preRun'].shift());\n    }\n  }\n\n  callRuntimeCallbacks(__ATPRERUN__);\n}\n\nfunction initRuntime() {\n  checkStackCookie();\n  assert(!runtimeInitialized);\n  runtimeInitialized = true;\n\n  if (!Module[\"noFSInit\"] && !FS.init.initialized) FS.init();\nTTY.init();\n  callRuntimeCallbacks(__ATINIT__);\n}\n\nfunction preMain() {\n  checkStackCookie();\n  FS.ignorePermissions = false;\n  callRuntimeCallbacks(__ATMAIN__);\n}\n\nfunction exitRuntime() {\n  checkStackCookie();\n  runtimeExited = true;\n}\n\nfunction postRun() {\n  checkStackCookie();\n\n  if (Module['postRun']) {\n    if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];\n    while (Module['postRun'].length) {\n      addOnPostRun(Module['postRun'].shift());\n    }\n  }\n\n  callRuntimeCallbacks(__ATPOSTRUN__);\n}\n\nfunction addOnPreRun(cb) {\n  __ATPRERUN__.unshift(cb);\n}\n\nfunction addOnInit(cb) {\n  __ATINIT__.unshift(cb);\n}\n\nfunction addOnPreMain(cb) {\n  __ATMAIN__.unshift(cb);\n}\n\nfunction addOnExit(cb) {\n}\n\nfunction addOnPostRun(cb) {\n  __ATPOSTRUN__.unshift(cb);\n}\n\n// include: runtime_math.js\n\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc\n\nassert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');\nassert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');\nassert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');\nassert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');\n\n// end include: runtime_math.js\n// A counter of dependencies for calling run(). If we need to\n// do asynchronous work before running, increment this and\n// decrement it. Incrementing must happen in a place like\n// Module.preRun (used by emcc to add file preloading).\n// Note that you can add dependencies in preRun, even though\n// it happens right before run - run will be postponed until\n// the dependencies are met.\nvar runDependencies = 0;\nvar runDependencyWatcher = null;\nvar dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled\nvar runDependencyTracking = {};\n\nfunction getUniqueRunDependency(id) {\n  var orig = id;\n  while (1) {\n    if (!runDependencyTracking[id]) return id;\n    id = orig + Math.random();\n  }\n}\n\nfunction addRunDependency(id) {\n  runDependencies++;\n\n  if (Module['monitorRunDependencies']) {\n    Module['monitorRunDependencies'](runDependencies);\n  }\n\n  if (id) {\n    assert(!runDependencyTracking[id]);\n    runDependencyTracking[id] = 1;\n    if (runDependencyWatcher === null && typeof setInterval !== 'undefined') {\n      // Check for missing dependencies every few seconds\n      runDependencyWatcher = setInterval(function() {\n        if (ABORT) {\n          clearInterval(runDependencyWatcher);\n          runDependencyWatcher = null;\n          return;\n        }\n        var shown = false;\n        for (var dep in runDependencyTracking) {\n          if (!shown) {\n            shown = true;\n            err('still waiting on run dependencies:');\n          }\n          err('dependency: ' + dep);\n        }\n        if (shown) {\n          err('(end of list)');\n        }\n      }, 10000);\n    }\n  } else {\n    err('warning: run dependency added without ID');\n  }\n}\n\nfunction removeRunDependency(id) {\n  runDependencies--;\n\n  if (Module['monitorRunDependencies']) {\n    Module['monitorRunDependencies'](runDependencies);\n  }\n\n  if (id) {\n    assert(runDependencyTracking[id]);\n    delete runDependencyTracking[id];\n  } else {\n    err('warning: run dependency removed without ID');\n  }\n  if (runDependencies == 0) {\n    if (runDependencyWatcher !== null) {\n      clearInterval(runDependencyWatcher);\n      runDependencyWatcher = null;\n    }\n    if (dependenciesFulfilled) {\n      var callback = dependenciesFulfilled;\n      dependenciesFulfilled = null;\n      callback(); // can add another dependenciesFulfilled\n    }\n  }\n}\n\nModule[\"preloadedImages\"] = {}; // maps url to image data\nModule[\"preloadedAudios\"] = {}; // maps url to audio data\n\n/** @param {string|number=} what */\nfunction abort(what) {\n  if (Module['onAbort']) {\n    Module['onAbort'](what);\n  }\n\n  what += '';\n  err(what);\n\n  ABORT = true;\n  EXITSTATUS = 1;\n\n  var output = 'abort(' + what + ') at ' + stackTrace();\n  what = output;\n\n  // Use a wasm runtime error, because a JS error might be seen as a foreign\n  // exception, which means we'd run destructors on it. We need the error to\n  // simply make the program stop.\n  var e = new WebAssembly.RuntimeError(what);\n\n  // Throw the error whether or not MODULARIZE is set because abort is used\n  // in code paths apart from instantiation where an exception is expected\n  // to be thrown when abort is called.\n  throw e;\n}\n\n// {{MEM_INITIALIZER}}\n\n// include: memoryprofiler.js\n\n\n// end include: memoryprofiler.js\n// include: URIUtils.js\n\n\n// Prefix of data URIs emitted by SINGLE_FILE and related options.\nvar dataURIPrefix = 'data:application/octet-stream;base64,';\n\n// Indicates whether filename is a base64 data URI.\nfunction isDataURI(filename) {\n  // Prefix of data URIs emitted by SINGLE_FILE and related options.\n  return filename.startsWith(dataURIPrefix);\n}\n\n// Indicates whether filename is delivered via file protocol (as opposed to http/https)\nfunction isFileURI(filename) {\n  return filename.startsWith('file://');\n}\n\n// end include: URIUtils.js\nfunction createExportWrapper(name, fixedasm) {\n  return function() {\n    var displayName = name;\n    var asm = fixedasm;\n    if (!fixedasm) {\n      asm = Module['asm'];\n    }\n    assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization');\n    assert(!runtimeExited, 'native function `' + displayName + '` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)');\n    if (!asm[name]) {\n      assert(asm[name], 'exported native function `' + displayName + '` not found');\n    }\n    return asm[name].apply(null, arguments);\n  };\n}\n\nvar wasmBinaryFile = 'LavaVu.wasm';\nif (!isDataURI(wasmBinaryFile)) {\n  wasmBinaryFile = locateFile(wasmBinaryFile);\n}\n\nfunction getBinary(file) {\n  try {\n    if (file == wasmBinaryFile && wasmBinary) {\n      return new Uint8Array(wasmBinary);\n    }\n    if (readBinary) {\n      return readBinary(file);\n    } else {\n      throw \"both async and sync fetching of the wasm failed\";\n    }\n  }\n  catch (err) {\n    abort(err);\n  }\n}\n\nfunction getBinaryPromise() {\n  // If we don't have the binary yet, try to to load it asynchronously.\n  // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url.\n  // See https://github.com/github/fetch/pull/92#issuecomment-140665932\n  // Cordova or Electron apps are typically loaded from a file:// url.\n  // So use fetch if it is available and the url is not a file, otherwise fall back to XHR.\n  if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {\n    if (typeof fetch === 'function'\n      && !isFileURI(wasmBinaryFile)\n    ) {\n      return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) {\n        if (!response['ok']) {\n          throw \"failed to load wasm binary file at '\" + wasmBinaryFile + \"'\";\n        }\n        return response['arrayBuffer']();\n      }).catch(function () {\n          return getBinary(wasmBinaryFile);\n      });\n    }\n    else {\n      if (readAsync) {\n        // fetch is not available or url is file => try XHR (readAsync uses XHR internally)\n        return new Promise(function(resolve, reject) {\n          readAsync(wasmBinaryFile, function(response) { resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))) }, reject)\n        });\n      }\n    }\n  }\n    \n  // Otherwise, getBinary should be able to get it synchronously\n  return Promise.resolve().then(function() { return getBinary(wasmBinaryFile); });\n}\n\n// Create the wasm instance.\n// Receives the wasm imports, returns the exports.\nfunction createWasm() {\n  // prepare imports\n  var info = {\n    'env': asmLibraryArg,\n    'wasi_snapshot_preview1': asmLibraryArg,\n  };\n  // Load the wasm module and create an instance of using native support in the JS engine.\n  // handle a generated wasm instance, receiving its exports and\n  // performing other necessary setup\n  /** @param {WebAssembly.Module=} module*/\n  function receiveInstance(instance, module) {\n    var exports = instance.exports;\n\n    Module['asm'] = exports;\n\n    wasmMemory = Module['asm']['memory'];\n    assert(wasmMemory, \"memory not found in wasm exports\");\n    // This assertion doesn't hold when emscripten is run in --post-link\n    // mode.\n    // TODO(sbc): Read INITIAL_MEMORY out of the wasm file in post-link mode.\n    //assert(wasmMemory.buffer.byteLength === 16777216);\n    updateGlobalBufferAndViews(wasmMemory.buffer);\n\n    wasmTable = Module['asm']['__indirect_function_table'];\n    assert(wasmTable, \"table not found in wasm exports\");\n\n    addOnInit(Module['asm']['__wasm_call_ctors']);\n\n    removeRunDependency('wasm-instantiate');\n  }\n  // we can't run yet (except in a pthread, where we have a custom sync instantiator)\n  addRunDependency('wasm-instantiate');\n\n  // Prefer streaming instantiation if available.\n  // Async compilation can be confusing when an error on the page overwrites Module\n  // (for example, if the order of elements is wrong, and the one defining Module is\n  // later), so we save Module and check it later.\n  var trueModule = Module;\n  function receiveInstantiationResult(result) {\n    // 'result' is a ResultObject object which has both the module and instance.\n    // receiveInstance() will swap in the exports (to Module.asm) so they can be called\n    assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?');\n    trueModule = null;\n    // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.\n    // When the regression is fixed, can restore the above USE_PTHREADS-enabled path.\n    receiveInstance(result['instance']);\n  }\n\n  function instantiateArrayBuffer(receiver) {\n    return getBinaryPromise().then(function(binary) {\n      var result = WebAssembly.instantiate(binary, info);\n      return result;\n    }).then(receiver, function(reason) {\n      err('failed to asynchronously prepare wasm: ' + reason);\n\n      // Warn on some common problems.\n      if (isFileURI(wasmBinaryFile)) {\n        err('warning: Loading from a file URI (' + wasmBinaryFile + ') is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing');\n      }\n      abort(reason);\n    });\n  }\n\n  function instantiateAsync() {\n    if (!wasmBinary &&\n        typeof WebAssembly.instantiateStreaming === 'function' &&\n        !isDataURI(wasmBinaryFile) &&\n        // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously.\n        !isFileURI(wasmBinaryFile) &&\n        typeof fetch === 'function') {\n      return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) {\n        var result = WebAssembly.instantiateStreaming(response, info);\n        return result.then(receiveInstantiationResult, function(reason) {\n            // We expect the most common failure cause to be a bad MIME type for the binary,\n            // in which case falling back to ArrayBuffer instantiation should work.\n            err('wasm streaming compile failed: ' + reason);\n            err('falling back to ArrayBuffer instantiation');\n            return instantiateArrayBuffer(receiveInstantiationResult);\n          });\n      });\n    } else {\n      return instantiateArrayBuffer(receiveInstantiationResult);\n    }\n  }\n\n  // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback\n  // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel\n  // to any other async startup actions they are performing.\n  if (Module['instantiateWasm']) {\n    try {\n      var exports = Module['instantiateWasm'](info, receiveInstance);\n      return exports;\n    } catch(e) {\n      err('Module.instantiateWasm callback failed with error: ' + e);\n      return false;\n    }\n  }\n\n  instantiateAsync();\n  return {}; // no exports yet; we'll fill them in later\n}\n\n// Globals used by JS i64 conversions (see makeSetValue)\nvar tempDouble;\nvar tempI64;\n\n// === Body ===\n\nvar ASM_CONSTS = {\n  245268: function($0, $1) {initBase(UTF8ToString($0), UTF8ToString($1))},  \n 245317: function() {if (Module[\"setStatus\"]) Module[\"setStatus\"](\"\");},  \n 245371: function($0, $1) {if (Module[\"setStatus\"]) Module[\"setStatus\"](\"Downloading data... (\" + $0 + \"/\" + $1 + \")\");},  \n 245468: function() {if (Module[\"setStatus\"]) Module[\"setStatus\"](\"\");},  \n 245522: function($0) {if (window.viewer) window.viewer.loadFile(UTF8ToString($0))},  \n 245586: function($0, $1) {window.download($0, $1)},  \n 245614: function() {if (window.viewer && window.viewer.gui) {window.viewer.gui.destroy(); window.viewer.gui = null; window.viewer.vis = {}; }},  \n 245740: function() {return window.reload_flag;},  \n 245769: function() {window.reload_flag = false;},  \n 245799: function() {return window.resized;},  \n 245824: function() {window.resized = false;},  \n 245850: function($0, $1) {window.download($0, $1)},  \n 245878: function() {if (window.viewer.mode == \"Translate\") return 1; if (window.viewer.mode == \"Zoom\") return 2; return 0;},  \n 245985: function($0) {if ($0) Module.requestFullscreen(false,true); else document.exitFullscreen();}\n};\nfunction get_browser_modifiers(){ if (window.m_alt || window.m_shift || window.m_ctrl) { var val = 0; if (window.m_shift) val += 1; if (window.m_ctrl) val += 2; if (window.m_alt) val += 4; return val; } else { return 0; } }\nfunction get_commands(){ if (window.commands && window.commands.length) { var cmd = window.commands.join(';'); window.commands = []; var lengthBytes = lengthBytesUTF8(cmd)+1; var stringOnWasmHeap = _malloc(lengthBytes); stringToUTF8(cmd, stringOnWasmHeap, lengthBytes); return stringOnWasmHeap; } else { return null; } }\nfunction set_canvas_visible(){ document.getElementById('canvas').style.visibility = 'visible'; }\nfunction set_theme(light){ window.set_light_theme(light); }\n\n\n\n\n\n  function callRuntimeCallbacks(callbacks) {\n      while (callbacks.length > 0) {\n        var callback = callbacks.shift();\n        if (typeof callback == 'function') {\n          callback(Module); // Pass the module as the first argument.\n          continue;\n        }\n        var func = callback.func;\n        if (typeof func === 'number') {\n          if (callback.arg === undefined) {\n            wasmTable.get(func)();\n          } else {\n            wasmTable.get(func)(callback.arg);\n          }\n        } else {\n          func(callback.arg === undefined ? null : callback.arg);\n        }\n      }\n    }\n\n  function demangle(func) {\n      warnOnce('warning: build with  -s DEMANGLE_SUPPORT=1  to link in libcxxabi demangling');\n      return func;\n    }\n\n  function demangleAll(text) {\n      var regex =\n        /\\b_Z[\\w\\d_]+/g;\n      return text.replace(regex,\n        function(x) {\n          var y = demangle(x);\n          return x === y ? x : (y + ' [' + x + ']');\n        });\n    }\n\n  function jsStackTrace() {\n      var error = new Error();\n      if (!error.stack) {\n        // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown,\n        // so try that as a special-case.\n        try {\n          throw new Error();\n        } catch(e) {\n          error = e;\n        }\n        if (!error.stack) {\n          return '(no stack trace available)';\n        }\n      }\n      return error.stack.toString();\n    }\n\n  var runtimeKeepaliveCounter=0;\n  function keepRuntimeAlive() {\n      return noExitRuntime || runtimeKeepaliveCounter > 0;\n    }\n\n  function stackTrace() {\n      var js = jsStackTrace();\n      if (Module['extraStackTrace']) js += '\\n' + Module['extraStackTrace']();\n      return demangleAll(js);\n    }\n\n  var ExceptionInfoAttrs={DESTRUCTOR_OFFSET:0,REFCOUNT_OFFSET:4,TYPE_OFFSET:8,CAUGHT_OFFSET:12,RETHROWN_OFFSET:13,SIZE:16};\n  function ___cxa_allocate_exception(size) {\n      // Thrown object is prepended by exception metadata block\n      return _malloc(size + ExceptionInfoAttrs.SIZE) + ExceptionInfoAttrs.SIZE;\n    }\n\n  function _atexit(func, arg) {\n    }\n  function ___cxa_atexit(a0,a1\n  ) {\n  return _atexit(a0,a1);\n  }\n\n  function ExceptionInfo(excPtr) {\n      this.excPtr = excPtr;\n      this.ptr = excPtr - ExceptionInfoAttrs.SIZE;\n  \n      this.set_type = function(type) {\n        HEAP32[(((this.ptr)+(ExceptionInfoAttrs.TYPE_OFFSET))>>2)] = type;\n      };\n  \n      this.get_type = function() {\n        return HEAP32[(((this.ptr)+(ExceptionInfoAttrs.TYPE_OFFSET))>>2)];\n      };\n  \n      this.set_destructor = function(destructor) {\n        HEAP32[(((this.ptr)+(ExceptionInfoAttrs.DESTRUCTOR_OFFSET))>>2)] = destructor;\n      };\n  \n      this.get_destructor = function() {\n        return HEAP32[(((this.ptr)+(ExceptionInfoAttrs.DESTRUCTOR_OFFSET))>>2)];\n      };\n  \n      this.set_refcount = function(refcount) {\n        HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)] = refcount;\n      };\n  \n      this.set_caught = function (caught) {\n        caught = caught ? 1 : 0;\n        HEAP8[(((this.ptr)+(ExceptionInfoAttrs.CAUGHT_OFFSET))>>0)] = caught;\n      };\n  \n      this.get_caught = function () {\n        return HEAP8[(((this.ptr)+(ExceptionInfoAttrs.CAUGHT_OFFSET))>>0)] != 0;\n      };\n  \n      this.set_rethrown = function (rethrown) {\n        rethrown = rethrown ? 1 : 0;\n        HEAP8[(((this.ptr)+(ExceptionInfoAttrs.RETHROWN_OFFSET))>>0)] = rethrown;\n      };\n  \n      this.get_rethrown = function () {\n        return HEAP8[(((this.ptr)+(ExceptionInfoAttrs.RETHROWN_OFFSET))>>0)] != 0;\n      };\n  \n      // Initialize native structure fields. Should be called once after allocated.\n      this.init = function(type, destructor) {\n        this.set_type(type);\n        this.set_destructor(destructor);\n        this.set_refcount(0);\n        this.set_caught(false);\n        this.set_rethrown(false);\n      }\n  \n      this.add_ref = function() {\n        var value = HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)];\n        HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)] = value + 1;\n      };\n  \n      // Returns true if last reference released.\n      this.release_ref = function() {\n        var prev = HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)];\n        HEAP32[(((this.ptr)+(ExceptionInfoAttrs.REFCOUNT_OFFSET))>>2)] = prev - 1;\n        assert(prev > 0);\n        return prev === 1;\n      };\n    }\n  function CatchInfo(ptr) {\n  \n      this.free = function() {\n        _free(this.ptr);\n        this.ptr = 0;\n      };\n  \n      this.set_base_ptr = function(basePtr) {\n        HEAP32[((this.ptr)>>2)] = basePtr;\n      };\n  \n      this.get_base_ptr = function() {\n        return HEAP32[((this.ptr)>>2)];\n      };\n  \n      this.set_adjusted_ptr = function(adjustedPtr) {\n        var ptrSize = 4;\n        HEAP32[(((this.ptr)+(ptrSize))>>2)] = adjustedPtr;\n      };\n  \n      this.get_adjusted_ptr = function() {\n        var ptrSize = 4;\n        return HEAP32[(((this.ptr)+(ptrSize))>>2)];\n      };\n  \n      // Get pointer which is expected to be received by catch clause in C++ code. It may be adjusted\n      // when the pointer is casted to some of the exception object base classes (e.g. when virtual\n      // inheritance is used). When a pointer is thrown this method should return the thrown pointer\n      // itself.\n      this.get_exception_ptr = function() {\n        // Work around a fastcomp bug, this code is still included for some reason in a build without\n        // exceptions support.\n        var isPointer = ___cxa_is_pointer_type(\n          this.get_exception_info().get_type());\n        if (isPointer) {\n          return HEAP32[((this.get_base_ptr())>>2)];\n        }\n        var adjusted = this.get_adjusted_ptr();\n        if (adjusted !== 0) return adjusted;\n        return this.get_base_ptr();\n      };\n  \n      this.get_exception_info = function() {\n        return new ExceptionInfo(this.get_base_ptr());\n      };\n  \n      if (ptr === undefined) {\n        this.ptr = _malloc(8);\n        this.set_adjusted_ptr(0);\n      } else {\n        this.ptr = ptr;\n      }\n    }\n  \n  var exceptionCaught= [];\n  \n  function exception_addRef(info) {\n      info.add_ref();\n    }\n  \n  var uncaughtExceptionCount=0;\n  function ___cxa_begin_catch(ptr) {\n      var catchInfo = new CatchInfo(ptr);\n      var info = catchInfo.get_exception_info();\n      if (!info.get_caught()) {\n        info.set_caught(true);\n        uncaughtExceptionCount--;\n      }\n      info.set_rethrown(false);\n      exceptionCaught.push(catchInfo);\n      exception_addRef(info);\n      return catchInfo.get_exception_ptr();\n    }\n\n  var exceptionLast=0;\n  \n  function ___cxa_free_exception(ptr) {\n      try {\n        return _free(new ExceptionInfo(ptr).ptr);\n      } catch(e) {\n        err('exception during cxa_free_exception: ' + e);\n      }\n    }\n  function exception_decRef(info) {\n      // A rethrown exception can reach refcount 0; it must not be discarded\n      // Its next handler will clear the rethrown flag and addRef it, prior to\n      // final decRef and destruction here\n      if (info.release_ref() && !info.get_rethrown()) {\n        var destructor = info.get_destructor();\n        if (destructor) {\n          // In Wasm, destructors return 'this' as in ARM\n          wasmTable.get(destructor)(info.excPtr);\n        }\n        ___cxa_free_exception(info.excPtr);\n      }\n    }\n  function ___cxa_end_catch() {\n      // Clear state flag.\n      _setThrew(0);\n      assert(exceptionCaught.length > 0);\n      // Call destructor if one is registered then clear it.\n      var catchInfo = exceptionCaught.pop();\n  \n      exception_decRef(catchInfo.get_exception_info());\n      catchInfo.free();\n      exceptionLast = 0; // XXX in decRef?\n    }\n\n  function ___resumeException(catchInfoPtr) {\n      var catchInfo = new CatchInfo(catchInfoPtr);\n      var ptr = catchInfo.get_base_ptr();\n      if (!exceptionLast) { exceptionLast = ptr; }\n      catchInfo.free();\n      throw ptr;\n    }\n  function ___cxa_find_matching_catch_2() {\n      var thrown = exceptionLast;\n      if (!thrown) {\n        // just pass through the null ptr\n        setTempRet0(0); return ((0)|0);\n      }\n      var info = new ExceptionInfo(thrown);\n      var thrownType = info.get_type();\n      var catchInfo = new CatchInfo();\n      catchInfo.set_base_ptr(thrown);\n      if (!thrownType) {\n        // just pass through the thrown ptr\n        setTempRet0(0); return ((catchInfo.ptr)|0);\n      }\n      var typeArray = Array.prototype.slice.call(arguments);\n  \n      // can_catch receives a **, add indirection\n      var stackTop = stackSave();\n      var exceptionThrowBuf = stackAlloc(4);\n      HEAP32[((exceptionThrowBuf)>>2)] = thrown;\n      // The different catch blocks are denoted by different types.\n      // Due to inheritance, those types may not precisely match the\n      // type of the thrown object. Find one which matches, and\n      // return the type of the catch block which should be called.\n      for (var i = 0; i < typeArray.length; i++) {\n        var caughtType = typeArray[i];\n        if (caughtType === 0 || caughtType === thrownType) {\n          // Catch all clause matched or exactly the same type is caught\n          break;\n        }\n        if (___cxa_can_catch(caughtType, thrownType, exceptionThrowBuf)) {\n          var adjusted = HEAP32[((exceptionThrowBuf)>>2)];\n          if (thrown !== adjusted) {\n            catchInfo.set_adjusted_ptr(adjusted);\n          }\n          setTempRet0(caughtType); return ((catchInfo.ptr)|0);\n        }\n      }\n      stackRestore(stackTop);\n      setTempRet0(thrownType); return ((catchInfo.ptr)|0);\n    }\n\n  function ___cxa_find_matching_catch_3() {\n      var thrown = exceptionLast;\n      if (!thrown) {\n        // just pass through the null ptr\n        setTempRet0(0); return ((0)|0);\n      }\n      var info = new ExceptionInfo(thrown);\n      var thrownType = info.get_type();\n      var catchInfo = new CatchInfo();\n      catchInfo.set_base_ptr(thrown);\n      if (!thrownType) {\n        // just pass through the thrown ptr\n        setTempRet0(0); return ((catchInfo.ptr)|0);\n      }\n      var typeArray = Array.prototype.slice.call(arguments);\n  \n      // can_catch receives a **, add indirection\n      var stackTop = stackSave();\n      var exceptionThrowBuf = stackAlloc(4);\n      HEAP32[((exceptionThrowBuf)>>2)] = thrown;\n      // The different catch blocks are denoted by different types.\n      // Due to inheritance, those types may not precisely match the\n      // type of the thrown object. Find one which matches, and\n      // return the type of the catch block which should be called.\n      for (var i = 0; i < typeArray.length; i++) {\n        var caughtType = typeArray[i];\n        if (caughtType === 0 || caughtType === thrownType) {\n          // Catch all clause matched or exactly the same type is caught\n          break;\n        }\n        if (___cxa_can_catch(caughtType, thrownType, exceptionThrowBuf)) {\n          var adjusted = HEAP32[((exceptionThrowBuf)>>2)];\n          if (thrown !== adjusted) {\n            catchInfo.set_adjusted_ptr(adjusted);\n          }\n          setTempRet0(caughtType); return ((catchInfo.ptr)|0);\n        }\n      }\n      stackRestore(stackTop);\n      setTempRet0(thrownType); return ((catchInfo.ptr)|0);\n    }\n\n\n  function ___cxa_rethrow() {\n      var catchInfo = exceptionCaught.pop();\n      if (!catchInfo) {\n        abort('no exception to throw');\n      }\n      var info = catchInfo.get_exception_info();\n      var ptr = catchInfo.get_base_ptr();\n      if (!info.get_rethrown()) {\n        // Only pop if the corresponding push was through rethrow_primary_exception\n        exceptionCaught.push(catchInfo);\n        info.set_rethrown(true);\n        info.set_caught(false);\n        uncaughtExceptionCount++;\n      } else {\n        catchInfo.free();\n      }\n      exceptionLast = ptr;\n      throw ptr;\n    }\n\n  function ___cxa_throw(ptr, type, destructor) {\n      var info = new ExceptionInfo(ptr);\n      // Initialize ExceptionInfo content after it was allocated in __cxa_allocate_exception.\n      info.init(type, destructor);\n      exceptionLast = ptr;\n      uncaughtExceptionCount++;\n      throw ptr;\n    }\n\n  function ___cxa_uncaught_exceptions() {\n      return uncaughtExceptionCount;\n    }\n\n  function _tzset() {\n      // TODO: Use (malleable) environment variables instead of system settings.\n      if (_tzset.called) return;\n      _tzset.called = true;\n  \n      var currentYear = new Date().getFullYear();\n      var winter = new Date(currentYear, 0, 1);\n      var summer = new Date(currentYear, 6, 1);\n      var winterOffset = winter.getTimezoneOffset();\n      var summerOffset = summer.getTimezoneOffset();\n  \n      // Local standard timezone offset. Local standard time is not adjusted for daylight savings.\n      // This code uses the fact that getTimezoneOffset returns a greater value during Standard Time versus Daylight Saving Time (DST). \n      // Thus it determines the expected output during Standard Time, and it compares whether the output of the given date the same (Standard) or less (DST).\n      var stdTimezoneOffset = Math.max(winterOffset, summerOffset);\n  \n      // timezone is specified as seconds west of UTC (\"The external variable\n      // `timezone` shall be set to the difference, in seconds, between\n      // Coordinated Universal Time (UTC) and local standard time.\"), the same\n      // as returned by stdTimezoneOffset.\n      // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html\n      HEAP32[((__get_timezone())>>2)] = stdTimezoneOffset * 60;\n  \n      HEAP32[((__get_daylight())>>2)] = Number(winterOffset != summerOffset);\n  \n      function extractZone(date) {\n        var match = date.toTimeString().match(/\\(([A-Za-z ]+)\\)$/);\n        return match ? match[1] : \"GMT\";\n      };\n      var winterName = extractZone(winter);\n      var summerName = extractZone(summer);\n      var winterNamePtr = allocateUTF8(winterName);\n      var summerNamePtr = allocateUTF8(summerName);\n      if (summerOffset < winterOffset) {\n        // Northern hemisphere\n        HEAP32[((__get_tzname())>>2)] = winterNamePtr;\n        HEAP32[(((__get_tzname())+(4))>>2)] = summerNamePtr;\n      } else {\n        HEAP32[((__get_tzname())>>2)] = summerNamePtr;\n        HEAP32[(((__get_tzname())+(4))>>2)] = winterNamePtr;\n      }\n    }\n  function _localtime_r(time, tmPtr) {\n      _tzset();\n      var date = new Date(HEAP32[((time)>>2)]*1000);\n      HEAP32[((tmPtr)>>2)] = date.getSeconds();\n      HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes();\n      HEAP32[(((tmPtr)+(8))>>2)] = date.getHours();\n      HEAP32[(((tmPtr)+(12))>>2)] = date.getDate();\n      HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth();\n      HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900;\n      HEAP32[(((tmPtr)+(24))>>2)] = date.getDay();\n  \n      var start = new Date(date.getFullYear(), 0, 1);\n      var yday = ((date.getTime() - start.getTime()) / (1000 * 60 * 60 * 24))|0;\n      HEAP32[(((tmPtr)+(28))>>2)] = yday;\n      HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60);\n  \n      // Attention: DST is in December in South, and some regions don't have DST at all.\n      var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset();\n      var winterOffset = start.getTimezoneOffset();\n      var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0;\n      HEAP32[(((tmPtr)+(32))>>2)] = dst;\n  \n      var zonePtr = HEAP32[(((__get_tzname())+(dst ? 4 : 0))>>2)];\n      HEAP32[(((tmPtr)+(40))>>2)] = zonePtr;\n  \n      return tmPtr;\n    }\n  function ___localtime_r(a0,a1\n  ) {\n  return _localtime_r(a0,a1);\n  }\n\n\n  var PATH={splitPath:function(filename) {\n        var splitPathRe = /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\n        return splitPathRe.exec(filename).slice(1);\n      },normalizeArray:function(parts, allowAboveRoot) {\n        // if the path tries to go above the root, `up` ends up > 0\n        var up = 0;\n        for (var i = parts.length - 1; i >= 0; i--) {\n          var last = parts[i];\n          if (last === '.') {\n            parts.splice(i, 1);\n          } else if (last === '..') {\n            parts.splice(i, 1);\n            up++;\n          } else if (up) {\n            parts.splice(i, 1);\n            up--;\n          }\n        }\n        // if the path is allowed to go above the root, restore leading ..s\n        if (allowAboveRoot) {\n          for (; up; up--) {\n            parts.unshift('..');\n          }\n        }\n        return parts;\n      },normalize:function(path) {\n        var isAbsolute = path.charAt(0) === '/',\n            trailingSlash = path.substr(-1) === '/';\n        // Normalize the path\n        path = PATH.normalizeArray(path.split('/').filter(function(p) {\n          return !!p;\n        }), !isAbsolute).join('/');\n        if (!path && !isAbsolute) {\n          path = '.';\n        }\n        if (path && trailingSlash) {\n          path += '/';\n        }\n        return (isAbsolute ? '/' : '') + path;\n      },dirname:function(path) {\n        var result = PATH.splitPath(path),\n            root = result[0],\n            dir = result[1];\n        if (!root && !dir) {\n          // No dirname whatsoever\n          return '.';\n        }\n        if (dir) {\n          // It has a dirname, strip trailing slash\n          dir = dir.substr(0, dir.length - 1);\n        }\n        return root + dir;\n      },basename:function(path) {\n        // EMSCRIPTEN return '/'' for '/', not an empty string\n        if (path === '/') return '/';\n        path = PATH.normalize(path);\n        path = path.replace(/\\/$/, \"\");\n        var lastSlash = path.lastIndexOf('/');\n        if (lastSlash === -1) return path;\n        return path.substr(lastSlash+1);\n      },extname:function(path) {\n        return PATH.splitPath(path)[3];\n      },join:function() {\n        var paths = Array.prototype.slice.call(arguments, 0);\n        return PATH.normalize(paths.join('/'));\n      },join2:function(l, r) {\n        return PATH.normalize(l + '/' + r);\n      }};\n  \n  function getRandomDevice() {\n      if (typeof crypto === 'object' && typeof crypto['getRandomValues'] === 'function') {\n        // for modern web browsers\n        var randomBuffer = new Uint8Array(1);\n        return function() { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; };\n      } else\n      if (ENVIRONMENT_IS_NODE) {\n        // for nodejs with or without crypto support included\n        try {\n          var crypto_module = require('crypto');\n          // nodejs has crypto support\n          return function() { return crypto_module['randomBytes'](1)[0]; };\n        } catch (e) {\n          // nodejs doesn't have crypto support\n        }\n      }\n      // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096\n      return function() { abort(\"no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };\"); };\n    }\n  \n  var PATH_FS={resolve:function() {\n        var resolvedPath = '',\n          resolvedAbsolute = false;\n        for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n          var path = (i >= 0) ? arguments[i] : FS.cwd();\n          // Skip empty and invalid entries\n          if (typeof path !== 'string') {\n            throw new TypeError('Arguments to path.resolve must be strings');\n          } else if (!path) {\n            return ''; // an invalid portion invalidates the whole thing\n          }\n          resolvedPath = path + '/' + resolvedPath;\n          resolvedAbsolute = path.charAt(0) === '/';\n        }\n        // At this point the path should be resolved to a full absolute path, but\n        // handle relative paths to be safe (might happen when process.cwd() fails)\n        resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter(function(p) {\n          return !!p;\n        }), !resolvedAbsolute).join('/');\n        return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n      },relative:function(from, to) {\n        from = PATH_FS.resolve(from).substr(1);\n        to = PATH_FS.resolve(to).substr(1);\n        function trim(arr) {\n          var start = 0;\n          for (; start < arr.length; start++) {\n            if (arr[start] !== '') break;\n          }\n          var end = arr.length - 1;\n          for (; end >= 0; end--) {\n            if (arr[end] !== '') break;\n          }\n          if (start > end) return [];\n          return arr.slice(start, end - start + 1);\n        }\n        var fromParts = trim(from.split('/'));\n        var toParts = trim(to.split('/'));\n        var length = Math.min(fromParts.length, toParts.length);\n        var samePartsLength = length;\n        for (var i = 0; i < length; i++) {\n          if (fromParts[i] !== toParts[i]) {\n            samePartsLength = i;\n            break;\n          }\n        }\n        var outputParts = [];\n        for (var i = samePartsLength; i < fromParts.length; i++) {\n          outputParts.push('..');\n        }\n        outputParts = outputParts.concat(toParts.slice(samePartsLength));\n        return outputParts.join('/');\n      }};\n  \n  var TTY={ttys:[],init:function () {\n        // https://github.com/emscripten-core/emscripten/pull/1555\n        // if (ENVIRONMENT_IS_NODE) {\n        //   // currently, FS.init does not distinguish if process.stdin is a file or TTY\n        //   // device, it always assumes it's a TTY device. because of this, we're forcing\n        //   // process.stdin to UTF8 encoding to at least make stdin reading compatible\n        //   // with text files until FS.init can be refactored.\n        //   process['stdin']['setEncoding']('utf8');\n        // }\n      },shutdown:function() {\n        // https://github.com/emscripten-core/emscripten/pull/1555\n        // if (ENVIRONMENT_IS_NODE) {\n        //   // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?\n        //   // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation\n        //   // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?\n        //   // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle\n        //   // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call\n        //   process['stdin']['pause']();\n        // }\n      },register:function(dev, ops) {\n        TTY.ttys[dev] = { input: [], output: [], ops: ops };\n        FS.registerDevice(dev, TTY.stream_ops);\n      },stream_ops:{open:function(stream) {\n          var tty = TTY.ttys[stream.node.rdev];\n          if (!tty) {\n            throw new FS.ErrnoError(43);\n          }\n          stream.tty = tty;\n          stream.seekable = false;\n        },close:function(stream) {\n          // flush any pending line data\n          stream.tty.ops.flush(stream.tty);\n        },flush:function(stream) {\n          stream.tty.ops.flush(stream.tty);\n        },read:function(stream, buffer, offset, length, pos /* ignored */) {\n          if (!stream.tty || !stream.tty.ops.get_char) {\n            throw new FS.ErrnoError(60);\n          }\n          var bytesRead = 0;\n          for (var i = 0; i < length; i++) {\n            var result;\n            try {\n              result = stream.tty.ops.get_char(stream.tty);\n            } catch (e) {\n              throw new FS.ErrnoError(29);\n            }\n            if (result === undefined && bytesRead === 0) {\n              throw new FS.ErrnoError(6);\n            }\n            if (result === null || result === undefined) break;\n            bytesRead++;\n            buffer[offset+i] = result;\n          }\n          if (bytesRead) {\n            stream.node.timestamp = Date.now();\n          }\n          return bytesRead;\n        },write:function(stream, buffer, offset, length, pos) {\n          if (!stream.tty || !stream.tty.ops.put_char) {\n            throw new FS.ErrnoError(60);\n          }\n          try {\n            for (var i = 0; i < length; i++) {\n              stream.tty.ops.put_char(stream.tty, buffer[offset+i]);\n            }\n          } catch (e) {\n            throw new FS.ErrnoError(29);\n          }\n          if (length) {\n            stream.node.timestamp = Date.now();\n          }\n          return i;\n        }},default_tty_ops:{get_char:function(tty) {\n          if (!tty.input.length) {\n            var result = null;\n            if (ENVIRONMENT_IS_NODE) {\n              // we will read data by chunks of BUFSIZE\n              var BUFSIZE = 256;\n              var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE);\n              var bytesRead = 0;\n  \n              try {\n                bytesRead = nodeFS.readSync(process.stdin.fd, buf, 0, BUFSIZE, null);\n              } catch(e) {\n                // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes,\n                // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0.\n                if (e.toString().includes('EOF')) bytesRead = 0;\n                else throw e;\n              }\n  \n              if (bytesRead > 0) {\n                result = buf.slice(0, bytesRead).toString('utf-8');\n              } else {\n                result = null;\n              }\n            } else\n            if (typeof window != 'undefined' &&\n              typeof window.prompt == 'function') {\n              // Browser.\n              result = window.prompt('Input: ');  // returns null on cancel\n              if (result !== null) {\n                result += '\\n';\n              }\n            } else if (typeof readline == 'function') {\n              // Command line.\n              result = readline();\n              if (result !== null) {\n                result += '\\n';\n              }\n            }\n            if (!result) {\n              return null;\n            }\n            tty.input = intArrayFromString(result, true);\n          }\n          return tty.input.shift();\n        },put_char:function(tty, val) {\n          if (val === null || val === 10) {\n            out(UTF8ArrayToString(tty.output, 0));\n            tty.output = [];\n          } else {\n            if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.\n          }\n        },flush:function(tty) {\n          if (tty.output && tty.output.length > 0) {\n            out(UTF8ArrayToString(tty.output, 0));\n            tty.output = [];\n          }\n        }},default_tty1_ops:{put_char:function(tty, val) {\n          if (val === null || val === 10) {\n            err(UTF8ArrayToString(tty.output, 0));\n            tty.output = [];\n          } else {\n            if (val != 0) tty.output.push(val);\n          }\n        },flush:function(tty) {\n          if (tty.output && tty.output.length > 0) {\n            err(UTF8ArrayToString(tty.output, 0));\n            tty.output = [];\n          }\n        }}};\n  \n  function mmapAlloc(size) {\n      var alignedSize = alignMemory(size, 16384);\n      var ptr = _malloc(alignedSize);\n      while (size < alignedSize) HEAP8[ptr + size++] = 0;\n      return ptr;\n    }\n  var MEMFS={ops_table:null,mount:function(mount) {\n        return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);\n      },createNode:function(parent, name, mode, dev) {\n        if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {\n          // no supported\n          throw new FS.ErrnoError(63);\n        }\n        if (!MEMFS.ops_table) {\n          MEMFS.ops_table = {\n            dir: {\n              node: {\n                getattr: MEMFS.node_ops.getattr,\n                setattr: MEMFS.node_ops.setattr,\n                lookup: MEMFS.node_ops.lookup,\n                mknod: MEMFS.node_ops.mknod,\n                rename: MEMFS.node_ops.rename,\n                unlink: MEMFS.node_ops.unlink,\n                rmdir: MEMFS.node_ops.rmdir,\n                readdir: MEMFS.node_ops.readdir,\n                symlink: MEMFS.node_ops.symlink\n              },\n              stream: {\n                llseek: MEMFS.stream_ops.llseek\n              }\n            },\n            file: {\n              node: {\n                getattr: MEMFS.node_ops.getattr,\n                setattr: MEMFS.node_ops.setattr\n              },\n              stream: {\n                llseek: MEMFS.stream_ops.llseek,\n                read: MEMFS.stream_ops.read,\n                write: MEMFS.stream_ops.write,\n                allocate: MEMFS.stream_ops.allocate,\n                mmap: MEMFS.stream_ops.mmap,\n                msync: MEMFS.stream_ops.msync\n              }\n            },\n            link: {\n              node: {\n                getattr: MEMFS.node_ops.getattr,\n                setattr: MEMFS.node_ops.setattr,\n                readlink: MEMFS.node_ops.readlink\n              },\n              stream: {}\n            },\n            chrdev: {\n              node: {\n                getattr: MEMFS.node_ops.getattr,\n                setattr: MEMFS.node_ops.setattr\n              },\n              stream: FS.chrdev_stream_ops\n            }\n          };\n        }\n        var node = FS.createNode(parent, name, mode, dev);\n        if (FS.isDir(node.mode)) {\n          node.node_ops = MEMFS.ops_table.dir.node;\n          node.stream_ops = MEMFS.ops_table.dir.stream;\n          node.contents = {};\n        } else if (FS.isFile(node.mode)) {\n          node.node_ops = MEMFS.ops_table.file.node;\n          node.stream_ops = MEMFS.ops_table.file.stream;\n          node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity.\n          // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred\n          // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size\n          // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.\n          node.contents = null; \n        } else if (FS.isLink(node.mode)) {\n          node.node_ops = MEMFS.ops_table.link.node;\n          node.stream_ops = MEMFS.ops_table.link.stream;\n        } else if (FS.isChrdev(node.mode)) {\n          node.node_ops = MEMFS.ops_table.chrdev.node;\n          node.stream_ops = MEMFS.ops_table.chrdev.stream;\n        }\n        node.timestamp = Date.now();\n        // add the new node to the parent\n        if (parent) {\n          parent.contents[name] = node;\n          parent.timestamp = node.timestamp;\n        }\n        return node;\n      },getFileDataAsTypedArray:function(node) {\n        if (!node.contents) return new Uint8Array(0);\n        if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.\n        return new Uint8Array(node.contents);\n      },expandFileStorage:function(node, newCapacity) {\n        var prevCapacity = node.contents ? node.contents.length : 0;\n        if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.\n        // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.\n        // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to\n        // avoid overshooting the allocation cap by a very large margin.\n        var CAPACITY_DOUBLING_MAX = 1024 * 1024;\n        newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0);\n        if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.\n        var oldContents = node.contents;\n        node.contents = new Uint8Array(newCapacity); // Allocate new storage.\n        if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.\n      },resizeFileStorage:function(node, newSize) {\n        if (node.usedBytes == newSize) return;\n        if (newSize == 0) {\n          node.contents = null; // Fully decommit when requesting a resize to zero.\n          node.usedBytes = 0;\n        } else {\n          var oldContents = node.contents;\n          node.contents = new Uint8Array(newSize); // Allocate new storage.\n          if (oldContents) {\n            node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.\n          }\n          node.usedBytes = newSize;\n        }\n      },node_ops:{getattr:function(node) {\n          var attr = {};\n          // device numbers reuse inode numbers.\n          attr.dev = FS.isChrdev(node.mode) ? node.id : 1;\n          attr.ino = node.id;\n          attr.mode = node.mode;\n          attr.nlink = 1;\n          attr.uid = 0;\n          attr.gid = 0;\n          attr.rdev = node.rdev;\n          if (FS.isDir(node.mode)) {\n            attr.size = 4096;\n          } else if (FS.isFile(node.mode)) {\n            attr.size = node.usedBytes;\n          } else if (FS.isLink(node.mode)) {\n            attr.size = node.link.length;\n          } else {\n            attr.size = 0;\n          }\n          attr.atime = new Date(node.timestamp);\n          attr.mtime = new Date(node.timestamp);\n          attr.ctime = new Date(node.timestamp);\n          // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),\n          //       but this is not required by the standard.\n          attr.blksize = 4096;\n          attr.blocks = Math.ceil(attr.size / attr.blksize);\n          return attr;\n        },setattr:function(node, attr) {\n          if (attr.mode !== undefined) {\n            node.mode = attr.mode;\n          }\n          if (attr.timestamp !== undefined) {\n            node.timestamp = attr.timestamp;\n          }\n          if (attr.size !== undefined) {\n            MEMFS.resizeFileStorage(node, attr.size);\n          }\n        },lookup:function(parent, name) {\n          throw FS.genericErrors[44];\n        },mknod:function(parent, name, mode, dev) {\n          return MEMFS.createNode(parent, name, mode, dev);\n        },rename:function(old_node, new_dir, new_name) {\n          // if we're overwriting a directory at new_name, make sure it's empty.\n          if (FS.isDir(old_node.mode)) {\n            var new_node;\n            try {\n              new_node = FS.lookupNode(new_dir, new_name);\n            } catch (e) {\n            }\n            if (new_node) {\n              for (var i in new_node.contents) {\n                throw new FS.ErrnoError(55);\n              }\n            }\n          }\n          // do the internal rewiring\n          delete old_node.parent.contents[old_node.name];\n          old_node.parent.timestamp = Date.now()\n          old_node.name = new_name;\n          new_dir.contents[new_name] = old_node;\n          new_dir.timestamp = old_node.parent.timestamp;\n          old_node.parent = new_dir;\n        },unlink:function(parent, name) {\n          delete parent.contents[name];\n          parent.timestamp = Date.now();\n        },rmdir:function(parent, name) {\n          var node = FS.lookupNode(parent, name);\n          for (var i in node.contents) {\n            throw new FS.ErrnoError(55);\n          }\n          delete parent.contents[name];\n          parent.timestamp = Date.now();\n        },readdir:function(node) {\n          var entries = ['.', '..'];\n          for (var key in node.contents) {\n            if (!node.contents.hasOwnProperty(key)) {\n              continue;\n            }\n            entries.push(key);\n          }\n          return entries;\n        },symlink:function(parent, newname, oldpath) {\n          var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);\n          node.link = oldpath;\n          return node;\n        },readlink:function(node) {\n          if (!FS.isLink(node.mode)) {\n            throw new FS.ErrnoError(28);\n          }\n          return node.link;\n        }},stream_ops:{read:function(stream, buffer, offset, length, position) {\n          var contents = stream.node.contents;\n          if (position >= stream.node.usedBytes) return 0;\n          var size = Math.min(stream.node.usedBytes - position, length);\n          assert(size >= 0);\n          if (size > 8 && contents.subarray) { // non-trivial, and typed array\n            buffer.set(contents.subarray(position, position + size), offset);\n          } else {\n            for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];\n          }\n          return size;\n        },write:function(stream, buffer, offset, length, position, canOwn) {\n          // The data buffer should be a typed array view\n          assert(!(buffer instanceof ArrayBuffer));\n          // If the buffer is located in main memory (HEAP), and if\n          // memory can grow, we can't hold on to references of the\n          // memory buffer, as they may get invalidated. That means we\n          // need to do copy its contents.\n          if (buffer.buffer === HEAP8.buffer) {\n            canOwn = false;\n          }\n  \n          if (!length) return 0;\n          var node = stream.node;\n          node.timestamp = Date.now();\n  \n          if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array?\n            if (canOwn) {\n              assert(position === 0, 'canOwn must imply no weird position inside the file');\n              node.contents = buffer.subarray(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.\n              node.contents = buffer.slice(offset, offset + length);\n              node.usedBytes = length;\n              return length;\n            } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file?\n              node.contents.set(buffer.subarray(offset, offset + length), position);\n              return length;\n            }\n          }\n  \n          // Appending to an existing file and we need to reallocate, or source data did not come as a typed array.\n          MEMFS.expandFileStorage(node, position+length);\n          if (node.contents.subarray && buffer.subarray) {\n            // Use typed array write which is available.\n            node.contents.set(buffer.subarray(offset, offset + length), position);\n          } else {\n            for (var i = 0; i < length; i++) {\n             node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not.\n            }\n          }\n          node.usedBytes = Math.max(node.usedBytes, position + length);\n          return length;\n        },llseek:function(stream, offset, whence) {\n          var position = offset;\n          if (whence === 1) {\n            position += stream.position;\n          } else if (whence === 2) {\n            if (FS.isFile(stream.node.mode)) {\n              position += stream.node.usedBytes;\n            }\n          }\n          if (position < 0) {\n            throw new FS.ErrnoError(28);\n          }\n          return position;\n        },allocate:function(stream, offset, length) {\n          MEMFS.expandFileStorage(stream.node, offset + length);\n          stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);\n        },mmap:function(stream, address, length, position, prot, flags) {\n          if (address !== 0) {\n            // We don't currently support location hints for the address of the mapping\n            throw new FS.ErrnoError(28);\n          }\n          if (!FS.isFile(stream.node.mode)) {\n            throw new FS.ErrnoError(43);\n          }\n          var ptr;\n          var allocated;\n          var contents = stream.node.contents;\n          // Only make a new copy when MAP_PRIVATE is specified.\n          if (!(flags & 2) && contents.buffer === buffer) {\n            // We can't emulate MAP_SHARED when the file is not backed by the buffer\n            // we're mapping to (e.g. the HEAP buffer).\n            allocated = false;\n            ptr = contents.byteOffset;\n          } else {\n            // Try to avoid unnecessary slices.\n            if (position > 0 || position + length < contents.length) {\n              if (contents.subarray) {\n                contents = contents.subarray(position, position + length);\n              } else {\n                contents = Array.prototype.slice.call(contents, position, position + length);\n              }\n            }\n            allocated = true;\n            ptr = mmapAlloc(length);\n            if (!ptr) {\n              throw new FS.ErrnoError(48);\n            }\n            HEAP8.set(contents, ptr);\n          }\n          return { ptr: ptr, allocated: allocated };\n        },msync:function(stream, buffer, offset, length, mmapFlags) {\n          if (!FS.isFile(stream.node.mode)) {\n            throw new FS.ErrnoError(43);\n          }\n          if (mmapFlags & 2) {\n            // MAP_PRIVATE calls need not to be synced back to underlying fs\n            return 0;\n          }\n  \n          var bytesWritten = MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);\n          // should we check if bytesWritten and length are the same?\n          return 0;\n        }}};\n  \n  var ERRNO_MESSAGES={0:\"Success\",1:\"Arg list too long\",2:\"Permission denied\",3:\"Address already in use\",4:\"Address not available\",5:\"Address family not supported by protocol family\",6:\"No more processes\",7:\"Socket already connected\",8:\"Bad file number\",9:\"Trying to read unreadable message\",10:\"Mount device busy\",11:\"Operation canceled\",12:\"No children\",13:\"Connection aborted\",14:\"Connection refused\",15:\"Connection reset by peer\",16:\"File locking deadlock error\",17:\"Destination address required\",18:\"Math arg out of domain of func\",19:\"Quota exceeded\",20:\"File exists\",21:\"Bad address\",22:\"File too large\",23:\"Host is unreachable\",24:\"Identifier removed\",25:\"Illegal byte sequence\",26:\"Connection already in progress\",27:\"Interrupted system call\",28:\"Invalid argument\",29:\"I/O error\",30:\"Socket is already connected\",31:\"Is a directory\",32:\"Too many symbolic links\",33:\"Too many open files\",34:\"Too many links\",35:\"Message too long\",36:\"Multihop attempted\",37:\"File or path name too long\",38:\"Network interface is not configured\",39:\"Connection reset by network\",40:\"Network is unreachable\",41:\"Too many open files in system\",42:\"No buffer space available\",43:\"No such device\",44:\"No such file or directory\",45:\"Exec format error\",46:\"No record locks available\",47:\"The link has been severed\",48:\"Not enough core\",49:\"No message of desired type\",50:\"Protocol not available\",51:\"No space left on device\",52:\"Function not implemented\",53:\"Socket is not connected\",54:\"Not a directory\",55:\"Directory not empty\",56:\"State not recoverable\",57:\"Socket operation on non-socket\",59:\"Not a typewriter\",60:\"No such device or address\",61:\"Value too large for defined data type\",62:\"Previous owner died\",63:\"Not super-user\",64:\"Broken pipe\",65:\"Protocol error\",66:\"Unknown protocol\",67:\"Protocol wrong type for socket\",68:\"Math result not representable\",69:\"Read only file system\",70:\"Illegal seek\",71:\"No such process\",72:\"Stale file handle\",73:\"Connection timed out\",74:\"Text file busy\",75:\"Cross-device link\",100:\"Device not a stream\",101:\"Bad font file fmt\",102:\"Invalid slot\",103:\"Invalid request code\",104:\"No anode\",105:\"Block device required\",106:\"Channel number out of range\",107:\"Level 3 halted\",108:\"Level 3 reset\",109:\"Link number out of range\",110:\"Protocol driver not attached\",111:\"No CSI structure available\",112:\"Level 2 halted\",113:\"Invalid exchange\",114:\"Invalid request descriptor\",115:\"Exchange full\",116:\"No data (for no delay io)\",117:\"Timer expired\",118:\"Out of streams resources\",119:\"Machine is not on the network\",120:\"Package not installed\",121:\"The object is remote\",122:\"Advertise error\",123:\"Srmount error\",124:\"Communication error on send\",125:\"Cross mount point (not really error)\",126:\"Given log. name not unique\",127:\"f.d. invalid for this operation\",128:\"Remote address changed\",129:\"Can   access a needed shared lib\",130:\"Accessing a corrupted shared lib\",131:\".lib section in a.out corrupted\",132:\"Attempting to link in too many libs\",133:\"Attempting to exec a shared library\",135:\"Streams pipe error\",136:\"Too many users\",137:\"Socket type not supported\",138:\"Not supported\",139:\"Protocol family not supported\",140:\"Can't send after socket shutdown\",141:\"Too many references\",142:\"Host is down\",148:\"No medium (in tape drive)\",156:\"Level 2 not synchronized\"};\n  \n  var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};\n  var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath:function(path, opts) {\n        path = PATH_FS.resolve(FS.cwd(), path);\n        opts = opts || {};\n  \n        if (!path) return { path: '', node: null };\n  \n        var defaults = {\n          follow_mount: true,\n          recurse_count: 0\n        };\n        for (var key in defaults) {\n          if (opts[key] === undefined) {\n            opts[key] = defaults[key];\n          }\n        }\n  \n        if (opts.recurse_count > 8) {  // max recursive lookup of 8\n          throw new FS.ErrnoError(32);\n        }\n  \n        // split the path\n        var parts = PATH.normalizeArray(path.split('/').filter(function(p) {\n          return !!p;\n        }), false);\n  \n        // start at the root\n        var current = FS.root;\n        var current_path = '/';\n  \n        for (var i = 0; i < parts.length; i++) {\n          var islast = (i === parts.length-1);\n          if (islast && opts.parent) {\n            // stop resolving\n            break;\n          }\n  \n          current = FS.lookupNode(current, parts[i]);\n          current_path = PATH.join2(current_path, parts[i]);\n  \n          // jump to the mount's root node if this is a mountpoint\n          if (FS.isMountpoint(current)) {\n            if (!islast || (islast && opts.follow_mount)) {\n              current = current.mounted.root;\n            }\n          }\n  \n          // by default, lookupPath will not follow a symlink if it is the final path component.\n          // setting opts.follow = true will override this behavior.\n          if (!islast || opts.follow) {\n            var count = 0;\n            while (FS.isLink(current.mode)) {\n              var link = FS.readlink(current_path);\n              current_path = PATH_FS.resolve(PATH.dirname(current_path), link);\n  \n              var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count });\n              current = lookup.node;\n  \n              if (count++ > 40) {  // limit max consecutive symlinks to 40 (SYMLOOP_MAX).\n                throw new FS.ErrnoError(32);\n              }\n            }\n          }\n        }\n  \n        return { path: current_path, node: current };\n      },getPath:function(node) {\n        var path;\n        while (true) {\n          if (FS.isRoot(node)) {\n            var mount = node.mount.mountpoint;\n            if (!path) return mount;\n            return mount[mount.length-1] !== '/' ? mount + '/' + path : mount + path;\n          }\n          path = path ? node.name + '/' + path : node.name;\n          node = node.parent;\n        }\n      },hashName:function(parentid, name) {\n        var hash = 0;\n  \n        for (var i = 0; i < name.length; i++) {\n          hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;\n        }\n        return ((parentid + hash) >>> 0) % FS.nameTable.length;\n      },hashAddNode:function(node) {\n        var hash = FS.hashName(node.parent.id, node.name);\n        node.name_next = FS.nameTable[hash];\n        FS.nameTable[hash] = node;\n      },hashRemoveNode:function(node) {\n        var hash = FS.hashName(node.parent.id, node.name);\n        if (FS.nameTable[hash] === node) {\n          FS.nameTable[hash] = node.name_next;\n        } else {\n          var current = FS.nameTable[hash];\n          while (current) {\n            if (current.name_next === node) {\n              current.name_next = node.name_next;\n              break;\n            }\n            current = current.name_next;\n          }\n        }\n      },lookupNode:function(parent, name) {\n        var errCode = FS.mayLookup(parent);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode, parent);\n        }\n        var hash = FS.hashName(parent.id, name);\n        for (var node = FS.nameTable[hash]; node; node = node.name_next) {\n          var nodeName = node.name;\n          if (node.parent.id === parent.id && nodeName === name) {\n            return node;\n          }\n        }\n        // if we failed to find it in the cache, call into the VFS\n        return FS.lookup(parent, name);\n      },createNode:function(parent, name, mode, rdev) {\n        assert(typeof parent === 'object')\n        var node = new FS.FSNode(parent, name, mode, rdev);\n  \n        FS.hashAddNode(node);\n  \n        return node;\n      },destroyNode:function(node) {\n        FS.hashRemoveNode(node);\n      },isRoot:function(node) {\n        return node === node.parent;\n      },isMountpoint:function(node) {\n        return !!node.mounted;\n      },isFile:function(mode) {\n        return (mode & 61440) === 32768;\n      },isDir:function(mode) {\n        return (mode & 61440) === 16384;\n      },isLink:function(mode) {\n        return (mode & 61440) === 40960;\n      },isChrdev:function(mode) {\n        return (mode & 61440) === 8192;\n      },isBlkdev:function(mode) {\n        return (mode & 61440) === 24576;\n      },isFIFO:function(mode) {\n        return (mode & 61440) === 4096;\n      },isSocket:function(mode) {\n        return (mode & 49152) === 49152;\n      },flagModes:{\"r\":0,\"r+\":2,\"w\":577,\"w+\":578,\"a\":1089,\"a+\":1090},modeStringToFlags:function(str) {\n        var flags = FS.flagModes[str];\n        if (typeof flags === 'undefined') {\n          throw new Error('Unknown file open mode: ' + str);\n        }\n        return flags;\n      },flagsToPermissionString:function(flag) {\n        var perms = ['r', 'w', 'rw'][flag & 3];\n        if ((flag & 512)) {\n          perms += 'w';\n        }\n        return perms;\n      },nodePermissions:function(node, perms) {\n        if (FS.ignorePermissions) {\n          return 0;\n        }\n        // return 0 if any user, group or owner bits are set.\n        if (perms.includes('r') && !(node.mode & 292)) {\n          return 2;\n        } else if (perms.includes('w') && !(node.mode & 146)) {\n          return 2;\n        } else if (perms.includes('x') && !(node.mode & 73)) {\n          return 2;\n        }\n        return 0;\n      },mayLookup:function(dir) {\n        var errCode = FS.nodePermissions(dir, 'x');\n        if (errCode) return errCode;\n        if (!dir.node_ops.lookup) return 2;\n        return 0;\n      },mayCreate:function(dir, name) {\n        try {\n          var node = FS.lookupNode(dir, name);\n          return 20;\n        } catch (e) {\n        }\n        return FS.nodePermissions(dir, 'wx');\n      },mayDelete:function(dir, name, isdir) {\n        var node;\n        try {\n          node = FS.lookupNode(dir, name);\n        } catch (e) {\n          return e.errno;\n        }\n        var errCode = FS.nodePermissions(dir, 'wx');\n        if (errCode) {\n          return errCode;\n        }\n        if (isdir) {\n          if (!FS.isDir(node.mode)) {\n            return 54;\n          }\n          if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {\n            return 10;\n          }\n        } else {\n          if (FS.isDir(node.mode)) {\n            return 31;\n          }\n        }\n        return 0;\n      },mayOpen:function(node, flags) {\n        if (!node) {\n          return 44;\n        }\n        if (FS.isLink(node.mode)) {\n          return 32;\n        } else if (FS.isDir(node.mode)) {\n          if (FS.flagsToPermissionString(flags) !== 'r' || // opening for write\n              (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only)\n            return 31;\n          }\n        }\n        return FS.nodePermissions(node, FS.flagsToPermissionString(flags));\n      },MAX_OPEN_FDS:4096,nextfd:function(fd_start, fd_end) {\n        fd_start = fd_start || 0;\n        fd_end = fd_end || FS.MAX_OPEN_FDS;\n        for (var fd = fd_start; fd <= fd_end; fd++) {\n          if (!FS.streams[fd]) {\n            return fd;\n          }\n        }\n        throw new FS.ErrnoError(33);\n      },getStream:function(fd) {\n        return FS.streams[fd];\n      },createStream:function(stream, fd_start, fd_end) {\n        if (!FS.FSStream) {\n          FS.FSStream = /** @constructor */ function(){};\n          FS.FSStream.prototype = {\n            object: {\n              get: function() { return this.node; },\n              set: function(val) { this.node = val; }\n            },\n            isRead: {\n              get: function() { return (this.flags & 2097155) !== 1; }\n            },\n            isWrite: {\n              get: function() { return (this.flags & 2097155) !== 0; }\n            },\n            isAppend: {\n              get: function() { return (this.flags & 1024); }\n            }\n          };\n        }\n        // clone it, so we can return an instance of FSStream\n        var newStream = new FS.FSStream();\n        for (var p in stream) {\n          newStream[p] = stream[p];\n        }\n        stream = newStream;\n        var fd = FS.nextfd(fd_start, fd_end);\n        stream.fd = fd;\n        FS.streams[fd] = stream;\n        return stream;\n      },closeStream:function(fd) {\n        FS.streams[fd] = null;\n      },chrdev_stream_ops:{open:function(stream) {\n          var device = FS.getDevice(stream.node.rdev);\n          // override node's stream ops with the device's\n          stream.stream_ops = device.stream_ops;\n          // forward the open call\n          if (stream.stream_ops.open) {\n            stream.stream_ops.open(stream);\n          }\n        },llseek:function() {\n          throw new FS.ErrnoError(70);\n        }},major:function(dev) {\n        return ((dev) >> 8);\n      },minor:function(dev) {\n        return ((dev) & 0xff);\n      },makedev:function(ma, mi) {\n        return ((ma) << 8 | (mi));\n      },registerDevice:function(dev, ops) {\n        FS.devices[dev] = { stream_ops: ops };\n      },getDevice:function(dev) {\n        return FS.devices[dev];\n      },getMounts:function(mount) {\n        var mounts = [];\n        var check = [mount];\n  \n        while (check.length) {\n          var m = check.pop();\n  \n          mounts.push(m);\n  \n          check.push.apply(check, m.mounts);\n        }\n  \n        return mounts;\n      },syncfs:function(populate, callback) {\n        if (typeof(populate) === 'function') {\n          callback = populate;\n          populate = false;\n        }\n  \n        FS.syncFSRequests++;\n  \n        if (FS.syncFSRequests > 1) {\n          err('warning: ' + FS.syncFSRequests + ' FS.syncfs operations in flight at once, probably just doing extra work');\n        }\n  \n        var mounts = FS.getMounts(FS.root.mount);\n        var completed = 0;\n  \n        function doCallback(errCode) {\n          assert(FS.syncFSRequests > 0);\n          FS.syncFSRequests--;\n          return callback(errCode);\n        }\n  \n        function done(errCode) {\n          if (errCode) {\n            if (!done.errored) {\n              done.errored = true;\n              return doCallback(errCode);\n            }\n            return;\n          }\n          if (++completed >= mounts.length) {\n            doCallback(null);\n          }\n        };\n  \n        // sync all mounts\n        mounts.forEach(function (mount) {\n          if (!mount.type.syncfs) {\n            return done(null);\n          }\n          mount.type.syncfs(mount, populate, done);\n        });\n      },mount:function(type, opts, mountpoint) {\n        if (typeof type === 'string') {\n          // The filesystem was not included, and instead we have an error\n          // message stored in the variable.\n          throw type;\n        }\n        var root = mountpoint === '/';\n        var pseudo = !mountpoint;\n        var node;\n  \n        if (root && FS.root) {\n          throw new FS.ErrnoError(10);\n        } else if (!root && !pseudo) {\n          var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n  \n          mountpoint = lookup.path;  // use the absolute path\n          node = lookup.node;\n  \n          if (FS.isMountpoint(node)) {\n            throw new FS.ErrnoError(10);\n          }\n  \n          if (!FS.isDir(node.mode)) {\n            throw new FS.ErrnoError(54);\n          }\n        }\n  \n        var mount = {\n          type: type,\n          opts: opts,\n          mountpoint: mountpoint,\n          mounts: []\n        };\n  \n        // create a root node for the fs\n        var mountRoot = type.mount(mount);\n        mountRoot.mount = mount;\n        mount.root = mountRoot;\n  \n        if (root) {\n          FS.root = mountRoot;\n        } else if (node) {\n          // set as a mountpoint\n          node.mounted = mount;\n  \n          // add the new mount to the current mount's children\n          if (node.mount) {\n            node.mount.mounts.push(mount);\n          }\n        }\n  \n        return mountRoot;\n      },unmount:function (mountpoint) {\n        var lookup = FS.lookupPath(mountpoint, { follow_mount: false });\n  \n        if (!FS.isMountpoint(lookup.node)) {\n          throw new FS.ErrnoError(28);\n        }\n  \n        // destroy the nodes for this mount, and all its child mounts\n        var node = lookup.node;\n        var mount = node.mounted;\n        var mounts = FS.getMounts(mount);\n  \n        Object.keys(FS.nameTable).forEach(function (hash) {\n          var current = FS.nameTable[hash];\n  \n          while (current) {\n            var next = current.name_next;\n  \n            if (mounts.includes(current.mount)) {\n              FS.destroyNode(current);\n            }\n  \n            current = next;\n          }\n        });\n  \n        // no longer a mountpoint\n        node.mounted = null;\n  \n        // remove this mount from the child mounts\n        var idx = node.mount.mounts.indexOf(mount);\n        assert(idx !== -1);\n        node.mount.mounts.splice(idx, 1);\n      },lookup:function(parent, name) {\n        return parent.node_ops.lookup(parent, name);\n      },mknod:function(path, mode, dev) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        if (!name || name === '.' || name === '..') {\n          throw new FS.ErrnoError(28);\n        }\n        var errCode = FS.mayCreate(parent, name);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.mknod) {\n          throw new FS.ErrnoError(63);\n        }\n        return parent.node_ops.mknod(parent, name, mode, dev);\n      },create:function(path, mode) {\n        mode = mode !== undefined ? mode : 438 /* 0666 */;\n        mode &= 4095;\n        mode |= 32768;\n        return FS.mknod(path, mode, 0);\n      },mkdir:function(path, mode) {\n        mode = mode !== undefined ? mode : 511 /* 0777 */;\n        mode &= 511 | 512;\n        mode |= 16384;\n        return FS.mknod(path, mode, 0);\n      },mkdirTree:function(path, mode) {\n        var dirs = path.split('/');\n        var d = '';\n        for (var i = 0; i < dirs.length; ++i) {\n          if (!dirs[i]) continue;\n          d += '/' + dirs[i];\n          try {\n            FS.mkdir(d, mode);\n          } catch(e) {\n            if (e.errno != 20) throw e;\n          }\n        }\n      },mkdev:function(path, mode, dev) {\n        if (typeof(dev) === 'undefined') {\n          dev = mode;\n          mode = 438 /* 0666 */;\n        }\n        mode |= 8192;\n        return FS.mknod(path, mode, dev);\n      },symlink:function(oldpath, newpath) {\n        if (!PATH_FS.resolve(oldpath)) {\n          throw new FS.ErrnoError(44);\n        }\n        var lookup = FS.lookupPath(newpath, { parent: true });\n        var parent = lookup.node;\n        if (!parent) {\n          throw new FS.ErrnoError(44);\n        }\n        var newname = PATH.basename(newpath);\n        var errCode = FS.mayCreate(parent, newname);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.symlink) {\n          throw new FS.ErrnoError(63);\n        }\n        return parent.node_ops.symlink(parent, newname, oldpath);\n      },rename:function(old_path, new_path) {\n        var old_dirname = PATH.dirname(old_path);\n        var new_dirname = PATH.dirname(new_path);\n        var old_name = PATH.basename(old_path);\n        var new_name = PATH.basename(new_path);\n        // parents must exist\n        var lookup, old_dir, new_dir;\n  \n        // let the errors from non existant directories percolate up\n        lookup = FS.lookupPath(old_path, { parent: true });\n        old_dir = lookup.node;\n        lookup = FS.lookupPath(new_path, { parent: true });\n        new_dir = lookup.node;\n  \n        if (!old_dir || !new_dir) throw new FS.ErrnoError(44);\n        // need to be part of the same mount\n        if (old_dir.mount !== new_dir.mount) {\n          throw new FS.ErrnoError(75);\n        }\n        // source must exist\n        var old_node = FS.lookupNode(old_dir, old_name);\n        // old path should not be an ancestor of the new path\n        var relative = PATH_FS.relative(old_path, new_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(28);\n        }\n        // new path should not be an ancestor of the old path\n        relative = PATH_FS.relative(new_path, old_dirname);\n        if (relative.charAt(0) !== '.') {\n          throw new FS.ErrnoError(55);\n        }\n        // see if the new path already exists\n        var new_node;\n        try {\n          new_node = FS.lookupNode(new_dir, new_name);\n        } catch (e) {\n          // not fatal\n        }\n        // early out if nothing needs to change\n        if (old_node === new_node) {\n          return;\n        }\n        // we'll need to delete the old entry\n        var isdir = FS.isDir(old_node.mode);\n        var errCode = FS.mayDelete(old_dir, old_name, isdir);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        // need delete permissions if we'll be overwriting.\n        // need create permissions if new doesn't already exist.\n        errCode = new_node ?\n          FS.mayDelete(new_dir, new_name, isdir) :\n          FS.mayCreate(new_dir, new_name);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!old_dir.node_ops.rename) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {\n          throw new FS.ErrnoError(10);\n        }\n        // if we are going to change the parent, check write permissions\n        if (new_dir !== old_dir) {\n          errCode = FS.nodePermissions(old_dir, 'w');\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n        try {\n          if (FS.trackingDelegate['willMovePath']) {\n            FS.trackingDelegate['willMovePath'](old_path, new_path);\n          }\n        } catch(e) {\n          err(\"FS.trackingDelegate['willMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \" + e.message);\n        }\n        // remove the node from the lookup hash\n        FS.hashRemoveNode(old_node);\n        // do the underlying fs rename\n        try {\n          old_dir.node_ops.rename(old_node, new_dir, new_name);\n        } catch (e) {\n          throw e;\n        } finally {\n          // add the node back to the hash (in case node_ops.rename\n          // changed its name)\n          FS.hashAddNode(old_node);\n        }\n        try {\n          if (FS.trackingDelegate['onMovePath']) FS.trackingDelegate['onMovePath'](old_path, new_path);\n        } catch(e) {\n          err(\"FS.trackingDelegate['onMovePath']('\"+old_path+\"', '\"+new_path+\"') threw an exception: \" + e.message);\n        }\n      },rmdir:function(path) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        var node = FS.lookupNode(parent, name);\n        var errCode = FS.mayDelete(parent, name, true);\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.rmdir) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(node)) {\n          throw new FS.ErrnoError(10);\n        }\n        try {\n          if (FS.trackingDelegate['willDeletePath']) {\n            FS.trackingDelegate['willDeletePath'](path);\n          }\n        } catch(e) {\n          err(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \" + e.message);\n        }\n        parent.node_ops.rmdir(parent, name);\n        FS.destroyNode(node);\n        try {\n          if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path);\n        } catch(e) {\n          err(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \" + e.message);\n        }\n      },readdir:function(path) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        if (!node.node_ops.readdir) {\n          throw new FS.ErrnoError(54);\n        }\n        return node.node_ops.readdir(node);\n      },unlink:function(path) {\n        var lookup = FS.lookupPath(path, { parent: true });\n        var parent = lookup.node;\n        var name = PATH.basename(path);\n        var node = FS.lookupNode(parent, name);\n        var errCode = FS.mayDelete(parent, name, false);\n        if (errCode) {\n          // According to POSIX, we should map EISDIR to EPERM, but\n          // we instead do what Linux does (and we must, as we use\n          // the musl linux libc).\n          throw new FS.ErrnoError(errCode);\n        }\n        if (!parent.node_ops.unlink) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isMountpoint(node)) {\n          throw new FS.ErrnoError(10);\n        }\n        try {\n          if (FS.trackingDelegate['willDeletePath']) {\n            FS.trackingDelegate['willDeletePath'](path);\n          }\n        } catch(e) {\n          err(\"FS.trackingDelegate['willDeletePath']('\"+path+\"') threw an exception: \" + e.message);\n        }\n        parent.node_ops.unlink(parent, name);\n        FS.destroyNode(node);\n        try {\n          if (FS.trackingDelegate['onDeletePath']) FS.trackingDelegate['onDeletePath'](path);\n        } catch(e) {\n          err(\"FS.trackingDelegate['onDeletePath']('\"+path+\"') threw an exception: \" + e.message);\n        }\n      },readlink:function(path) {\n        var lookup = FS.lookupPath(path);\n        var link = lookup.node;\n        if (!link) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!link.node_ops.readlink) {\n          throw new FS.ErrnoError(28);\n        }\n        return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));\n      },stat:function(path, dontFollow) {\n        var lookup = FS.lookupPath(path, { follow: !dontFollow });\n        var node = lookup.node;\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!node.node_ops.getattr) {\n          throw new FS.ErrnoError(63);\n        }\n        return node.node_ops.getattr(node);\n      },lstat:function(path) {\n        return FS.stat(path, true);\n      },chmod:function(path, mode, dontFollow) {\n        var node;\n        if (typeof path === 'string') {\n          var lookup = FS.lookupPath(path, { follow: !dontFollow });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        node.node_ops.setattr(node, {\n          mode: (mode & 4095) | (node.mode & ~4095),\n          timestamp: Date.now()\n        });\n      },lchmod:function(path, mode) {\n        FS.chmod(path, mode, true);\n      },fchmod:function(fd, mode) {\n        var stream = FS.getStream(fd);\n        if (!stream) {\n          throw new FS.ErrnoError(8);\n        }\n        FS.chmod(stream.node, mode);\n      },chown:function(path, uid, gid, dontFollow) {\n        var node;\n        if (typeof path === 'string') {\n          var lookup = FS.lookupPath(path, { follow: !dontFollow });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        node.node_ops.setattr(node, {\n          timestamp: Date.now()\n          // we ignore the uid / gid for now\n        });\n      },lchown:function(path, uid, gid) {\n        FS.chown(path, uid, gid, true);\n      },fchown:function(fd, uid, gid) {\n        var stream = FS.getStream(fd);\n        if (!stream) {\n          throw new FS.ErrnoError(8);\n        }\n        FS.chown(stream.node, uid, gid);\n      },truncate:function(path, len) {\n        if (len < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        var node;\n        if (typeof path === 'string') {\n          var lookup = FS.lookupPath(path, { follow: true });\n          node = lookup.node;\n        } else {\n          node = path;\n        }\n        if (!node.node_ops.setattr) {\n          throw new FS.ErrnoError(63);\n        }\n        if (FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!FS.isFile(node.mode)) {\n          throw new FS.ErrnoError(28);\n        }\n        var errCode = FS.nodePermissions(node, 'w');\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        node.node_ops.setattr(node, {\n          size: len,\n          timestamp: Date.now()\n        });\n      },ftruncate:function(fd, len) {\n        var stream = FS.getStream(fd);\n        if (!stream) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(28);\n        }\n        FS.truncate(stream.node, len);\n      },utime:function(path, atime, mtime) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        var node = lookup.node;\n        node.node_ops.setattr(node, {\n          timestamp: Math.max(atime, mtime)\n        });\n      },open:function(path, flags, mode, fd_start, fd_end) {\n        if (path === \"\") {\n          throw new FS.ErrnoError(44);\n        }\n        flags = typeof flags === 'string' ? FS.modeStringToFlags(flags) : flags;\n        mode = typeof mode === 'undefined' ? 438 /* 0666 */ : mode;\n        if ((flags & 64)) {\n          mode = (mode & 4095) | 32768;\n        } else {\n          mode = 0;\n        }\n        var node;\n        if (typeof path === 'object') {\n          node = path;\n        } else {\n          path = PATH.normalize(path);\n          try {\n            var lookup = FS.lookupPath(path, {\n              follow: !(flags & 131072)\n            });\n            node = lookup.node;\n          } catch (e) {\n            // ignore\n          }\n        }\n        // perhaps we need to create the node\n        var created = false;\n        if ((flags & 64)) {\n          if (node) {\n            // if O_CREAT and O_EXCL are set, error out if the node already exists\n            if ((flags & 128)) {\n              throw new FS.ErrnoError(20);\n            }\n          } else {\n            // node doesn't exist, try to create it\n            node = FS.mknod(path, mode, 0);\n            created = true;\n          }\n        }\n        if (!node) {\n          throw new FS.ErrnoError(44);\n        }\n        // can't truncate a device\n        if (FS.isChrdev(node.mode)) {\n          flags &= ~512;\n        }\n        // if asked only for a directory, then this must be one\n        if ((flags & 65536) && !FS.isDir(node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n        // check permissions, if this is not a file we just created now (it is ok to\n        // create and write to a file with read-only permissions; it is read-only\n        // for later use)\n        if (!created) {\n          var errCode = FS.mayOpen(node, flags);\n          if (errCode) {\n            throw new FS.ErrnoError(errCode);\n          }\n        }\n        // do truncation if necessary\n        if ((flags & 512)) {\n          FS.truncate(node, 0);\n        }\n        // we've already handled these, don't pass down to the underlying vfs\n        flags &= ~(128 | 512 | 131072);\n  \n        // register the stream with the filesystem\n        var stream = FS.createStream({\n          node: node,\n          path: FS.getPath(node),  // we want the absolute path to the node\n          flags: flags,\n          seekable: true,\n          position: 0,\n          stream_ops: node.stream_ops,\n          // used by the file family libc calls (fopen, fwrite, ferror, etc.)\n          ungotten: [],\n          error: false\n        }, fd_start, fd_end);\n        // call the new stream's open function\n        if (stream.stream_ops.open) {\n          stream.stream_ops.open(stream);\n        }\n        if (Module['logReadFiles'] && !(flags & 1)) {\n          if (!FS.readFiles) FS.readFiles = {};\n          if (!(path in FS.readFiles)) {\n            FS.readFiles[path] = 1;\n            err(\"FS.trackingDelegate error on read file: \" + path);\n          }\n        }\n        try {\n          if (FS.trackingDelegate['onOpenFile']) {\n            var trackingFlags = 0;\n            if ((flags & 2097155) !== 1) {\n              trackingFlags |= FS.tracking.openFlags.READ;\n            }\n            if ((flags & 2097155) !== 0) {\n              trackingFlags |= FS.tracking.openFlags.WRITE;\n            }\n            FS.trackingDelegate['onOpenFile'](path, trackingFlags);\n          }\n        } catch(e) {\n          err(\"FS.trackingDelegate['onOpenFile']('\"+path+\"', flags) threw an exception: \" + e.message);\n        }\n        return stream;\n      },close:function(stream) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (stream.getdents) stream.getdents = null; // free readdir state\n        try {\n          if (stream.stream_ops.close) {\n            stream.stream_ops.close(stream);\n          }\n        } catch (e) {\n          throw e;\n        } finally {\n          FS.closeStream(stream.fd);\n        }\n        stream.fd = null;\n      },isClosed:function(stream) {\n        return stream.fd === null;\n      },llseek:function(stream, offset, whence) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (!stream.seekable || !stream.stream_ops.llseek) {\n          throw new FS.ErrnoError(70);\n        }\n        if (whence != 0 && whence != 1 && whence != 2) {\n          throw new FS.ErrnoError(28);\n        }\n        stream.position = stream.stream_ops.llseek(stream, offset, whence);\n        stream.ungotten = [];\n        return stream.position;\n      },read:function(stream, buffer, offset, length, position) {\n        if (length < 0 || position < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 1) {\n          throw new FS.ErrnoError(8);\n        }\n        if (FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!stream.stream_ops.read) {\n          throw new FS.ErrnoError(28);\n        }\n        var seeking = typeof position !== 'undefined';\n        if (!seeking) {\n          position = stream.position;\n        } else if (!stream.seekable) {\n          throw new FS.ErrnoError(70);\n        }\n        var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);\n        if (!seeking) stream.position += bytesRead;\n        return bytesRead;\n      },write:function(stream, buffer, offset, length, position, canOwn) {\n        if (length < 0 || position < 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(8);\n        }\n        if (FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(31);\n        }\n        if (!stream.stream_ops.write) {\n          throw new FS.ErrnoError(28);\n        }\n        if (stream.seekable && stream.flags & 1024) {\n          // seek to the end before writing in append mode\n          FS.llseek(stream, 0, 2);\n        }\n        var seeking = typeof position !== 'undefined';\n        if (!seeking) {\n          position = stream.position;\n        } else if (!stream.seekable) {\n          throw new FS.ErrnoError(70);\n        }\n        var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);\n        if (!seeking) stream.position += bytesWritten;\n        try {\n          if (stream.path && FS.trackingDelegate['onWriteToFile']) FS.trackingDelegate['onWriteToFile'](stream.path);\n        } catch(e) {\n          err(\"FS.trackingDelegate['onWriteToFile']('\"+stream.path+\"') threw an exception: \" + e.message);\n        }\n        return bytesWritten;\n      },allocate:function(stream, offset, length) {\n        if (FS.isClosed(stream)) {\n          throw new FS.ErrnoError(8);\n        }\n        if (offset < 0 || length <= 0) {\n          throw new FS.ErrnoError(28);\n        }\n        if ((stream.flags & 2097155) === 0) {\n          throw new FS.ErrnoError(8);\n        }\n        if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {\n          throw new FS.ErrnoError(43);\n        }\n        if (!stream.stream_ops.allocate) {\n          throw new FS.ErrnoError(138);\n        }\n        stream.stream_ops.allocate(stream, offset, length);\n      },mmap:function(stream, address, length, position, prot, flags) {\n        // User requests writing to file (prot & PROT_WRITE != 0).\n        // Checking if we have permissions to write to the file unless\n        // MAP_PRIVATE flag is set. According to POSIX spec it is possible\n        // to write to file opened in read-only mode with MAP_PRIVATE flag,\n        // as all modifications will be visible only in the memory of\n        // the current process.\n        if ((prot & 2) !== 0\n            && (flags & 2) === 0\n            && (stream.flags & 2097155) !== 2) {\n          throw new FS.ErrnoError(2);\n        }\n        if ((stream.flags & 2097155) === 1) {\n          throw new FS.ErrnoError(2);\n        }\n        if (!stream.stream_ops.mmap) {\n          throw new FS.ErrnoError(43);\n        }\n        return stream.stream_ops.mmap(stream, address, length, position, prot, flags);\n      },msync:function(stream, buffer, offset, length, mmapFlags) {\n        if (!stream || !stream.stream_ops.msync) {\n          return 0;\n        }\n        return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);\n      },munmap:function(stream) {\n        return 0;\n      },ioctl:function(stream, cmd, arg) {\n        if (!stream.stream_ops.ioctl) {\n          throw new FS.ErrnoError(59);\n        }\n        return stream.stream_ops.ioctl(stream, cmd, arg);\n      },readFile:function(path, opts) {\n        opts = opts || {};\n        opts.flags = opts.flags || 0;\n        opts.encoding = opts.encoding || 'binary';\n        if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {\n          throw new Error('Invalid encoding type \"' + opts.encoding + '\"');\n        }\n        var ret;\n        var stream = FS.open(path, opts.flags);\n        var stat = FS.stat(path);\n        var length = stat.size;\n        var buf = new Uint8Array(length);\n        FS.read(stream, buf, 0, length, 0);\n        if (opts.encoding === 'utf8') {\n          ret = UTF8ArrayToString(buf, 0);\n        } else if (opts.encoding === 'binary') {\n          ret = buf;\n        }\n        FS.close(stream);\n        return ret;\n      },writeFile:function(path, data, opts) {\n        opts = opts || {};\n        opts.flags = opts.flags || 577;\n        var stream = FS.open(path, opts.flags, opts.mode);\n        if (typeof data === 'string') {\n          var buf = new Uint8Array(lengthBytesUTF8(data)+1);\n          var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);\n          FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);\n        } else if (ArrayBuffer.isView(data)) {\n          FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);\n        } else {\n          throw new Error('Unsupported data type');\n        }\n        FS.close(stream);\n      },cwd:function() {\n        return FS.currentPath;\n      },chdir:function(path) {\n        var lookup = FS.lookupPath(path, { follow: true });\n        if (lookup.node === null) {\n          throw new FS.ErrnoError(44);\n        }\n        if (!FS.isDir(lookup.node.mode)) {\n          throw new FS.ErrnoError(54);\n        }\n        var errCode = FS.nodePermissions(lookup.node, 'x');\n        if (errCode) {\n          throw new FS.ErrnoError(errCode);\n        }\n        FS.currentPath = lookup.path;\n      },createDefaultDirectories:function() {\n        FS.mkdir('/tmp');\n        FS.mkdir('/home');\n        FS.mkdir('/home/web_user');\n      },createDefaultDevices:function() {\n        // create /dev\n        FS.mkdir('/dev');\n        // setup /dev/null\n        FS.registerDevice(FS.makedev(1, 3), {\n          read: function() { return 0; },\n          write: function(stream, buffer, offset, length, pos) { return length; }\n        });\n        FS.mkdev('/dev/null', FS.makedev(1, 3));\n        // setup /dev/tty and /dev/tty1\n        // stderr needs to print output using err() rather than out()\n        // so we register a second tty just for it.\n        TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);\n        TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);\n        FS.mkdev('/dev/tty', FS.makedev(5, 0));\n        FS.mkdev('/dev/tty1', FS.makedev(6, 0));\n        // setup /dev/[u]random\n        var random_device = getRandomDevice();\n        FS.createDevice('/dev', 'random', random_device);\n        FS.createDevice('/dev', 'urandom', random_device);\n        // we're not going to emulate the actual shm device,\n        // just create the tmp dirs that reside in it commonly\n        FS.mkdir('/dev/shm');\n        FS.mkdir('/dev/shm/tmp');\n      },createSpecialDirectories:function() {\n        // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the\n        // name of the stream for fd 6 (see test_unistd_ttyname)\n        FS.mkdir('/proc');\n        var proc_self = FS.mkdir('/proc/self');\n        FS.mkdir('/proc/self/fd');\n        FS.mount({\n          mount: function() {\n            var node = FS.createNode(proc_self, 'fd', 16384 | 511 /* 0777 */, 73);\n            node.node_ops = {\n              lookup: function(parent, name) {\n                var fd = +name;\n                var stream = FS.getStream(fd);\n                if (!stream) throw new FS.ErrnoError(8);\n                var ret = {\n                  parent: null,\n                  mount: { mountpoint: 'fake' },\n                  node_ops: { readlink: function() { return stream.path } }\n                };\n                ret.parent = ret; // make it look like a simple root node\n                return ret;\n              }\n            };\n            return node;\n          }\n        }, {}, '/proc/self/fd');\n      },createStandardStreams:function() {\n        // TODO deprecate the old functionality of a single\n        // input / output callback and that utilizes FS.createDevice\n        // and instead require a unique set of stream ops\n  \n        // by default, we symlink the standard streams to the\n        // default tty devices. however, if the standard streams\n        // have been overwritten we create a unique device for\n        // them instead.\n        if (Module['stdin']) {\n          FS.createDevice('/dev', 'stdin', Module['stdin']);\n        } else {\n          FS.symlink('/dev/tty', '/dev/stdin');\n        }\n        if (Module['stdout']) {\n          FS.createDevice('/dev', 'stdout', null, Module['stdout']);\n        } else {\n          FS.symlink('/dev/tty', '/dev/stdout');\n        }\n        if (Module['stderr']) {\n          FS.createDevice('/dev', 'stderr', null, Module['stderr']);\n        } else {\n          FS.symlink('/dev/tty1', '/dev/stderr');\n        }\n  \n        // open default streams for the stdin, stdout and stderr devices\n        var stdin = FS.open('/dev/stdin', 0);\n        var stdout = FS.open('/dev/stdout', 1);\n        var stderr = FS.open('/dev/stderr', 1);\n        assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');\n        assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');\n        assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');\n      },ensureErrnoError:function() {\n        if (FS.ErrnoError) return;\n        FS.ErrnoError = /** @this{Object} */ function ErrnoError(errno, node) {\n          this.node = node;\n          this.setErrno = /** @this{Object} */ function(errno) {\n            this.errno = errno;\n            for (var key in ERRNO_CODES) {\n              if (ERRNO_CODES[key] === errno) {\n                this.code = key;\n                break;\n              }\n            }\n          };\n          this.setErrno(errno);\n          this.message = ERRNO_MESSAGES[errno];\n  \n          // Try to get a maximally helpful stack trace. On Node.js, getting Error.stack\n          // now ensures it shows what we want.\n          if (this.stack) {\n            // Define the stack property for Node.js 4, which otherwise errors on the next line.\n            Object.defineProperty(this, \"stack\", { value: (new Error).stack, writable: true });\n            this.stack = demangleAll(this.stack);\n          }\n        };\n        FS.ErrnoError.prototype = new Error();\n        FS.ErrnoError.prototype.constructor = FS.ErrnoError;\n        // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)\n        [44].forEach(function(code) {\n          FS.genericErrors[code] = new FS.ErrnoError(code);\n          FS.genericErrors[code].stack = '<generic error, no stack>';\n        });\n      },staticInit:function() {\n        FS.ensureErrnoError();\n  \n        FS.nameTable = new Array(4096);\n  \n        FS.mount(MEMFS, {}, '/');\n  \n        FS.createDefaultDirectories();\n        FS.createDefaultDevices();\n        FS.createSpecialDirectories();\n  \n        FS.filesystems = {\n          'MEMFS': MEMFS,\n        };\n      },init:function(input, output, error) {\n        assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');\n        FS.init.initialized = true;\n  \n        FS.ensureErrnoError();\n  \n        // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here\n        Module['stdin'] = input || Module['stdin'];\n        Module['stdout'] = output || Module['stdout'];\n        Module['stderr'] = error || Module['stderr'];\n  \n        FS.createStandardStreams();\n      },quit:function() {\n        FS.init.initialized = false;\n        // force-flush all streams, so we get musl std streams printed out\n        var fflush = Module['_fflush'];\n        if (fflush) fflush(0);\n        // close all of our streams\n        for (var i = 0; i < FS.streams.length; i++) {\n          var stream = FS.streams[i];\n          if (!stream) {\n            continue;\n          }\n          FS.close(stream);\n        }\n      },getMode:function(canRead, canWrite) {\n        var mode = 0;\n        if (canRead) mode |= 292 | 73;\n        if (canWrite) mode |= 146;\n        return mode;\n      },findObject:function(path, dontResolveLastLink) {\n        var ret = FS.analyzePath(path, dontResolveLastLink);\n        if (ret.exists) {\n          return ret.object;\n        } else {\n          return null;\n        }\n      },analyzePath:function(path, dontResolveLastLink) {\n        // operate from within the context of the symlink's target\n        try {\n          var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n          path = lookup.path;\n        } catch (e) {\n        }\n        var ret = {\n          isRoot: false, exists: false, error: 0, name: null, path: null, object: null,\n          parentExists: false, parentPath: null, parentObject: null\n        };\n        try {\n          var lookup = FS.lookupPath(path, { parent: true });\n          ret.parentExists = true;\n          ret.parentPath = lookup.path;\n          ret.parentObject = lookup.node;\n          ret.name = PATH.basename(path);\n          lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });\n          ret.exists = true;\n          ret.path = lookup.path;\n          ret.object = lookup.node;\n          ret.name = lookup.node.name;\n          ret.isRoot = lookup.path === '/';\n        } catch (e) {\n          ret.error = e.errno;\n        };\n        return ret;\n      },createPath:function(parent, path, canRead, canWrite) {\n        parent = typeof parent === 'string' ? parent : FS.getPath(parent);\n        var parts = path.split('/').reverse();\n        while (parts.length) {\n          var part = parts.pop();\n          if (!part) continue;\n          var current = PATH.join2(parent, part);\n          try {\n            FS.mkdir(current);\n          } catch (e) {\n            // ignore EEXIST\n          }\n          parent = current;\n        }\n        return current;\n      },createFile:function(parent, name, properties, canRead, canWrite) {\n        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);\n        var mode = FS.getMode(canRead, canWrite);\n        return FS.create(path, mode);\n      },createDataFile:function(parent, name, data, canRead, canWrite, canOwn) {\n        var path = name ? PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name) : parent;\n        var mode = FS.getMode(canRead, canWrite);\n        var node = FS.create(path, mode);\n        if (data) {\n          if (typeof data === 'string') {\n            var arr = new Array(data.length);\n            for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);\n            data = arr;\n          }\n          // make sure we can write to the file\n          FS.chmod(node, mode | 146);\n          var stream = FS.open(node, 577);\n          FS.write(stream, data, 0, data.length, 0, canOwn);\n          FS.close(stream);\n          FS.chmod(node, mode);\n        }\n        return node;\n      },createDevice:function(parent, name, input, output) {\n        var path = PATH.join2(typeof parent === 'string' ? parent : FS.getPath(parent), name);\n        var mode = FS.getMode(!!input, !!output);\n        if (!FS.createDevice.major) FS.createDevice.major = 64;\n        var dev = FS.makedev(FS.createDevice.major++, 0);\n        // Create a fake device that a set of stream ops to emulate\n        // the old behavior.\n        FS.registerDevice(dev, {\n          open: function(stream) {\n            stream.seekable = false;\n          },\n          close: function(stream) {\n            // flush any pending line data\n            if (output && output.buffer && output.buffer.length) {\n              output(10);\n            }\n          },\n          read: function(stream, buffer, offset, length, pos /* ignored */) {\n            var bytesRead = 0;\n            for (var i = 0; i < length; i++) {\n              var result;\n              try {\n                result = input();\n              } catch (e) {\n                throw new FS.ErrnoError(29);\n              }\n              if (result === undefined && bytesRead === 0) {\n                throw new FS.ErrnoError(6);\n              }\n              if (result === null || result === undefined) break;\n              bytesRead++;\n              buffer[offset+i] = result;\n            }\n            if (bytesRead) {\n              stream.node.timestamp = Date.now();\n            }\n            return bytesRead;\n          },\n          write: function(stream, buffer, offset, length, pos) {\n            for (var i = 0; i < length; i++) {\n              try {\n                output(buffer[offset+i]);\n              } catch (e) {\n                throw new FS.ErrnoError(29);\n              }\n            }\n            if (length) {\n              stream.node.timestamp = Date.now();\n            }\n            return i;\n          }\n        });\n        return FS.mkdev(path, mode, dev);\n      },forceLoadFile:function(obj) {\n        if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;\n        if (typeof XMLHttpRequest !== 'undefined') {\n          throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");\n        } else if (read_) {\n          // Command-line.\n          try {\n            // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as\n            //          read() will try to parse UTF8.\n            obj.contents = intArrayFromString(read_(obj.url), true);\n            obj.usedBytes = obj.contents.length;\n          } catch (e) {\n            throw new FS.ErrnoError(29);\n          }\n        } else {\n          throw new Error('Cannot load without read() or XMLHttpRequest.');\n        }\n      },createLazyFile:function(parent, name, url, canRead, canWrite) {\n        // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.\n        /** @constructor */\n        function LazyUint8Array() {\n          this.lengthKnown = false;\n          this.chunks = []; // Loaded chunks. Index is the chunk number\n        }\n        LazyUint8Array.prototype.get = /** @this{Object} */ function LazyUint8Array_get(idx) {\n          if (idx > this.length-1 || idx < 0) {\n            return undefined;\n          }\n          var chunkOffset = idx % this.chunkSize;\n          var chunkNum = (idx / this.chunkSize)|0;\n          return this.getter(chunkNum)[chunkOffset];\n        };\n        LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {\n          this.getter = getter;\n        };\n        LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {\n          // Find length\n          var xhr = new XMLHttpRequest();\n          xhr.open('HEAD', url, false);\n          xhr.send(null);\n          if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error(\"Couldn't load \" + url + \". Status: \" + xhr.status);\n          var datalength = Number(xhr.getResponseHeader(\"Content-length\"));\n          var header;\n          var hasByteServing = (header = xhr.getResponseHeader(\"Accept-Ranges\")) && header === \"bytes\";\n          var usesGzip = (header = xhr.getResponseHeader(\"Content-Encoding\")) && header === \"gzip\";\n  \n          var chunkSize = 1024*1024; // Chunk size in bytes\n  \n          if (!hasByteServing) chunkSize = datalength;\n  \n          // Function to get a range from the remote URL.\n          var doXHR = (function(from, to) {\n            if (from > to) throw new Error(\"invalid range (\" + from + \", \" + to + \") or no bytes requested!\");\n            if (to > datalength-1) throw new Error(\"only \" + datalength + \" bytes available! programmer error!\");\n  \n            // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.\n            var xhr = new XMLHttpRequest();\n            xhr.open('GET', url, false);\n            if (datalength !== chunkSize) xhr.setRequestHeader(\"Range\", \"bytes=\" + from + \"-\" + to);\n  \n            // Some hints to the browser that we want binary data.\n            if (typeof Uint8Array != 'undefined') xhr.responseType = 'arraybuffer';\n            if (xhr.overrideMimeType) {\n              xhr.overrideMimeType('text/plain; charset=x-user-defined');\n            }\n  \n            xhr.send(null);\n            if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error(\"Couldn't load \" + url + \". Status: \" + xhr.status);\n            if (xhr.response !== undefined) {\n              return new Uint8Array(/** @type{Array<number>} */(xhr.response || []));\n            } else {\n              return intArrayFromString(xhr.responseText || '', true);\n            }\n          });\n          var lazyArray = this;\n          lazyArray.setDataGetter(function(chunkNum) {\n            var start = chunkNum * chunkSize;\n            var end = (chunkNum+1) * chunkSize - 1; // including this byte\n            end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block\n            if (typeof(lazyArray.chunks[chunkNum]) === \"undefined\") {\n              lazyArray.chunks[chunkNum] = doXHR(start, end);\n            }\n            if (typeof(lazyArray.chunks[chunkNum]) === \"undefined\") throw new Error(\"doXHR failed!\");\n            return lazyArray.chunks[chunkNum];\n          });\n  \n          if (usesGzip || !datalength) {\n            // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length\n            chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file\n            datalength = this.getter(0).length;\n            chunkSize = datalength;\n            out(\"LazyFiles on gzip forces download of the whole file when length is accessed\");\n          }\n  \n          this._length = datalength;\n          this._chunkSize = chunkSize;\n          this.lengthKnown = true;\n        };\n        if (typeof XMLHttpRequest !== 'undefined') {\n          if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc';\n          var lazyArray = new LazyUint8Array();\n          Object.defineProperties(lazyArray, {\n            length: {\n              get: /** @this{Object} */ function() {\n                if (!this.lengthKnown) {\n                  this.cacheLength();\n                }\n                return this._length;\n              }\n            },\n            chunkSize: {\n              get: /** @this{Object} */ function() {\n                if (!this.lengthKnown) {\n                  this.cacheLength();\n                }\n                return this._chunkSize;\n              }\n            }\n          });\n  \n          var properties = { isDevice: false, contents: lazyArray };\n        } else {\n          var properties = { isDevice: false, url: url };\n        }\n  \n        var node = FS.createFile(parent, name, properties, canRead, canWrite);\n        // This is a total hack, but I want to get this lazy file code out of the\n        // core of MEMFS. If we want to keep this lazy file concept I feel it should\n        // be its own thin LAZYFS proxying calls to MEMFS.\n        if (properties.contents) {\n          node.contents = properties.contents;\n        } else if (properties.url) {\n          node.contents = null;\n          node.url = properties.url;\n        }\n        // Add a function that defers querying the file size until it is asked the first time.\n        Object.defineProperties(node, {\n          usedBytes: {\n            get: /** @this {FSNode} */ function() { return this.contents.length; }\n          }\n        });\n        // override each stream op with one that tries to force load the lazy file first\n        var stream_ops = {};\n        var keys = Object.keys(node.stream_ops);\n        keys.forEach(function(key) {\n          var fn = node.stream_ops[key];\n          stream_ops[key] = function forceLoadLazyFile() {\n            FS.forceLoadFile(node);\n            return fn.apply(null, arguments);\n          };\n        });\n        // use a custom read function\n        stream_ops.read = function stream_ops_read(stream, buffer, offset, length, position) {\n          FS.forceLoadFile(node);\n          var contents = stream.node.contents;\n          if (position >= contents.length)\n            return 0;\n          var size = Math.min(contents.length - position, length);\n          assert(size >= 0);\n          if (contents.slice) { // normal array\n            for (var i = 0; i < size; i++) {\n              buffer[offset + i] = contents[position + i];\n            }\n          } else {\n            for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR\n              buffer[offset + i] = contents.get(position + i);\n            }\n          }\n          return size;\n        };\n        node.stream_ops = stream_ops;\n        return node;\n      },createPreloadedFile:function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) {\n        Browser.init(); // XXX perhaps this method should move onto Browser?\n        // TODO we should allow people to just pass in a complete filename instead\n        // of parent and name being that we just join them anyways\n        var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;\n        var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname\n        function processData(byteArray) {\n          function finish(byteArray) {\n            if (preFinish) preFinish();\n            if (!dontCreateFile) {\n              FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);\n            }\n            if (onload) onload();\n            removeRunDependency(dep);\n          }\n          var handled = false;\n          Module['preloadPlugins'].forEach(function(plugin) {\n            if (handled) return;\n            if (plugin['canHandle'](fullname)) {\n              plugin['handle'](byteArray, fullname, finish, function() {\n                if (onerror) onerror();\n                removeRunDependency(dep);\n              });\n              handled = true;\n            }\n          });\n          if (!handled) finish(byteArray);\n        }\n        addRunDependency(dep);\n        if (typeof url == 'string') {\n          Browser.asyncLoad(url, function(byteArray) {\n            processData(byteArray);\n          }, onerror);\n        } else {\n          processData(url);\n        }\n      },indexedDB:function() {\n        return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;\n      },DB_NAME:function() {\n        return 'EM_FS_' + window.location.pathname;\n      },DB_VERSION:20,DB_STORE_NAME:\"FILE_DATA\",saveFilesToDB:function(paths, onload, onerror) {\n        onload = onload || function(){};\n        onerror = onerror || function(){};\n        var indexedDB = FS.indexedDB();\n        try {\n          var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);\n        } catch (e) {\n          return onerror(e);\n        }\n        openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {\n          out('creating db');\n          var db = openRequest.result;\n          db.createObjectStore(FS.DB_STORE_NAME);\n        };\n        openRequest.onsuccess = function openRequest_onsuccess() {\n          var db = openRequest.result;\n          var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');\n          var files = transaction.objectStore(FS.DB_STORE_NAME);\n          var ok = 0, fail = 0, total = paths.length;\n          function finish() {\n            if (fail == 0) onload(); else onerror();\n          }\n          paths.forEach(function(path) {\n            var putRequest = files.put(FS.analyzePath(path).object.contents, path);\n            putRequest.onsuccess = function putRequest_onsuccess() { ok++; if (ok + fail == total) finish() };\n            putRequest.onerror = function putRequest_onerror() { fail++; if (ok + fail == total) finish() };\n          });\n          transaction.onerror = onerror;\n        };\n        openRequest.onerror = onerror;\n      },loadFilesFromDB:function(paths, onload, onerror) {\n        onload = onload || function(){};\n        onerror = onerror || function(){};\n        var indexedDB = FS.indexedDB();\n        try {\n          var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);\n        } catch (e) {\n          return onerror(e);\n        }\n        openRequest.onupgradeneeded = onerror; // no database to load from\n        openRequest.onsuccess = function openRequest_onsuccess() {\n          var db = openRequest.result;\n          try {\n            var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');\n          } catch(e) {\n            onerror(e);\n            return;\n          }\n          var files = transaction.objectStore(FS.DB_STORE_NAME);\n          var ok = 0, fail = 0, total = paths.length;\n          function finish() {\n            if (fail == 0) onload(); else onerror();\n          }\n          paths.forEach(function(path) {\n            var getRequest = files.get(path);\n            getRequest.onsuccess = function getRequest_onsuccess() {\n              if (FS.analyzePath(path).exists) {\n                FS.unlink(path);\n              }\n              FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);\n              ok++;\n              if (ok + fail == total) finish();\n            };\n            getRequest.onerror = function getRequest_onerror() { fail++; if (ok + fail == total) finish() };\n          });\n          transaction.onerror = onerror;\n        };\n        openRequest.onerror = onerror;\n      },absolutePath:function() {\n        abort('FS.absolutePath has been removed; use PATH_FS.resolve instead');\n      },createFolder:function() {\n        abort('FS.createFolder has been removed; use FS.mkdir instead');\n      },createLink:function() {\n        abort('FS.createLink has been removed; use FS.symlink instead');\n      },joinPath:function() {\n        abort('FS.joinPath has been removed; use PATH.join instead');\n      },mmapAlloc:function() {\n        abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc');\n      },standardizePath:function() {\n        abort('FS.standardizePath has been removed; use PATH.normalize instead');\n      }};\n  var SYSCALLS={mappings:{},DEFAULT_POLLMASK:5,umask:511,calculateAt:function(dirfd, path, allowEmpty) {\n        if (path[0] === '/') {\n          return path;\n        }\n        // relative path\n        var dir;\n        if (dirfd === -100) {\n          dir = FS.cwd();\n        } else {\n          var dirstream = FS.getStream(dirfd);\n          if (!dirstream) throw new FS.ErrnoError(8);\n          dir = dirstream.path;\n        }\n        if (path.length == 0) {\n          if (!allowEmpty) {\n            throw new FS.ErrnoError(44);;\n          }\n          return dir;\n        }\n        return PATH.join2(dir, path);\n      },doStat:function(func, path, buf) {\n        try {\n          var stat = func(path);\n        } catch (e) {\n          if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) {\n            // an error occurred while trying to look up the path; we should just report ENOTDIR\n            return -54;\n          }\n          throw e;\n        }\n        HEAP32[((buf)>>2)] = stat.dev;\n        HEAP32[(((buf)+(4))>>2)] = 0;\n        HEAP32[(((buf)+(8))>>2)] = stat.ino;\n        HEAP32[(((buf)+(12))>>2)] = stat.mode;\n        HEAP32[(((buf)+(16))>>2)] = stat.nlink;\n        HEAP32[(((buf)+(20))>>2)] = stat.uid;\n        HEAP32[(((buf)+(24))>>2)] = stat.gid;\n        HEAP32[(((buf)+(28))>>2)] = stat.rdev;\n        HEAP32[(((buf)+(32))>>2)] = 0;\n        (tempI64 = [stat.size>>>0,(tempDouble=stat.size,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(40))>>2)] = tempI64[0],HEAP32[(((buf)+(44))>>2)] = tempI64[1]);\n        HEAP32[(((buf)+(48))>>2)] = 4096;\n        HEAP32[(((buf)+(52))>>2)] = stat.blocks;\n        HEAP32[(((buf)+(56))>>2)] = (stat.atime.getTime() / 1000)|0;\n        HEAP32[(((buf)+(60))>>2)] = 0;\n        HEAP32[(((buf)+(64))>>2)] = (stat.mtime.getTime() / 1000)|0;\n        HEAP32[(((buf)+(68))>>2)] = 0;\n        HEAP32[(((buf)+(72))>>2)] = (stat.ctime.getTime() / 1000)|0;\n        HEAP32[(((buf)+(76))>>2)] = 0;\n        (tempI64 = [stat.ino>>>0,(tempDouble=stat.ino,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(80))>>2)] = tempI64[0],HEAP32[(((buf)+(84))>>2)] = tempI64[1]);\n        return 0;\n      },doMsync:function(addr, stream, len, flags, offset) {\n        var buffer = HEAPU8.slice(addr, addr + len);\n        FS.msync(stream, buffer, offset, len, flags);\n      },doMkdir:function(path, mode) {\n        // remove a trailing slash, if one - /a/b/ has basename of '', but\n        // we want to create b in the context of this function\n        path = PATH.normalize(path);\n        if (path[path.length-1] === '/') path = path.substr(0, path.length-1);\n        FS.mkdir(path, mode, 0);\n        return 0;\n      },doMknod:function(path, mode, dev) {\n        // we don't want this in the JS API as it uses mknod to create all nodes.\n        switch (mode & 61440) {\n          case 32768:\n          case 8192:\n          case 24576:\n          case 4096:\n          case 49152:\n            break;\n          default: return -28;\n        }\n        FS.mknod(path, mode, dev);\n        return 0;\n      },doReadlink:function(path, buf, bufsize) {\n        if (bufsize <= 0) return -28;\n        var ret = FS.readlink(path);\n  \n        var len = Math.min(bufsize, lengthBytesUTF8(ret));\n        var endChar = HEAP8[buf+len];\n        stringToUTF8(ret, buf, bufsize+1);\n        // readlink is one of the rare functions that write out a C string, but does never append a null to the output buffer(!)\n        // stringToUTF8() always appends a null byte, so restore the character under the null byte after the write.\n        HEAP8[buf+len] = endChar;\n  \n        return len;\n      },doAccess:function(path, amode) {\n        if (amode & ~7) {\n          // need a valid mode\n          return -28;\n        }\n        var node;\n        var lookup = FS.lookupPath(path, { follow: true });\n        node = lookup.node;\n        if (!node) {\n          return -44;\n        }\n        var perms = '';\n        if (amode & 4) perms += 'r';\n        if (amode & 2) perms += 'w';\n        if (amode & 1) perms += 'x';\n        if (perms /* otherwise, they've just passed F_OK */ && FS.nodePermissions(node, perms)) {\n          return -2;\n        }\n        return 0;\n      },doDup:function(path, flags, suggestFD) {\n        var suggest = FS.getStream(suggestFD);\n        if (suggest) FS.close(suggest);\n        return FS.open(path, flags, 0, suggestFD, suggestFD).fd;\n      },doReadv:function(stream, iov, iovcnt, offset) {\n        var ret = 0;\n        for (var i = 0; i < iovcnt; i++) {\n          var ptr = HEAP32[(((iov)+(i*8))>>2)];\n          var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\n          var curr = FS.read(stream, HEAP8,ptr, len, offset);\n          if (curr < 0) return -1;\n          ret += curr;\n          if (curr < len) break; // nothing more to read\n        }\n        return ret;\n      },doWritev:function(stream, iov, iovcnt, offset) {\n        var ret = 0;\n        for (var i = 0; i < iovcnt; i++) {\n          var ptr = HEAP32[(((iov)+(i*8))>>2)];\n          var len = HEAP32[(((iov)+(i*8 + 4))>>2)];\n          var curr = FS.write(stream, HEAP8,ptr, len, offset);\n          if (curr < 0) return -1;\n          ret += curr;\n        }\n        return ret;\n      },varargs:undefined,get:function() {\n        assert(SYSCALLS.varargs != undefined);\n        SYSCALLS.varargs += 4;\n        var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];\n        return ret;\n      },getStr:function(ptr) {\n        var ret = UTF8ToString(ptr);\n        return ret;\n      },getStreamFromFD:function(fd) {\n        var stream = FS.getStream(fd);\n        if (!stream) throw new FS.ErrnoError(8);\n        return stream;\n      },get64:function(low, high) {\n        if (low >= 0) assert(high === 0);\n        else assert(high === -1);\n        return low;\n      }};\n  function ___sys_access(path, amode) {try {\n  \n      path = SYSCALLS.getStr(path);\n      return SYSCALLS.doAccess(path, amode);\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_chmod(path, mode) {try {\n  \n      path = SYSCALLS.getStr(path);\n      FS.chmod(path, mode);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_chown32(path, owner, group) {try {\n  \n      path = SYSCALLS.getStr(path);\n      FS.chown(path, owner, group);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_fchmod(fd, mode) {try {\n  \n      FS.fchmod(fd, mode);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_fchown32(fd, owner, group) {try {\n  \n      FS.fchown(fd, owner, group);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function setErrNo(value) {\n      HEAP32[((___errno_location())>>2)] = value;\n      return value;\n    }\n  function ___sys_fcntl64(fd, cmd, varargs) {SYSCALLS.varargs = varargs;\n  try {\n  \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      switch (cmd) {\n        case 0: {\n          var arg = SYSCALLS.get();\n          if (arg < 0) {\n            return -28;\n          }\n          var newStream;\n          newStream = FS.open(stream.path, stream.flags, 0, arg);\n          return newStream.fd;\n        }\n        case 1:\n        case 2:\n          return 0;  // FD_CLOEXEC makes no sense for a single process.\n        case 3:\n          return stream.flags;\n        case 4: {\n          var arg = SYSCALLS.get();\n          stream.flags |= arg;\n          return 0;\n        }\n        case 12:\n        /* case 12: Currently in musl F_GETLK64 has same value as F_GETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ {\n          \n          var arg = SYSCALLS.get();\n          var offset = 0;\n          // We're always unlocked.\n          HEAP16[(((arg)+(offset))>>1)] = 2;\n          return 0;\n        }\n        case 13:\n        case 14:\n        /* case 13: Currently in musl F_SETLK64 has same value as F_SETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */\n        /* case 14: Currently in musl F_SETLKW64 has same value as F_SETLKW, so omitted to avoid duplicate case blocks. If that changes, uncomment this */\n          \n          \n          return 0; // Pretend that the locking is successful.\n        case 16:\n        case 8:\n          return -28; // These are for sockets. We don't have them fully implemented yet.\n        case 9:\n          // musl trusts getown return values, due to a bug where they must be, as they overlap with errors. just return -1 here, so fnctl() returns that, and we set errno ourselves.\n          setErrNo(28);\n          return -1;\n        default: {\n          return -28;\n        }\n      }\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_fstat64(fd, buf) {try {\n  \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      return SYSCALLS.doStat(FS.stat, stream.path, buf);\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_ftruncate64(fd, zero, low, high) {try {\n  \n      var length = SYSCALLS.get64(low, high);\n      FS.ftruncate(fd, length);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_getcwd(buf, size) {try {\n  \n      if (size === 0) return -28;\n      var cwd = FS.cwd();\n      var cwdLengthInBytes = lengthBytesUTF8(cwd);\n      if (size < cwdLengthInBytes + 1) return -68;\n      stringToUTF8(cwd, buf, size);\n      return buf;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_getegid32() {\n      return 0;\n    }\n  function ___sys_geteuid32(\n  ) {\n  return ___sys_getegid32();\n  }\n\n  function ___sys_getpid() {\n      return 42;\n    }\n\n  function ___sys_ioctl(fd, op, varargs) {SYSCALLS.varargs = varargs;\n  try {\n  \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      switch (op) {\n        case 21509:\n        case 21505: {\n          if (!stream.tty) return -59;\n          return 0;\n        }\n        case 21510:\n        case 21511:\n        case 21512:\n        case 21506:\n        case 21507:\n        case 21508: {\n          if (!stream.tty) return -59;\n          return 0; // no-op, not actually adjusting terminal settings\n        }\n        case 21519: {\n          if (!stream.tty) return -59;\n          var argp = SYSCALLS.get();\n          HEAP32[((argp)>>2)] = 0;\n          return 0;\n        }\n        case 21520: {\n          if (!stream.tty) return -59;\n          return -28; // not supported\n        }\n        case 21531: {\n          var argp = SYSCALLS.get();\n          return FS.ioctl(stream, op, argp);\n        }\n        case 21523: {\n          // TODO: in theory we should write to the winsize struct that gets\n          // passed in, but for now musl doesn't read anything on it\n          if (!stream.tty) return -59;\n          return 0;\n        }\n        case 21524: {\n          // TODO: technically, this ioctl call should change the window size.\n          // but, since emscripten doesn't have any concept of a terminal window\n          // yet, we'll just silently throw it away as we do TIOCGWINSZ\n          if (!stream.tty) return -59;\n          return 0;\n        }\n        default: abort('bad ioctl syscall ' + op);\n      }\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_lstat64(path, buf) {try {\n  \n      path = SYSCALLS.getStr(path);\n      return SYSCALLS.doStat(FS.lstat, path, buf);\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_mkdir(path, mode) {try {\n  \n      path = SYSCALLS.getStr(path);\n      return SYSCALLS.doMkdir(path, mode);\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function syscallMmap2(addr, len, prot, flags, fd, off) {\n      off <<= 12; // undo pgoffset\n      var ptr;\n      var allocated = false;\n  \n      // addr argument must be page aligned if MAP_FIXED flag is set.\n      if ((flags & 16) !== 0 && (addr % 16384) !== 0) {\n        return -28;\n      }\n  \n      // MAP_ANONYMOUS (aka MAP_ANON) isn't actually defined by POSIX spec,\n      // but it is widely used way to allocate memory pages on Linux, BSD and Mac.\n      // In this case fd argument is ignored.\n      if ((flags & 32) !== 0) {\n        ptr = _memalign(16384, len);\n        if (!ptr) return -48;\n        _memset(ptr, 0, len);\n        allocated = true;\n      } else {\n        var info = FS.getStream(fd);\n        if (!info) return -8;\n        var res = FS.mmap(info, addr, len, off, prot, flags);\n        ptr = res.ptr;\n        allocated = res.allocated;\n      }\n      SYSCALLS.mappings[ptr] = { malloc: ptr, len: len, allocated: allocated, fd: fd, prot: prot, flags: flags, offset: off };\n      return ptr;\n    }\n  function ___sys_mmap2(addr, len, prot, flags, fd, off) {try {\n  \n      return syscallMmap2(addr, len, prot, flags, fd, off);\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function syscallMunmap(addr, len) {\n      if ((addr | 0) === -1 || len === 0) {\n        return -28;\n      }\n      // TODO: support unmmap'ing parts of allocations\n      var info = SYSCALLS.mappings[addr];\n      if (!info) return 0;\n      if (len === info.len) {\n        var stream = FS.getStream(info.fd);\n        if (stream) {\n          if (info.prot & 2) {\n            SYSCALLS.doMsync(addr, stream, len, info.flags, info.offset);\n          }\n          FS.munmap(stream);\n        }\n        SYSCALLS.mappings[addr] = null;\n        if (info.allocated) {\n          _free(info.malloc);\n        }\n      }\n      return 0;\n    }\n  function ___sys_munmap(addr, len) {try {\n  \n      return syscallMunmap(addr, len);\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_open(path, flags, varargs) {SYSCALLS.varargs = varargs;\n  try {\n  \n      var pathname = SYSCALLS.getStr(path);\n      var mode = varargs ? SYSCALLS.get() : 0;\n      var stream = FS.open(pathname, flags, mode);\n      return stream.fd;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_readlink(path, buf, bufsize) {try {\n  \n      path = SYSCALLS.getStr(path);\n      return SYSCALLS.doReadlink(path, buf, bufsize);\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_rmdir(path) {try {\n  \n      path = SYSCALLS.getStr(path);\n      FS.rmdir(path);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_stat64(path, buf) {try {\n  \n      path = SYSCALLS.getStr(path);\n      return SYSCALLS.doStat(FS.stat, path, buf);\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function ___sys_unlink(path) {try {\n  \n      path = SYSCALLS.getStr(path);\n      FS.unlink(path);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return -e.errno;\n  }\n  }\n\n  function __emscripten_fetch_free(id) {\n    //Note: should just be [id], but indexes off by 1 (see: #8803)\n    delete Fetch.xhrs[id-1];\n  }\n\n  function _abort() {\n      abort();\n    }\n\n  function _clock() {\n      if (_clock.start === undefined) _clock.start = Date.now();\n      return ((Date.now() - _clock.start) * (1000000 / 1000))|0;\n    }\n\n  var _emscripten_get_now;if (ENVIRONMENT_IS_NODE) {\n    _emscripten_get_now = function() {\n      var t = process['hrtime']();\n      return t[0] * 1e3 + t[1] / 1e6;\n    };\n  } else if (typeof dateNow !== 'undefined') {\n    _emscripten_get_now = dateNow;\n  } else _emscripten_get_now = function() { return performance.now(); }\n  ;\n  \n  var _emscripten_get_now_is_monotonic=true;;\n  function _clock_gettime(clk_id, tp) {\n      // int clock_gettime(clockid_t clk_id, struct timespec *tp);\n      var now;\n      if (clk_id === 0) {\n        now = Date.now();\n      } else if ((clk_id === 1 || clk_id === 4) && _emscripten_get_now_is_monotonic) {\n        now = _emscripten_get_now();\n      } else {\n        setErrNo(28);\n        return -1;\n      }\n      HEAP32[((tp)>>2)] = (now/1000)|0; // seconds\n      HEAP32[(((tp)+(4))>>2)] = ((now % 1000)*1000*1000)|0; // nanoseconds\n      return 0;\n    }\n\n  function _dlclose(handle) {\n      abort(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\");\n    }\n\n  function _dlerror() {\n      abort(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\");\n    }\n\n  function _dlopen(filename, flag) {\n      abort(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\");\n    }\n\n  function _dlsym(handle, symbol) {\n      abort(\"To use dlopen, you need to use Emscripten's linking support, see https://github.com/emscripten-core/emscripten/wiki/Linking\");\n    }\n\n  var readAsmConstArgsArray=[];\n  function readAsmConstArgs(sigPtr, buf) {\n      // Nobody should have mutated _readAsmConstArgsArray underneath us to be something else than an array.\n      assert(Array.isArray(readAsmConstArgsArray));\n      // The input buffer is allocated on the stack, so it must be stack-aligned.\n      assert(buf % 16 == 0);\n      readAsmConstArgsArray.length = 0;\n      var ch;\n      // Most arguments are i32s, so shift the buffer pointer so it is a plain\n      // index into HEAP32.\n      buf >>= 2;\n      while (ch = HEAPU8[sigPtr++]) {\n        assert(ch === 100/*'d'*/ || ch === 102/*'f'*/ || ch === 105 /*'i'*/);\n        // A double takes two 32-bit slots, and must also be aligned - the backend\n        // will emit padding to avoid that.\n        var double = ch < 105;\n        if (double && (buf & 1)) buf++;\n        readAsmConstArgsArray.push(double ? HEAPF64[buf++ >> 1] : HEAP32[buf]);\n        ++buf;\n      }\n      return readAsmConstArgsArray;\n    }\n  function _emscripten_asm_const_int(code, sigPtr, argbuf) {\n      var args = readAsmConstArgs(sigPtr, argbuf);\n      if (!ASM_CONSTS.hasOwnProperty(code)) abort('No EM_ASM constant found at address ' + code);\n      return ASM_CONSTS[code].apply(null, args);\n    }\n\n  var JSEvents={inEventHandler:0,removeAllEventListeners:function() {\n        for (var i = JSEvents.eventHandlers.length-1; i >= 0; --i) {\n          JSEvents._removeHandler(i);\n        }\n        JSEvents.eventHandlers = [];\n        JSEvents.deferredCalls = [];\n      },registerRemoveEventListeners:function() {\n        if (!JSEvents.removeEventListenersRegistered) {\n          __ATEXIT__.push(JSEvents.removeAllEventListeners);\n          JSEvents.removeEventListenersRegistered = true;\n        }\n      },deferredCalls:[],deferCall:function(targetFunction, precedence, argsList) {\n        function arraysHaveEqualContent(arrA, arrB) {\n          if (arrA.length != arrB.length) return false;\n  \n          for (var i in arrA) {\n            if (arrA[i] != arrB[i]) return false;\n          }\n          return true;\n        }\n        // Test if the given call was already queued, and if so, don't add it again.\n        for (var i in JSEvents.deferredCalls) {\n          var call = JSEvents.deferredCalls[i];\n          if (call.targetFunction == targetFunction && arraysHaveEqualContent(call.argsList, argsList)) {\n            return;\n          }\n        }\n        JSEvents.deferredCalls.push({\n          targetFunction: targetFunction,\n          precedence: precedence,\n          argsList: argsList\n        });\n  \n        JSEvents.deferredCalls.sort(function(x,y) { return x.precedence < y.precedence; });\n      },removeDeferredCalls:function(targetFunction) {\n        for (var i = 0; i < JSEvents.deferredCalls.length; ++i) {\n          if (JSEvents.deferredCalls[i].targetFunction == targetFunction) {\n            JSEvents.deferredCalls.splice(i, 1);\n            --i;\n          }\n        }\n      },canPerformEventHandlerRequests:function() {\n        return JSEvents.inEventHandler && JSEvents.currentEventHandler.allowsDeferredCalls;\n      },runDeferredCalls:function() {\n        if (!JSEvents.canPerformEventHandlerRequests()) {\n          return;\n        }\n        for (var i = 0; i < JSEvents.deferredCalls.length; ++i) {\n          var call = JSEvents.deferredCalls[i];\n          JSEvents.deferredCalls.splice(i, 1);\n          --i;\n          call.targetFunction.apply(null, call.argsList);\n        }\n      },eventHandlers:[],removeAllHandlersOnTarget:function(target, eventTypeString) {\n        for (var i = 0; i < JSEvents.eventHandlers.length; ++i) {\n          if (JSEvents.eventHandlers[i].target == target && \n            (!eventTypeString || eventTypeString == JSEvents.eventHandlers[i].eventTypeString)) {\n             JSEvents._removeHandler(i--);\n           }\n        }\n      },_removeHandler:function(i) {\n        var h = JSEvents.eventHandlers[i];\n        h.target.removeEventListener(h.eventTypeString, h.eventListenerFunc, h.useCapture);\n        JSEvents.eventHandlers.splice(i, 1);\n      },registerOrRemoveHandler:function(eventHandler) {\n        var jsEventHandler = function jsEventHandler(event) {\n          // Increment nesting count for the event handler.\n          ++JSEvents.inEventHandler;\n          JSEvents.currentEventHandler = eventHandler;\n          // Process any old deferred calls the user has placed.\n          JSEvents.runDeferredCalls();\n          // Process the actual event, calls back to user C code handler.\n          eventHandler.handlerFunc(event);\n          // Process any new deferred calls that were placed right now from this event handler.\n          JSEvents.runDeferredCalls();\n          // Out of event handler - restore nesting count.\n          --JSEvents.inEventHandler;\n        };\n        \n        if (eventHandler.callbackfunc) {\n          eventHandler.eventListenerFunc = jsEventHandler;\n          eventHandler.target.addEventListener(eventHandler.eventTypeString, jsEventHandler, eventHandler.useCapture);\n          JSEvents.eventHandlers.push(eventHandler);\n          JSEvents.registerRemoveEventListeners();\n        } else {\n          for (var i = 0; i < JSEvents.eventHandlers.length; ++i) {\n            if (JSEvents.eventHandlers[i].target == eventHandler.target\n             && JSEvents.eventHandlers[i].eventTypeString == eventHandler.eventTypeString) {\n               JSEvents._removeHandler(i--);\n             }\n          }\n        }\n      },getNodeNameForTarget:function(target) {\n        if (!target) return '';\n        if (target == window) return '#window';\n        if (target == screen) return '#screen';\n        return (target && target.nodeName) ? target.nodeName : '';\n      },fullscreenEnabled:function() {\n        return document.fullscreenEnabled\n        // Safari 13.0.3 on macOS Catalina 10.15.1 still ships with prefixed webkitFullscreenEnabled.\n        // TODO: If Safari at some point ships with unprefixed version, update the version check above.\n        || document.webkitFullscreenEnabled\n         ;\n      }};\n  \n  function maybeCStringToJsString(cString) {\n      // \"cString > 2\" checks if the input is a number, and isn't of the special\n      // values we accept here, EMSCRIPTEN_EVENT_TARGET_* (which map to 0, 1, 2).\n      // In other words, if cString > 2 then it's a pointer to a valid place in\n      // memory, and points to a C string.\n      return cString > 2 ? UTF8ToString(cString) : cString;\n    }\n  \n  var specialHTMLTargets=[0, typeof document !== 'undefined' ? document : 0, typeof window !== 'undefined' ? window : 0];\n  function findEventTarget(target) {\n      target = maybeCStringToJsString(target);\n      var domElement = specialHTMLTargets[target] || (typeof document !== 'undefined' ? document.querySelector(target) : undefined);\n      return domElement;\n    }\n  \n  function getBoundingClientRect(e) {\n      return specialHTMLTargets.indexOf(e) < 0 ? e.getBoundingClientRect() : {'left':0,'top':0};\n    }\n  function _emscripten_get_element_css_size(target, width, height) {\n      target = findEventTarget(target);\n      if (!target) return -4;\n  \n      var rect = getBoundingClientRect(target);\n      HEAPF64[((width)>>3)] = rect.width;\n      HEAPF64[((height)>>3)] = rect.height;\n  \n      return 0;\n    }\n\n  function _emscripten_get_heap_max() {\n      return 2147483648;\n    }\n\n  function _emscripten_is_main_browser_thread() {\n      return !ENVIRONMENT_IS_WORKER;\n    }\n  Module[\"_emscripten_is_main_browser_thread\"] = _emscripten_is_main_browser_thread;\n\n  function _longjmp(env, value) {\n      _setThrew(env, value || 1);\n      throw 'longjmp';\n    }\n  function _emscripten_longjmp(a0,a1\n  ) {\n  return _longjmp(a0,a1);\n  }\n\n  function _emscripten_memcpy_big(dest, src, num) {\n      HEAPU8.copyWithin(dest, src, src + num);\n    }\n\n  function emscripten_realloc_buffer(size) {\n      try {\n        // round size grow request up to wasm page size (fixed 64KB per spec)\n        wasmMemory.grow((size - buffer.byteLength + 65535) >>> 16); // .grow() takes a delta compared to the previous size\n        updateGlobalBufferAndViews(wasmMemory.buffer);\n        return 1 /*success*/;\n      } catch(e) {\n        console.error('emscripten_realloc_buffer: Attempted to grow heap from ' + buffer.byteLength  + ' bytes to ' + size + ' bytes, but got error: ' + e);\n      }\n      // implicit 0 return to save code size (caller will cast \"undefined\" into 0\n      // anyhow)\n    }\n  function _emscripten_resize_heap(requestedSize) {\n      var oldSize = HEAPU8.length;\n      requestedSize = requestedSize >>> 0;\n      // With pthreads, races can happen (another thread might increase the size in between), so return a failure, and let the caller retry.\n      assert(requestedSize > oldSize);\n  \n      // Memory resize rules:\n      // 1. Always increase heap size to at least the requested size, rounded up to next page multiple.\n      // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap geometrically: increase the heap size according to \n      //                                         MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%),\n      //                                         At most overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).\n      // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap linearly: increase the heap size by at least MEMORY_GROWTH_LINEAR_STEP bytes.\n      // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest\n      // 4. If we were unable to allocate as much memory, it may be due to over-eager decision to excessively reserve due to (3) above.\n      //    Hence if an allocation fails, cut down on the amount of excess growth, in an attempt to succeed to perform a smaller allocation.\n  \n      // A limit was set for how much we can grow. We should not exceed that\n      // (the wasm binary specifies it, so if we tried, we'd fail anyhow).\n      // In CAN_ADDRESS_2GB mode, stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate full 4GB Wasm memories, the size will wrap\n      // back to 0 bytes in Wasm side for any code that deals with heap sizes, which would require special casing all heap size related code to treat\n      // 0 specially.\n      var maxHeapSize = 2147483648;\n      if (requestedSize > maxHeapSize) {\n        err('Cannot enlarge memory, asked to go up to ' + requestedSize + ' bytes, but the limit is ' + maxHeapSize + ' bytes!');\n        return false;\n      }\n  \n      // Loop through potential heap size increases. If we attempt a too eager reservation that fails, cut down on the\n      // attempted size and reserve a smaller bump instead. (max 3 times, chosen somewhat arbitrarily)\n      for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {\n        var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth\n        // but limit overreserving (default to capping at +96MB overgrowth at most)\n        overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 );\n  \n        var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));\n  \n        var replacement = emscripten_realloc_buffer(newSize);\n        if (replacement) {\n  \n          return true;\n        }\n      }\n      err('Failed to grow the heap from ' + oldSize + ' bytes to ' + newSize + ' bytes, not enough memory!');\n      return false;\n    }\n\n  function callUserCallback(func, synchronous) {\n      if (ABORT) {\n        err('user callback triggered after application aborted.  Ignoring.');\n        return;\n      }\n      // For synchronous calls, let any exceptions propagate, and don't let the runtime exit.\n      if (synchronous) {\n        func();\n        return;\n      }\n      try {\n        func();\n      } catch (e) {\n        if (e instanceof ExitStatus) {\n          return;\n        } else if (e !== 'unwind') {\n          // And actual unexpected user-exectpion occured\n          if (e && typeof e === 'object' && e.stack) err('exception thrown: ' + [e, e.stack]);\n          throw e;\n        }\n      }\n    }\n  \n  function runtimeKeepalivePush() {\n      runtimeKeepaliveCounter += 1;\n    }\n  \n  function runtimeKeepalivePop() {\n      assert(runtimeKeepaliveCounter > 0);\n      runtimeKeepaliveCounter -= 1;\n    }\n  var Browser={mainLoop:{running:false,scheduler:null,method:\"\",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function() {\n          Browser.mainLoop.scheduler = null;\n          // Incrementing this signals the previous main loop that it's now become old, and it must return.\n          Browser.mainLoop.currentlyRunningMainloop++;\n        },resume:function() {\n          Browser.mainLoop.currentlyRunningMainloop++;\n          var timingMode = Browser.mainLoop.timingMode;\n          var timingValue = Browser.mainLoop.timingValue;\n          var func = Browser.mainLoop.func;\n          Browser.mainLoop.func = null;\n          // do not set timing and call scheduler, we will do it on the next lines\n          setMainLoop(func, 0, false, Browser.mainLoop.arg, true);\n          _emscripten_set_main_loop_timing(timingMode, timingValue);\n          Browser.mainLoop.scheduler();\n        },updateStatus:function() {\n          if (Module['setStatus']) {\n            var message = Module['statusMessage'] || 'Please wait...';\n            var remaining = Browser.mainLoop.remainingBlockers;\n            var expected = Browser.mainLoop.expectedBlockers;\n            if (remaining) {\n              if (remaining < expected) {\n                Module['setStatus'](message + ' (' + (expected - remaining) + '/' + expected + ')');\n              } else {\n                Module['setStatus'](message);\n              }\n            } else {\n              Module['setStatus']('');\n            }\n          }\n        },runIter:function(func) {\n          if (ABORT) return;\n          if (Module['preMainLoop']) {\n            var preRet = Module['preMainLoop']();\n            if (preRet === false) {\n              return; // |return false| skips a frame\n            }\n          }\n          callUserCallback(func);\n          if (Module['postMainLoop']) Module['postMainLoop']();\n        }},isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],init:function() {\n        if (!Module[\"preloadPlugins\"]) Module[\"preloadPlugins\"] = []; // needs to exist even in workers\n  \n        if (Browser.initted) return;\n        Browser.initted = true;\n  \n        try {\n          new Blob();\n          Browser.hasBlobConstructor = true;\n        } catch(e) {\n          Browser.hasBlobConstructor = false;\n          console.log(\"warning: no blob constructor, cannot create blobs with mimetypes\");\n        }\n        Browser.BlobBuilder = typeof MozBlobBuilder != \"undefined\" ? MozBlobBuilder : (typeof WebKitBlobBuilder != \"undefined\" ? WebKitBlobBuilder : (!Browser.hasBlobConstructor ? console.log(\"warning: no BlobBuilder\") : null));\n        Browser.URLObject = typeof window != \"undefined\" ? (window.URL ? window.URL : window.webkitURL) : undefined;\n        if (!Module.noImageDecoding && typeof Browser.URLObject === 'undefined') {\n          console.log(\"warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available.\");\n          Module.noImageDecoding = true;\n        }\n  \n        // Support for plugins that can process preloaded files. You can add more of these to\n        // your app by creating and appending to Module.preloadPlugins.\n        //\n        // Each plugin is asked if it can handle a file based on the file's name. If it can,\n        // it is given the file's raw data. When it is done, it calls a callback with the file's\n        // (possibly modified) data. For example, a plugin might decompress a file, or it\n        // might create some side data structure for use later (like an Image element, etc.).\n  \n        var imagePlugin = {};\n        imagePlugin['canHandle'] = function imagePlugin_canHandle(name) {\n          return !Module.noImageDecoding && /\\.(jpg|jpeg|png|bmp)$/i.test(name);\n        };\n        imagePlugin['handle'] = function imagePlugin_handle(byteArray, name, onload, onerror) {\n          var b = null;\n          if (Browser.hasBlobConstructor) {\n            try {\n              b = new Blob([byteArray], { type: Browser.getMimetype(name) });\n              if (b.size !== byteArray.length) { // Safari bug #118630\n                // Safari's Blob can only take an ArrayBuffer\n                b = new Blob([(new Uint8Array(byteArray)).buffer], { type: Browser.getMimetype(name) });\n              }\n            } catch(e) {\n              warnOnce('Blob constructor present but fails: ' + e + '; falling back to blob builder');\n            }\n          }\n          if (!b) {\n            var bb = new Browser.BlobBuilder();\n            bb.append((new Uint8Array(byteArray)).buffer); // we need to pass a buffer, and must copy the array to get the right data range\n            b = bb.getBlob();\n          }\n          var url = Browser.URLObject.createObjectURL(b);\n          assert(typeof url == 'string', 'createObjectURL must return a url as a string');\n          var img = new Image();\n          img.onload = function img_onload() {\n            assert(img.complete, 'Image ' + name + ' could not be decoded');\n            var canvas = document.createElement('canvas');\n            canvas.width = img.width;\n            canvas.height = img.height;\n            var ctx = canvas.getContext('2d');\n            ctx.drawImage(img, 0, 0);\n            Module[\"preloadedImages\"][name] = canvas;\n            Browser.URLObject.revokeObjectURL(url);\n            if (onload) onload(byteArray);\n          };\n          img.onerror = function img_onerror(event) {\n            console.log('Image ' + url + ' could not be decoded');\n            if (onerror) onerror();\n          };\n          img.src = url;\n        };\n        Module['preloadPlugins'].push(imagePlugin);\n  \n        var audioPlugin = {};\n        audioPlugin['canHandle'] = function audioPlugin_canHandle(name) {\n          return !Module.noAudioDecoding && name.substr(-4) in { '.ogg': 1, '.wav': 1, '.mp3': 1 };\n        };\n        audioPlugin['handle'] = function audioPlugin_handle(byteArray, name, onload, onerror) {\n          var done = false;\n          function finish(audio) {\n            if (done) return;\n            done = true;\n            Module[\"preloadedAudios\"][name] = audio;\n            if (onload) onload(byteArray);\n          }\n          function fail() {\n            if (done) return;\n            done = true;\n            Module[\"preloadedAudios\"][name] = new Audio(); // empty shim\n            if (onerror) onerror();\n          }\n          if (Browser.hasBlobConstructor) {\n            try {\n              var b = new Blob([byteArray], { type: Browser.getMimetype(name) });\n            } catch(e) {\n              return fail();\n            }\n            var url = Browser.URLObject.createObjectURL(b); // XXX we never revoke this!\n            assert(typeof url == 'string', 'createObjectURL must return a url as a string');\n            var audio = new Audio();\n            audio.addEventListener('canplaythrough', function() { finish(audio) }, false); // use addEventListener due to chromium bug 124926\n            audio.onerror = function audio_onerror(event) {\n              if (done) return;\n              console.log('warning: browser could not fully decode audio ' + name + ', trying slower base64 approach');\n              function encode64(data) {\n                var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n                var PAD = '=';\n                var ret = '';\n                var leftchar = 0;\n                var leftbits = 0;\n                for (var i = 0; i < data.length; i++) {\n                  leftchar = (leftchar << 8) | data[i];\n                  leftbits += 8;\n                  while (leftbits >= 6) {\n                    var curr = (leftchar >> (leftbits-6)) & 0x3f;\n                    leftbits -= 6;\n                    ret += BASE[curr];\n                  }\n                }\n                if (leftbits == 2) {\n                  ret += BASE[(leftchar&3) << 4];\n                  ret += PAD + PAD;\n                } else if (leftbits == 4) {\n                  ret += BASE[(leftchar&0xf) << 2];\n                  ret += PAD;\n                }\n                return ret;\n              }\n              audio.src = 'data:audio/x-' + name.substr(-3) + ';base64,' + encode64(byteArray);\n              finish(audio); // we don't wait for confirmation this worked - but it's worth trying\n            };\n            audio.src = url;\n            // workaround for chrome bug 124926 - we do not always get oncanplaythrough or onerror\n            Browser.safeSetTimeout(function() {\n              finish(audio); // try to use it even though it is not necessarily ready to play\n            }, 10000);\n          } else {\n            return fail();\n          }\n        };\n        Module['preloadPlugins'].push(audioPlugin);\n  \n        // Canvas event setup\n  \n        function pointerLockChange() {\n          Browser.pointerLock = document['pointerLockElement'] === Module['canvas'] ||\n                                document['mozPointerLockElement'] === Module['canvas'] ||\n                                document['webkitPointerLockElement'] === Module['canvas'] ||\n                                document['msPointerLockElement'] === Module['canvas'];\n        }\n        var canvas = Module['canvas'];\n        if (canvas) {\n          // forced aspect ratio can be enabled by defining 'forcedAspectRatio' on Module\n          // Module['forcedAspectRatio'] = 4 / 3;\n  \n          canvas.requestPointerLock = canvas['requestPointerLock'] ||\n                                      canvas['mozRequestPointerLock'] ||\n                                      canvas['webkitRequestPointerLock'] ||\n                                      canvas['msRequestPointerLock'] ||\n                                      function(){};\n          canvas.exitPointerLock = document['exitPointerLock'] ||\n                                   document['mozExitPointerLock'] ||\n                                   document['webkitExitPointerLock'] ||\n                                   document['msExitPointerLock'] ||\n                                   function(){}; // no-op if function does not exist\n          canvas.exitPointerLock = canvas.exitPointerLock.bind(document);\n  \n          document.addEventListener('pointerlockchange', pointerLockChange, false);\n          document.addEventListener('mozpointerlockchange', pointerLockChange, false);\n          document.addEventListener('webkitpointerlockchange', pointerLockChange, false);\n          document.addEventListener('mspointerlockchange', pointerLockChange, false);\n  \n          if (Module['elementPointerLock']) {\n            canvas.addEventListener(\"click\", function(ev) {\n              if (!Browser.pointerLock && Module['canvas'].requestPointerLock) {\n                Module['canvas'].requestPointerLock();\n                ev.preventDefault();\n              }\n            }, false);\n          }\n        }\n      },createContext:function(canvas, useWebGL, setInModule, webGLContextAttributes) {\n        if (useWebGL && Module.ctx && canvas == Module.canvas) return Module.ctx; // no need to recreate GL context if it's already been created for this canvas.\n  \n        var ctx;\n        var contextHandle;\n        if (useWebGL) {\n          // For GLES2/desktop GL compatibility, adjust a few defaults to be different to WebGL defaults, so that they align better with the desktop defaults.\n          var contextAttributes = {\n            antialias: false,\n            alpha: false,\n            majorVersion: 2,\n          };\n  \n          if (webGLContextAttributes) {\n            for (var attribute in webGLContextAttributes) {\n              contextAttributes[attribute] = webGLContextAttributes[attribute];\n            }\n          }\n  \n          // This check of existence of GL is here to satisfy Closure compiler, which yells if variable GL is referenced below but GL object is not\n          // actually compiled in because application is not doing any GL operations. TODO: Ideally if GL is not being used, this function\n          // Browser.createContext() should not even be emitted.\n          if (typeof GL !== 'undefined') {\n            contextHandle = GL.createContext(canvas, contextAttributes);\n            if (contextHandle) {\n              ctx = GL.getContext(contextHandle).GLctx;\n            }\n          }\n        } else {\n          ctx = canvas.getContext('2d');\n        }\n  \n        if (!ctx) return null;\n  \n        if (setInModule) {\n          if (!useWebGL) assert(typeof GLctx === 'undefined', 'cannot set in module if GLctx is used, but we are a non-GL context that would replace it');\n  \n          Module.ctx = ctx;\n          if (useWebGL) GL.makeContextCurrent(contextHandle);\n          Module.useWebGL = useWebGL;\n          Browser.moduleContextCreatedCallbacks.forEach(function(callback) { callback() });\n          Browser.init();\n        }\n        return ctx;\n      },destroyContext:function(canvas, useWebGL, setInModule) {},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen:function(lockPointer, resizeCanvas) {\n        Browser.lockPointer = lockPointer;\n        Browser.resizeCanvas = resizeCanvas;\n        if (typeof Browser.lockPointer === 'undefined') Browser.lockPointer = true;\n        if (typeof Browser.resizeCanvas === 'undefined') Browser.resizeCanvas = false;\n  \n        var canvas = Module['canvas'];\n        function fullscreenChange() {\n          Browser.isFullscreen = false;\n          var canvasContainer = canvas.parentNode;\n          if ((document['fullscreenElement'] || document['mozFullScreenElement'] ||\n               document['msFullscreenElement'] || document['webkitFullscreenElement'] ||\n               document['webkitCurrentFullScreenElement']) === canvasContainer) {\n            canvas.exitFullscreen = Browser.exitFullscreen;\n            if (Browser.lockPointer) canvas.requestPointerLock();\n            Browser.isFullscreen = true;\n            if (Browser.resizeCanvas) {\n              Browser.setFullscreenCanvasSize();\n            } else {\n              Browser.updateCanvasDimensions(canvas);\n            }\n          } else {\n            // remove the full screen specific parent of the canvas again to restore the HTML structure from before going full screen\n            canvasContainer.parentNode.insertBefore(canvas, canvasContainer);\n            canvasContainer.parentNode.removeChild(canvasContainer);\n  \n            if (Browser.resizeCanvas) {\n              Browser.setWindowedCanvasSize();\n            } else {\n              Browser.updateCanvasDimensions(canvas);\n            }\n          }\n          if (Module['onFullScreen']) Module['onFullScreen'](Browser.isFullscreen);\n          if (Module['onFullscreen']) Module['onFullscreen'](Browser.isFullscreen);\n        }\n  \n        if (!Browser.fullscreenHandlersInstalled) {\n          Browser.fullscreenHandlersInstalled = true;\n          document.addEventListener('fullscreenchange', fullscreenChange, false);\n          document.addEventListener('mozfullscreenchange', fullscreenChange, false);\n          document.addEventListener('webkitfullscreenchange', fullscreenChange, false);\n          document.addEventListener('MSFullscreenChange', fullscreenChange, false);\n        }\n  \n        // create a new parent to ensure the canvas has no siblings. this allows browsers to optimize full screen performance when its parent is the full screen root\n        var canvasContainer = document.createElement(\"div\");\n        canvas.parentNode.insertBefore(canvasContainer, canvas);\n        canvasContainer.appendChild(canvas);\n  \n        // use parent of canvas as full screen root to allow aspect ratio correction (Firefox stretches the root to screen size)\n        canvasContainer.requestFullscreen = canvasContainer['requestFullscreen'] ||\n                                            canvasContainer['mozRequestFullScreen'] ||\n                                            canvasContainer['msRequestFullscreen'] ||\n                                           (canvasContainer['webkitRequestFullscreen'] ? function() { canvasContainer['webkitRequestFullscreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null) ||\n                                           (canvasContainer['webkitRequestFullScreen'] ? function() { canvasContainer['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']) } : null);\n  \n        canvasContainer.requestFullscreen();\n      },requestFullScreen:function() {\n        abort('Module.requestFullScreen has been replaced by Module.requestFullscreen (without a capital S)');\n      },exitFullscreen:function() {\n        // This is workaround for chrome. Trying to exit from fullscreen\n        // not in fullscreen state will cause \"TypeError: Document not active\"\n        // in chrome. See https://github.com/emscripten-core/emscripten/pull/8236\n        if (!Browser.isFullscreen) {\n          return false;\n        }\n  \n        var CFS = document['exitFullscreen'] ||\n                  document['cancelFullScreen'] ||\n                  document['mozCancelFullScreen'] ||\n                  document['msExitFullscreen'] ||\n                  document['webkitCancelFullScreen'] ||\n            (function() {});\n        CFS.apply(document, []);\n        return true;\n      },nextRAF:0,fakeRequestAnimationFrame:function(func) {\n        // try to keep 60fps between calls to here\n        var now = Date.now();\n        if (Browser.nextRAF === 0) {\n          Browser.nextRAF = now + 1000/60;\n        } else {\n          while (now + 2 >= Browser.nextRAF) { // fudge a little, to avoid timer jitter causing us to do lots of delay:0\n            Browser.nextRAF += 1000/60;\n          }\n        }\n        var delay = Math.max(Browser.nextRAF - now, 0);\n        setTimeout(func, delay);\n      },requestAnimationFrame:function(func) {\n        if (typeof requestAnimationFrame === 'function') {\n          requestAnimationFrame(func);\n          return;\n        }\n        var RAF = Browser.fakeRequestAnimationFrame;\n        RAF(func);\n      },safeRequestAnimationFrame:function(func) {\n        \n        return Browser.requestAnimationFrame(function() {\n          \n          callUserCallback(func);\n        });\n      },safeSetTimeout:function(func, timeout) {\n        \n        return setTimeout(function() {\n          \n          callUserCallback(func);\n        }, timeout);\n      },getMimetype:function(name) {\n        return {\n          'jpg': 'image/jpeg',\n          'jpeg': 'image/jpeg',\n          'png': 'image/png',\n          'bmp': 'image/bmp',\n          'ogg': 'audio/ogg',\n          'wav': 'audio/wav',\n          'mp3': 'audio/mpeg'\n        }[name.substr(name.lastIndexOf('.')+1)];\n      },getUserMedia:function(func) {\n        if (!window.getUserMedia) {\n          window.getUserMedia = navigator['getUserMedia'] ||\n                                navigator['mozGetUserMedia'];\n        }\n        window.getUserMedia(func);\n      },getMovementX:function(event) {\n        return event['movementX'] ||\n               event['mozMovementX'] ||\n               event['webkitMovementX'] ||\n               0;\n      },getMovementY:function(event) {\n        return event['movementY'] ||\n               event['mozMovementY'] ||\n               event['webkitMovementY'] ||\n               0;\n      },getMouseWheelDelta:function(event) {\n        var delta = 0;\n        switch (event.type) {\n          case 'DOMMouseScroll':\n            // 3 lines make up a step\n            delta = event.detail / 3;\n            break;\n          case 'mousewheel':\n            // 120 units make up a step\n            delta = event.wheelDelta / 120;\n            break;\n          case 'wheel':\n            delta = event.deltaY\n            switch (event.deltaMode) {\n              case 0:\n                // DOM_DELTA_PIXEL: 100 pixels make up a step\n                delta /= 100;\n                break;\n              case 1:\n                // DOM_DELTA_LINE: 3 lines make up a step\n                delta /= 3;\n                break;\n              case 2:\n                // DOM_DELTA_PAGE: A page makes up 80 steps\n                delta *= 80;\n                break;\n              default:\n                throw 'unrecognized mouse wheel delta mode: ' + event.deltaMode;\n            }\n            break;\n          default:\n            throw 'unrecognized mouse wheel event: ' + event.type;\n        }\n        return delta;\n      },mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(event) { // event should be mousemove, mousedown or mouseup\n        if (Browser.pointerLock) {\n          // When the pointer is locked, calculate the coordinates\n          // based on the movement of the mouse.\n          // Workaround for Firefox bug 764498\n          if (event.type != 'mousemove' &&\n              ('mozMovementX' in event)) {\n            Browser.mouseMovementX = Browser.mouseMovementY = 0;\n          } else {\n            Browser.mouseMovementX = Browser.getMovementX(event);\n            Browser.mouseMovementY = Browser.getMovementY(event);\n          }\n  \n          // check if SDL is available\n          if (typeof SDL != \"undefined\") {\n            Browser.mouseX = SDL.mouseX + Browser.mouseMovementX;\n            Browser.mouseY = SDL.mouseY + Browser.mouseMovementY;\n          } else {\n            // just add the mouse delta to the current absolut mouse position\n            // FIXME: ideally this should be clamped against the canvas size and zero\n            Browser.mouseX += Browser.mouseMovementX;\n            Browser.mouseY += Browser.mouseMovementY;\n          }\n        } else {\n          // Otherwise, calculate the movement based on the changes\n          // in the coordinates.\n          var rect = Module[\"canvas\"].getBoundingClientRect();\n          var cw = Module[\"canvas\"].width;\n          var ch = Module[\"canvas\"].height;\n  \n          // Neither .scrollX or .pageXOffset are defined in a spec, but\n          // we prefer .scrollX because it is currently in a spec draft.\n          // (see: http://www.w3.org/TR/2013/WD-cssom-view-20131217/)\n          var scrollX = ((typeof window.scrollX !== 'undefined') ? window.scrollX : window.pageXOffset);\n          var scrollY = ((typeof window.scrollY !== 'undefined') ? window.scrollY : window.pageYOffset);\n          // If this assert lands, it's likely because the browser doesn't support scrollX or pageXOffset\n          // and we have no viable fallback.\n          assert((typeof scrollX !== 'undefined') && (typeof scrollY !== 'undefined'), 'Unable to retrieve scroll position, mouse positions likely broken.');\n  \n          if (event.type === 'touchstart' || event.type === 'touchend' || event.type === 'touchmove') {\n            var touch = event.touch;\n            if (touch === undefined) {\n              return; // the \"touch\" property is only defined in SDL\n  \n            }\n            var adjustedX = touch.pageX - (scrollX + rect.left);\n            var adjustedY = touch.pageY - (scrollY + rect.top);\n  \n            adjustedX = adjustedX * (cw / rect.width);\n            adjustedY = adjustedY * (ch / rect.height);\n  \n            var coords = { x: adjustedX, y: adjustedY };\n  \n            if (event.type === 'touchstart') {\n              Browser.lastTouches[touch.identifier] = coords;\n              Browser.touches[touch.identifier] = coords;\n            } else if (event.type === 'touchend' || event.type === 'touchmove') {\n              var last = Browser.touches[touch.identifier];\n              if (!last) last = coords;\n              Browser.lastTouches[touch.identifier] = last;\n              Browser.touches[touch.identifier] = coords;\n            }\n            return;\n          }\n  \n          var x = event.pageX - (scrollX + rect.left);\n          var y = event.pageY - (scrollY + rect.top);\n  \n          // the canvas might be CSS-scaled compared to its backbuffer;\n          // SDL-using content will want mouse coordinates in terms\n          // of backbuffer units.\n          x = x * (cw / rect.width);\n          y = y * (ch / rect.height);\n  \n          Browser.mouseMovementX = x - Browser.mouseX;\n          Browser.mouseMovementY = y - Browser.mouseY;\n          Browser.mouseX = x;\n          Browser.mouseY = y;\n        }\n      },asyncLoad:function(url, onload, onerror, noRunDep) {\n        var dep = !noRunDep ? getUniqueRunDependency('al ' + url) : '';\n        readAsync(url, function(arrayBuffer) {\n          assert(arrayBuffer, 'Loading data file \"' + url + '\" failed (no arrayBuffer).');\n          onload(new Uint8Array(arrayBuffer));\n          if (dep) removeRunDependency(dep);\n        }, function(event) {\n          if (onerror) {\n            onerror();\n          } else {\n            throw 'Loading data file \"' + url + '\" failed.';\n          }\n        });\n        if (dep) addRunDependency(dep);\n      },resizeListeners:[],updateResizeListeners:function() {\n        var canvas = Module['canvas'];\n        Browser.resizeListeners.forEach(function(listener) {\n          listener(canvas.width, canvas.height);\n        });\n      },setCanvasSize:function(width, height, noUpdates) {\n        var canvas = Module['canvas'];\n        Browser.updateCanvasDimensions(canvas, width, height);\n        if (!noUpdates) Browser.updateResizeListeners();\n      },windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function() {\n        // check if SDL is available\n        if (typeof SDL != \"undefined\") {\n          var flags = HEAPU32[((SDL.screen)>>2)];\n          flags = flags | 0x00800000; // set SDL_FULLSCREEN flag\n          HEAP32[((SDL.screen)>>2)] = flags\n        }\n        Browser.updateCanvasDimensions(Module['canvas']);\n        Browser.updateResizeListeners();\n      },setWindowedCanvasSize:function() {\n        // check if SDL is available\n        if (typeof SDL != \"undefined\") {\n          var flags = HEAPU32[((SDL.screen)>>2)];\n          flags = flags & ~0x00800000; // clear SDL_FULLSCREEN flag\n          HEAP32[((SDL.screen)>>2)] = flags\n        }\n        Browser.updateCanvasDimensions(Module['canvas']);\n        Browser.updateResizeListeners();\n      },updateCanvasDimensions:function(canvas, wNative, hNative) {\n        if (wNative && hNative) {\n          canvas.widthNative = wNative;\n          canvas.heightNative = hNative;\n        } else {\n          wNative = canvas.widthNative;\n          hNative = canvas.heightNative;\n        }\n        var w = wNative;\n        var h = hNative;\n        if (Module['forcedAspectRatio'] && Module['forcedAspectRatio'] > 0) {\n          if (w/h < Module['forcedAspectRatio']) {\n            w = Math.round(h * Module['forcedAspectRatio']);\n          } else {\n            h = Math.round(w / Module['forcedAspectRatio']);\n          }\n        }\n        if (((document['fullscreenElement'] || document['mozFullScreenElement'] ||\n             document['msFullscreenElement'] || document['webkitFullscreenElement'] ||\n             document['webkitCurrentFullScreenElement']) === canvas.parentNode) && (typeof screen != 'undefined')) {\n           var factor = Math.min(screen.width / w, screen.height / h);\n           w = Math.round(w * factor);\n           h = Math.round(h * factor);\n        }\n        if (Browser.resizeCanvas) {\n          if (canvas.width  != w) canvas.width  = w;\n          if (canvas.height != h) canvas.height = h;\n          if (typeof canvas.style != 'undefined') {\n            canvas.style.removeProperty( \"width\");\n            canvas.style.removeProperty(\"height\");\n          }\n        } else {\n          if (canvas.width  != wNative) canvas.width  = wNative;\n          if (canvas.height != hNative) canvas.height = hNative;\n          if (typeof canvas.style != 'undefined') {\n            if (w != wNative || h != hNative) {\n              canvas.style.setProperty( \"width\", w + \"px\", \"important\");\n              canvas.style.setProperty(\"height\", h + \"px\", \"important\");\n            } else {\n              canvas.style.removeProperty( \"width\");\n              canvas.style.removeProperty(\"height\");\n            }\n          }\n        }\n      },wgetRequests:{},nextWgetRequestHandle:0,getNextWgetRequestHandle:function() {\n        var handle = Browser.nextWgetRequestHandle;\n        Browser.nextWgetRequestHandle++;\n        return handle;\n      }};\n  function _emscripten_set_main_loop_timing(mode, value) {\n      Browser.mainLoop.timingMode = mode;\n      Browser.mainLoop.timingValue = value;\n  \n      if (!Browser.mainLoop.func) {\n        console.error('emscripten_set_main_loop_timing: Cannot set timing mode for main loop since a main loop does not exist! Call emscripten_set_main_loop first to set one up.');\n        return 1; // Return non-zero on failure, can't set timing mode when there is no main loop.\n      }\n  \n      if (!Browser.mainLoop.running) {\n        \n        Browser.mainLoop.running = true;\n      }\n      if (mode == 0 /*EM_TIMING_SETTIMEOUT*/) {\n        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setTimeout() {\n          var timeUntilNextTick = Math.max(0, Browser.mainLoop.tickStartTime + value - _emscripten_get_now())|0;\n          setTimeout(Browser.mainLoop.runner, timeUntilNextTick); // doing this each time means that on exception, we stop\n        };\n        Browser.mainLoop.method = 'timeout';\n      } else if (mode == 1 /*EM_TIMING_RAF*/) {\n        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_rAF() {\n          Browser.requestAnimationFrame(Browser.mainLoop.runner);\n        };\n        Browser.mainLoop.method = 'rAF';\n      } else if (mode == 2 /*EM_TIMING_SETIMMEDIATE*/) {\n        if (typeof setImmediate === 'undefined') {\n          // Emulate setImmediate. (note: not a complete polyfill, we don't emulate clearImmediate() to keep code size to minimum, since not needed)\n          var setImmediates = [];\n          var emscriptenMainLoopMessageId = 'setimmediate';\n          var Browser_setImmediate_messageHandler = function(event) {\n            // When called in current thread or Worker, the main loop ID is structured slightly different to accommodate for --proxy-to-worker runtime listening to Worker events,\n            // so check for both cases.\n            if (event.data === emscriptenMainLoopMessageId || event.data.target === emscriptenMainLoopMessageId) {\n              event.stopPropagation();\n              setImmediates.shift()();\n            }\n          }\n          addEventListener(\"message\", Browser_setImmediate_messageHandler, true);\n          setImmediate = /** @type{function(function(): ?, ...?): number} */(function Browser_emulated_setImmediate(func) {\n            setImmediates.push(func);\n            if (ENVIRONMENT_IS_WORKER) {\n              if (Module['setImmediates'] === undefined) Module['setImmediates'] = [];\n              Module['setImmediates'].push(func);\n              postMessage({target: emscriptenMainLoopMessageId}); // In --proxy-to-worker, route the message via proxyClient.js\n            } else postMessage(emscriptenMainLoopMessageId, \"*\"); // On the main thread, can just send the message to itself.\n          })\n        }\n        Browser.mainLoop.scheduler = function Browser_mainLoop_scheduler_setImmediate() {\n          setImmediate(Browser.mainLoop.runner);\n        };\n        Browser.mainLoop.method = 'immediate';\n      }\n      return 0;\n    }\n  \n  function _exit(status) {\n      // void _exit(int status);\n      // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html\n      exit(status);\n    }\n  function maybeExit() {\n      if (!keepRuntimeAlive()) {\n        try {\n          _exit(EXITSTATUS);\n        } catch (e) {\n          if (e instanceof ExitStatus) {\n            return;\n          }\n          throw e;\n        }\n      }\n    }\n  function setMainLoop(browserIterationFunc, fps, simulateInfiniteLoop, arg, noSetTiming) {\n      assert(!Browser.mainLoop.func, '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.');\n  \n      Browser.mainLoop.func = browserIterationFunc;\n      Browser.mainLoop.arg = arg;\n  \n      var thisMainLoopId = Browser.mainLoop.currentlyRunningMainloop;\n      function checkIsRunning() {\n        if (thisMainLoopId < Browser.mainLoop.currentlyRunningMainloop) {\n          \n          maybeExit();\n          return false;\n        }\n        return true;\n      }\n  \n      // We create the loop runner here but it is not actually running until\n      // _emscripten_set_main_loop_timing is called (which might happen a\n      // later time).  This member signifies that the current runner has not\n      // yet been started so that we can call runtimeKeepalivePush when it\n      // gets it timing set for the first time.\n      Browser.mainLoop.running = false;\n      Browser.mainLoop.runner = function Browser_mainLoop_runner() {\n        if (ABORT) return;\n        if (Browser.mainLoop.queue.length > 0) {\n          var start = Date.now();\n          var blocker = Browser.mainLoop.queue.shift();\n          blocker.func(blocker.arg);\n          if (Browser.mainLoop.remainingBlockers) {\n            var remaining = Browser.mainLoop.remainingBlockers;\n            var next = remaining%1 == 0 ? remaining-1 : Math.floor(remaining);\n            if (blocker.counted) {\n              Browser.mainLoop.remainingBlockers = next;\n            } else {\n              // not counted, but move the progress along a tiny bit\n              next = next + 0.5; // do not steal all the next one's progress\n              Browser.mainLoop.remainingBlockers = (8*remaining + next)/9;\n            }\n          }\n          console.log('main loop blocker \"' + blocker.name + '\" took ' + (Date.now() - start) + ' ms'); //, left: ' + Browser.mainLoop.remainingBlockers);\n          Browser.mainLoop.updateStatus();\n  \n          // catches pause/resume main loop from blocker execution\n          if (!checkIsRunning()) return;\n  \n          setTimeout(Browser.mainLoop.runner, 0);\n          return;\n        }\n  \n        // catch pauses from non-main loop sources\n        if (!checkIsRunning()) return;\n  \n        // Implement very basic swap interval control\n        Browser.mainLoop.currentFrameNumber = Browser.mainLoop.currentFrameNumber + 1 | 0;\n        if (Browser.mainLoop.timingMode == 1/*EM_TIMING_RAF*/ && Browser.mainLoop.timingValue > 1 && Browser.mainLoop.currentFrameNumber % Browser.mainLoop.timingValue != 0) {\n          // Not the scheduled time to render this frame - skip.\n          Browser.mainLoop.scheduler();\n          return;\n        } else if (Browser.mainLoop.timingMode == 0/*EM_TIMING_SETTIMEOUT*/) {\n          Browser.mainLoop.tickStartTime = _emscripten_get_now();\n        }\n  \n        // Signal GL rendering layer that processing of a new frame is about to start. This helps it optimize\n        // VBO double-buffering and reduce GPU stalls.\n  \n        if (Browser.mainLoop.method === 'timeout' && Module.ctx) {\n          warnOnce('Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!');\n          Browser.mainLoop.method = ''; // just warn once per call to set main loop\n        }\n  \n        Browser.mainLoop.runIter(browserIterationFunc);\n  \n        checkStackCookie();\n  \n        // catch pauses from the main loop itself\n        if (!checkIsRunning()) return;\n  \n        // Queue new audio data. This is important to be right after the main loop invocation, so that we will immediately be able\n        // to queue the newest produced audio samples.\n        // TODO: Consider adding pre- and post- rAF callbacks so that GL.newRenderingFrameStarted() and SDL.audio.queueNewAudioData()\n        //       do not need to be hardcoded into this function, but can be more generic.\n        if (typeof SDL === 'object' && SDL.audio && SDL.audio.queueNewAudioData) SDL.audio.queueNewAudioData();\n  \n        Browser.mainLoop.scheduler();\n      }\n  \n      if (!noSetTiming) {\n        if (fps && fps > 0) _emscripten_set_main_loop_timing(0/*EM_TIMING_SETTIMEOUT*/, 1000.0 / fps);\n        else _emscripten_set_main_loop_timing(1/*EM_TIMING_RAF*/, 1); // Do rAF by rendering each frame (no decimating)\n  \n        Browser.mainLoop.scheduler();\n      }\n  \n      if (simulateInfiniteLoop) {\n        throw 'unwind';\n      }\n    }\n  function _emscripten_set_main_loop_arg(func, arg, fps, simulateInfiniteLoop) {\n      var browserIterationFunc = function() { wasmTable.get(func)(arg); };\n      setMainLoop(browserIterationFunc, fps, simulateInfiniteLoop, arg);\n    }\n\n  var Fetch={xhrs:[],setu64:function(addr, val) {\n      HEAPU32[addr >> 2] = val;\n      HEAPU32[addr + 4 >> 2] = (val / 4294967296)|0;\n    },openDatabase:function(dbname, dbversion, onsuccess, onerror) {\n      try {\n        var openRequest = indexedDB.open(dbname, dbversion);\n      } catch (e) { return onerror(e); }\n  \n      openRequest.onupgradeneeded = function(event) {\n        var db = event.target.result;\n        if (db.objectStoreNames.contains('FILES')) {\n          db.deleteObjectStore('FILES');\n        }\n        db.createObjectStore('FILES');\n      };\n      openRequest.onsuccess = function(event) { onsuccess(event.target.result); };\n      openRequest.onerror = function(error) { onerror(error); };\n    },staticInit:function() {\n      var isMainThread = true;\n  \n      var onsuccess = function(db) {\n        Fetch.dbInstance = db;\n  \n        if (isMainThread) {\n          removeRunDependency('library_fetch_init');\n        }\n      };\n      var onerror = function() {\n        Fetch.dbInstance = false;\n  \n        if (isMainThread) {\n          removeRunDependency('library_fetch_init');\n        }\n      };\n      Fetch.openDatabase('emscripten_filesystem', 1, onsuccess, onerror);\n  \n      if (typeof ENVIRONMENT_IS_FETCH_WORKER === 'undefined' || !ENVIRONMENT_IS_FETCH_WORKER) addRunDependency('library_fetch_init');\n    }};\n  \n  function fetchXHR(fetch, onsuccess, onerror, onprogress, onreadystatechange) {\n    var url = HEAPU32[fetch + 8 >> 2];\n    if (!url) {\n      onerror(fetch, 0, 'no url specified!');\n      return;\n    }\n    var url_ = UTF8ToString(url);\n  \n    var fetch_attr = fetch + 112;\n    var requestMethod = UTF8ToString(fetch_attr);\n    if (!requestMethod) requestMethod = 'GET';\n    var userData = HEAPU32[fetch + 4 >> 2];\n    var fetchAttributes = HEAPU32[fetch_attr + 52 >> 2];\n    var timeoutMsecs = HEAPU32[fetch_attr + 56 >> 2];\n    var withCredentials = !!HEAPU32[fetch_attr + 60 >> 2];\n    var destinationPath = HEAPU32[fetch_attr + 64 >> 2];\n    var userName = HEAPU32[fetch_attr + 68 >> 2];\n    var password = HEAPU32[fetch_attr + 72 >> 2];\n    var requestHeaders = HEAPU32[fetch_attr + 76 >> 2];\n    var overriddenMimeType = HEAPU32[fetch_attr + 80 >> 2];\n    var dataPtr = HEAPU32[fetch_attr + 84 >> 2];\n    var dataLength = HEAPU32[fetch_attr + 88 >> 2];\n  \n    var fetchAttrLoadToMemory = !!(fetchAttributes & 1);\n    var fetchAttrStreamData = !!(fetchAttributes & 2);\n    var fetchAttrPersistFile = !!(fetchAttributes & 4);\n    var fetchAttrAppend = !!(fetchAttributes & 8);\n    var fetchAttrReplace = !!(fetchAttributes & 16);\n    var fetchAttrSynchronous = !!(fetchAttributes & 64);\n    var fetchAttrWaitable = !!(fetchAttributes & 128);\n  \n    var userNameStr = userName ? UTF8ToString(userName) : undefined;\n    var passwordStr = password ? UTF8ToString(password) : undefined;\n    var overriddenMimeTypeStr = overriddenMimeType ? UTF8ToString(overriddenMimeType) : undefined;\n  \n    var xhr = new XMLHttpRequest();\n    xhr.withCredentials = withCredentials;\n    xhr.open(requestMethod, url_, !fetchAttrSynchronous, userNameStr, passwordStr);\n    if (!fetchAttrSynchronous) xhr.timeout = timeoutMsecs; // XHR timeout field is only accessible in async XHRs, and must be set after .open() but before .send().\n    xhr.url_ = url_; // Save the url for debugging purposes (and for comparing to the responseURL that server side advertised)\n    assert(!fetchAttrStreamData, 'streaming uses moz-chunked-arraybuffer which is no longer supported; TODO: rewrite using fetch()');\n    xhr.responseType = 'arraybuffer';\n  \n    if (overriddenMimeType) {\n      xhr.overrideMimeType(overriddenMimeTypeStr);\n    }\n    if (requestHeaders) {\n      for (;;) {\n        var key = HEAPU32[requestHeaders >> 2];\n        if (!key) break;\n        var value = HEAPU32[requestHeaders + 4 >> 2];\n        if (!value) break;\n        requestHeaders += 8;\n        var keyStr = UTF8ToString(key);\n        var valueStr = UTF8ToString(value);\n        xhr.setRequestHeader(keyStr, valueStr);\n      }\n    }\n    Fetch.xhrs.push(xhr);\n    var id = Fetch.xhrs.length;\n    HEAPU32[fetch + 0 >> 2] = id;\n    var data = (dataPtr && dataLength) ? HEAPU8.slice(dataPtr, dataPtr + dataLength) : null;\n    // TODO: Support specifying custom headers to the request.\n  \n    // Share the code to save the response, as we need to do so both on success\n    // and on error (despite an error, there may be a response, like a 404 page).\n    // This receives a condition, which determines whether to save the xhr's\n    // response, or just 0.\n    function saveResponse(condition) {\n      var ptr = 0;\n      var ptrLen = 0;\n      if (condition) {\n        ptrLen = xhr.response ? xhr.response.byteLength : 0;\n        // The data pointer malloc()ed here has the same lifetime as the emscripten_fetch_t structure itself has, and is\n        // freed when emscripten_fetch_close() is called.\n        ptr = _malloc(ptrLen);\n        HEAPU8.set(new Uint8Array(xhr.response), ptr);\n      }\n      HEAPU32[fetch + 12 >> 2] = ptr;\n      Fetch.setu64(fetch + 16, ptrLen);\n    }\n  \n    xhr.onload = function(e) {\n      saveResponse(fetchAttrLoadToMemory && !fetchAttrStreamData);\n      var len = xhr.response ? xhr.response.byteLength : 0;\n      Fetch.setu64(fetch + 24, 0);\n      if (len) {\n        // If the final XHR.onload handler receives the bytedata to compute total length, report that,\n        // otherwise don't write anything out here, which will retain the latest byte size reported in\n        // the most recent XHR.onprogress handler.\n        Fetch.setu64(fetch + 32, len);\n      }\n      HEAPU16[fetch + 40 >> 1] = xhr.readyState;\n      HEAPU16[fetch + 42 >> 1] = xhr.status;\n      if (xhr.statusText) stringToUTF8(xhr.statusText, fetch + 44, 64);\n      if (xhr.status >= 200 && xhr.status < 300) {\n        if (onsuccess) onsuccess(fetch, xhr, e);\n      } else {\n        if (onerror) onerror(fetch, xhr, e);\n      }\n    };\n    xhr.onerror = function(e) {\n      saveResponse(fetchAttrLoadToMemory);\n      var status = xhr.status; // XXX TODO: Overwriting xhr.status doesn't work here, so don't override anywhere else either.\n      Fetch.setu64(fetch + 24, 0);\n      Fetch.setu64(fetch + 32, xhr.response ? xhr.response.byteLength : 0);\n      HEAPU16[fetch + 40 >> 1] = xhr.readyState;\n      HEAPU16[fetch + 42 >> 1] = status;\n      if (onerror) onerror(fetch, xhr, e);\n    };\n    xhr.ontimeout = function(e) {\n      if (onerror) onerror(fetch, xhr, e);\n    };\n    xhr.onprogress = function(e) {\n      var ptrLen = (fetchAttrLoadToMemory && fetchAttrStreamData && xhr.response) ? xhr.response.byteLength : 0;\n      var ptr = 0;\n      if (fetchAttrLoadToMemory && fetchAttrStreamData) {\n        assert(onprogress, 'When doing a streaming fetch, you should have an onprogress handler registered to receive the chunks!');\n        // Allocate byte data in Emscripten heap for the streamed memory block (freed immediately after onprogress call)\n        ptr = _malloc(ptrLen);\n        HEAPU8.set(new Uint8Array(xhr.response), ptr);\n      }\n      HEAPU32[fetch + 12 >> 2] = ptr;\n      Fetch.setu64(fetch + 16, ptrLen);\n      Fetch.setu64(fetch + 24, e.loaded - ptrLen);\n      Fetch.setu64(fetch + 32, e.total);\n      HEAPU16[fetch + 40 >> 1] = xhr.readyState;\n      if (xhr.readyState >= 3 && xhr.status === 0 && e.loaded > 0) xhr.status = 200; // If loading files from a source that does not give HTTP status code, assume success if we get data bytes\n      HEAPU16[fetch + 42 >> 1] = xhr.status;\n      if (xhr.statusText) stringToUTF8(xhr.statusText, fetch + 44, 64);\n      if (onprogress) onprogress(fetch, xhr, e);\n      if (ptr) {\n        _free(ptr);\n      }\n    };\n    xhr.onreadystatechange = function(e) {\n      HEAPU16[fetch + 40 >> 1] = xhr.readyState;\n      if (xhr.readyState >= 2) {\n        HEAPU16[fetch + 42 >> 1] = xhr.status;\n      }\n      if (onreadystatechange) onreadystatechange(fetch, xhr, e);\n    };\n    try {\n      xhr.send(data);\n    } catch(e) {\n      if (onerror) onerror(fetch, xhr, e);\n    }\n  }\n  \n  function fetchCacheData(db, fetch, data, onsuccess, onerror) {\n    if (!db) {\n      onerror(fetch, 0, 'IndexedDB not available!');\n      return;\n    }\n  \n    var fetch_attr = fetch + 112;\n    var destinationPath = HEAPU32[fetch_attr + 64 >> 2];\n    if (!destinationPath) destinationPath = HEAPU32[fetch + 8 >> 2];\n    var destinationPathStr = UTF8ToString(destinationPath);\n  \n    try {\n      var transaction = db.transaction(['FILES'], 'readwrite');\n      var packages = transaction.objectStore('FILES');\n      var putRequest = packages.put(data, destinationPathStr);\n      putRequest.onsuccess = function(event) {\n        HEAPU16[fetch + 40 >> 1] = 4; // Mimic XHR readyState 4 === 'DONE: The operation is complete'\n        HEAPU16[fetch + 42 >> 1] = 200; // Mimic XHR HTTP status code 200 \"OK\"\n        stringToUTF8(\"OK\", fetch + 44, 64);\n        onsuccess(fetch, 0, destinationPathStr);\n      };\n      putRequest.onerror = function(error) {\n        // Most likely we got an error if IndexedDB is unwilling to store any more data for this page.\n        // TODO: Can we identify and break down different IndexedDB-provided errors and convert those\n        // to more HTTP status codes for more information?\n        HEAPU16[fetch + 40 >> 1] = 4; // Mimic XHR readyState 4 === 'DONE: The operation is complete'\n        HEAPU16[fetch + 42 >> 1] = 413; // Mimic XHR HTTP status code 413 \"Payload Too Large\"\n        stringToUTF8(\"Payload Too Large\", fetch + 44, 64);\n        onerror(fetch, 0, error);\n      };\n    } catch(e) {\n      onerror(fetch, 0, e);\n    }\n  }\n  \n  function fetchLoadCachedData(db, fetch, onsuccess, onerror) {\n    if (!db) {\n      onerror(fetch, 0, 'IndexedDB not available!');\n      return;\n    }\n  \n    var fetch_attr = fetch + 112;\n    var path = HEAPU32[fetch_attr + 64 >> 2];\n    if (!path) path = HEAPU32[fetch + 8 >> 2];\n    var pathStr = UTF8ToString(path);\n  \n    try {\n      var transaction = db.transaction(['FILES'], 'readonly');\n      var packages = transaction.objectStore('FILES');\n      var getRequest = packages.get(pathStr);\n      getRequest.onsuccess = function(event) {\n        if (event.target.result) {\n          var value = event.target.result;\n          var len = value.byteLength || value.length;\n          // The data pointer malloc()ed here has the same lifetime as the emscripten_fetch_t structure itself has, and is\n          // freed when emscripten_fetch_close() is called.\n          var ptr = _malloc(len);\n          HEAPU8.set(new Uint8Array(value), ptr);\n          HEAPU32[fetch + 12 >> 2] = ptr;\n          Fetch.setu64(fetch + 16, len);\n          Fetch.setu64(fetch + 24, 0);\n          Fetch.setu64(fetch + 32, len);\n          HEAPU16[fetch + 40 >> 1] = 4; // Mimic XHR readyState 4 === 'DONE: The operation is complete'\n          HEAPU16[fetch + 42 >> 1] = 200; // Mimic XHR HTTP status code 200 \"OK\"\n          stringToUTF8(\"OK\", fetch + 44, 64);\n          onsuccess(fetch, 0, value);\n        } else {\n          // Succeeded to load, but the load came back with the value of undefined, treat that as an error since we never store undefined in db.\n          HEAPU16[fetch + 40 >> 1] = 4; // Mimic XHR readyState 4 === 'DONE: The operation is complete'\n          HEAPU16[fetch + 42 >> 1] = 404; // Mimic XHR HTTP status code 404 \"Not Found\"\n          stringToUTF8(\"Not Found\", fetch + 44, 64);\n          onerror(fetch, 0, 'no data');\n        }\n      };\n      getRequest.onerror = function(error) {\n        HEAPU16[fetch + 40 >> 1] = 4; // Mimic XHR readyState 4 === 'DONE: The operation is complete'\n        HEAPU16[fetch + 42 >> 1] = 404; // Mimic XHR HTTP status code 404 \"Not Found\"\n        stringToUTF8(\"Not Found\", fetch + 44, 64);\n        onerror(fetch, 0, error);\n      };\n    } catch(e) {\n      onerror(fetch, 0, e);\n    }\n  }\n  \n  function fetchDeleteCachedData(db, fetch, onsuccess, onerror) {\n    if (!db) {\n      onerror(fetch, 0, 'IndexedDB not available!');\n      return;\n    }\n  \n    var fetch_attr = fetch + 112;\n    var path = HEAPU32[fetch_attr + 64 >> 2];\n    if (!path) path = HEAPU32[fetch + 8 >> 2];\n    var pathStr = UTF8ToString(path);\n  \n    try {\n      var transaction = db.transaction(['FILES'], 'readwrite');\n      var packages = transaction.objectStore('FILES');\n      var request = packages.delete(pathStr);\n      request.onsuccess = function(event) {\n        var value = event.target.result;\n        HEAPU32[fetch + 12 >> 2] = 0;\n        Fetch.setu64(fetch + 16, 0);\n        Fetch.setu64(fetch + 24, 0);\n        Fetch.setu64(fetch + 32, 0);\n        HEAPU16[fetch + 40 >> 1] = 4; // Mimic XHR readyState 4 === 'DONE: The operation is complete'\n        HEAPU16[fetch + 42 >> 1] = 200; // Mimic XHR HTTP status code 200 \"OK\"\n        stringToUTF8(\"OK\", fetch + 44, 64);\n        onsuccess(fetch, 0, value);\n      };\n      request.onerror = function(error) {\n        HEAPU16[fetch + 40 >> 1] = 4; // Mimic XHR readyState 4 === 'DONE: The operation is complete'\n        HEAPU16[fetch + 42 >> 1] = 404; // Mimic XHR HTTP status code 404 \"Not Found\"\n        stringToUTF8(\"Not Found\", fetch + 44, 64);\n        onerror(fetch, 0, error);\n      };\n    } catch(e) {\n      onerror(fetch, 0, e);\n    }\n  }\n  function _emscripten_start_fetch(fetch, successcb, errorcb, progresscb, readystatechangecb) {\n    // Avoid shutting down the runtime since we want to wait for the async\n    // response.\n    \n  \n    var fetch_attr = fetch + 112;\n    var requestMethod = UTF8ToString(fetch_attr);\n    var onsuccess = HEAPU32[fetch_attr + 36 >> 2];\n    var onerror = HEAPU32[fetch_attr + 40 >> 2];\n    var onprogress = HEAPU32[fetch_attr + 44 >> 2];\n    var onreadystatechange = HEAPU32[fetch_attr + 48 >> 2];\n    var fetchAttributes = HEAPU32[fetch_attr + 52 >> 2];\n    var fetchAttrLoadToMemory = !!(fetchAttributes & 1);\n    var fetchAttrStreamData = !!(fetchAttributes & 2);\n    var fetchAttrPersistFile = !!(fetchAttributes & 4);\n    var fetchAttrNoDownload = !!(fetchAttributes & 32);\n    var fetchAttrAppend = !!(fetchAttributes & 8);\n    var fetchAttrReplace = !!(fetchAttributes & 16);\n    var fetchAttrSynchronous = !!(fetchAttributes & 64);\n  \n    var reportSuccess = function(fetch, xhr, e) {\n      \n      callUserCallback(function() {\n        if (onsuccess) wasmTable.get(onsuccess)(fetch);\n        else if (successcb) successcb(fetch);\n      }, fetchAttrSynchronous);\n    };\n  \n    var reportProgress = function(fetch, xhr, e) {\n      callUserCallback(function() {\n        if (onprogress) wasmTable.get(onprogress)(fetch);\n        else if (progresscb) progresscb(fetch);\n      }, fetchAttrSynchronous);\n    };\n  \n    var reportError = function(fetch, xhr, e) {\n      \n      callUserCallback(function() {\n        if (onerror) wasmTable.get(onerror)(fetch);\n        else if (errorcb) errorcb(fetch);\n      }, fetchAttrSynchronous);\n    };\n  \n    var reportReadyStateChange = function(fetch, xhr, e) {\n      callUserCallback(function() {\n        if (onreadystatechange) wasmTable.get(onreadystatechange)(fetch);\n        else if (readystatechangecb) readystatechangecb(fetch);\n      }, fetchAttrSynchronous);\n    };\n  \n    var performUncachedXhr = function(fetch, xhr, e) {\n      fetchXHR(fetch, reportSuccess, reportError, reportProgress, reportReadyStateChange);\n    };\n  \n    var cacheResultAndReportSuccess = function(fetch, xhr, e) {\n      var storeSuccess = function(fetch, xhr, e) {\n        \n        callUserCallback(function() {\n          if (onsuccess) wasmTable.get(onsuccess)(fetch);\n          else if (successcb) successcb(fetch);\n        }, fetchAttrSynchronous);\n      };\n      var storeError = function(fetch, xhr, e) {\n        \n        callUserCallback(function() {\n          if (onsuccess) wasmTable.get(onsuccess)(fetch);\n          else if (successcb) successcb(fetch);\n        }, fetchAttrSynchronous);\n      };\n      fetchCacheData(Fetch.dbInstance, fetch, xhr.response, storeSuccess, storeError);\n    };\n  \n    var performCachedXhr = function(fetch, xhr, e) {\n      fetchXHR(fetch, cacheResultAndReportSuccess, reportError, reportProgress, reportReadyStateChange);\n    };\n  \n    if (requestMethod === 'EM_IDB_STORE') {\n      // TODO(?): Here we perform a clone of the data, because storing shared typed arrays to IndexedDB does not seem to be allowed.\n      var ptr = HEAPU32[fetch_attr + 84 >> 2];\n      fetchCacheData(Fetch.dbInstance, fetch, HEAPU8.slice(ptr, ptr + HEAPU32[fetch_attr + 88 >> 2]), reportSuccess, reportError);\n    } else if (requestMethod === 'EM_IDB_DELETE') {\n      fetchDeleteCachedData(Fetch.dbInstance, fetch, reportSuccess, reportError);\n    } else if (!fetchAttrReplace) {\n      fetchLoadCachedData(Fetch.dbInstance, fetch, reportSuccess, fetchAttrNoDownload ? reportError : (fetchAttrPersistFile ? performCachedXhr : performUncachedXhr));\n    } else if (!fetchAttrNoDownload) {\n      fetchXHR(fetch, fetchAttrPersistFile ? cacheResultAndReportSuccess : reportSuccess, reportError, reportProgress, reportReadyStateChange);\n    } else {\n      return 0; // todo: free\n    }\n    return fetch;\n  }\n\n  function _emscripten_thread_sleep(msecs) {\n      var start = _emscripten_get_now();\n      while (_emscripten_get_now() - start < msecs) {\n        // Do nothing.\n      }\n    }\n\n  var ENV={};\n  \n  function getExecutableName() {\n      return thisProgram || './this.program';\n    }\n  function getEnvStrings() {\n      if (!getEnvStrings.strings) {\n        // Default values.\n        // Browser language detection #8751\n        var lang = ((typeof navigator === 'object' && navigator.languages && navigator.languages[0]) || 'C').replace('-', '_') + '.UTF-8';\n        var env = {\n          'USER': 'web_user',\n          'LOGNAME': 'web_user',\n          'PATH': '/',\n          'PWD': '/',\n          'HOME': '/home/web_user',\n          'LANG': lang,\n          '_': getExecutableName()\n        };\n        // Apply the user-provided values, if any.\n        for (var x in ENV) {\n          env[x] = ENV[x];\n        }\n        var strings = [];\n        for (var x in env) {\n          strings.push(x + '=' + env[x]);\n        }\n        getEnvStrings.strings = strings;\n      }\n      return getEnvStrings.strings;\n    }\n  function _environ_get(__environ, environ_buf) {try {\n  \n      var bufSize = 0;\n      getEnvStrings().forEach(function(string, i) {\n        var ptr = environ_buf + bufSize;\n        HEAP32[(((__environ)+(i * 4))>>2)] = ptr;\n        writeAsciiToMemory(string, ptr);\n        bufSize += string.length + 1;\n      });\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return e.errno;\n  }\n  }\n\n  function _environ_sizes_get(penviron_count, penviron_buf_size) {try {\n  \n      var strings = getEnvStrings();\n      HEAP32[((penviron_count)>>2)] = strings.length;\n      var bufSize = 0;\n      strings.forEach(function(string) {\n        bufSize += string.length + 1;\n      });\n      HEAP32[((penviron_buf_size)>>2)] = bufSize;\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return e.errno;\n  }\n  }\n\n\n  function _fd_close(fd) {try {\n  \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      FS.close(stream);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return e.errno;\n  }\n  }\n\n  function _fd_fdstat_get(fd, pbuf) {try {\n  \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      // All character devices are terminals (other things a Linux system would\n      // assume is a character device, like the mouse, we have special APIs for).\n      var type = stream.tty ? 2 :\n                 FS.isDir(stream.mode) ? 3 :\n                 FS.isLink(stream.mode) ? 7 :\n                 4;\n      HEAP8[((pbuf)>>0)] = type;\n      // TODO HEAP16[(((pbuf)+(2))>>1)] = ?;\n      // TODO (tempI64 = [?>>>0,(tempDouble=?,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((pbuf)+(8))>>2)] = tempI64[0],HEAP32[(((pbuf)+(12))>>2)] = tempI64[1]);\n      // TODO (tempI64 = [?>>>0,(tempDouble=?,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((pbuf)+(16))>>2)] = tempI64[0],HEAP32[(((pbuf)+(20))>>2)] = tempI64[1]);\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return e.errno;\n  }\n  }\n\n  function _fd_read(fd, iov, iovcnt, pnum) {try {\n  \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      var num = SYSCALLS.doReadv(stream, iov, iovcnt);\n      HEAP32[((pnum)>>2)] = num\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return e.errno;\n  }\n  }\n\n  function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {try {\n  \n      \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      var HIGH_OFFSET = 0x100000000; // 2^32\n      // use an unsigned operator on low and shift high by 32-bits\n      var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0);\n  \n      var DOUBLE_LIMIT = 0x20000000000000; // 2^53\n      // we also check for equality since DOUBLE_LIMIT + 1 == DOUBLE_LIMIT\n      if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) {\n        return -61;\n      }\n  \n      FS.llseek(stream, offset, whence);\n      (tempI64 = [stream.position>>>0,(tempDouble=stream.position,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((newOffset)>>2)] = tempI64[0],HEAP32[(((newOffset)+(4))>>2)] = tempI64[1]);\n      if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return e.errno;\n  }\n  }\n\n  function _fd_sync(fd) {try {\n  \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      if (stream.stream_ops && stream.stream_ops.fsync) {\n        return -stream.stream_ops.fsync(stream);\n      }\n      return 0; // we can't do anything synchronously; the in-memory FS is already synced to\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return e.errno;\n  }\n  }\n\n  function _fd_write(fd, iov, iovcnt, pnum) {try {\n  \n      var stream = SYSCALLS.getStreamFromFD(fd);\n      var num = SYSCALLS.doWritev(stream, iov, iovcnt);\n      HEAP32[((pnum)>>2)] = num\n      return 0;\n    } catch (e) {\n    if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e);\n    return e.errno;\n  }\n  }\n\n  function _getTempRet0() {\n      return getTempRet0();\n    }\n\n  function _getentropy(buffer, size) {\n      if (!_getentropy.randomDevice) {\n        _getentropy.randomDevice = getRandomDevice();\n      }\n      for (var i = 0; i < size; i++) {\n        HEAP8[(((buffer)+(i))>>0)] = _getentropy.randomDevice()\n      }\n      return 0;\n    }\n\n  function _gettimeofday(ptr) {\n      var now = Date.now();\n      HEAP32[((ptr)>>2)] = (now/1000)|0; // seconds\n      HEAP32[(((ptr)+(4))>>2)] = ((now % 1000)*1000)|0; // microseconds\n      return 0;\n    }\n\n  function __webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx) {\n      // Closure is expected to be allowed to minify the '.dibvbi' property, so not accessing it quoted.\n      return !!(ctx.dibvbi = ctx.getExtension('WEBGL_draw_instanced_base_vertex_base_instance'));\n    }\n  \n  function __webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx) {\n      // Closure is expected to be allowed to minify the '.mdibvbi' property, so not accessing it quoted.\n      return !!(ctx.mdibvbi = ctx.getExtension('WEBGL_multi_draw_instanced_base_vertex_base_instance'));\n    }\n  \n  function __webgl_enable_WEBGL_multi_draw(ctx) {\n      // Closure is expected to be allowed to minify the '.multiDrawWebgl' property, so not accessing it quoted.\n      return !!(ctx.multiDrawWebgl = ctx.getExtension('WEBGL_multi_draw'));\n    }\n  var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode) {\n        if (!GL.lastError) {\n          GL.lastError = errorCode;\n        }\n      },getNewId:function(table) {\n        var ret = GL.counter++;\n        for (var i = table.length; i < ret; i++) {\n          table[i] = null;\n        }\n        return ret;\n      },getSource:function(shader, count, string, length) {\n        var source = '';\n        for (var i = 0; i < count; ++i) {\n          var len = length ? HEAP32[(((length)+(i*4))>>2)] : -1;\n          source += UTF8ToString(HEAP32[(((string)+(i*4))>>2)], len < 0 ? undefined : len);\n        }\n        return source;\n      },createContext:function(canvas, webGLContextAttributes) {\n  \n        // BUG: Workaround Safari WebGL issue: After successfully acquiring WebGL context on a canvas,\n        // calling .getContext() will always return that context independent of which 'webgl' or 'webgl2'\n        // context version was passed. See https://bugs.webkit.org/show_bug.cgi?id=222758 and\n        // https://github.com/emscripten-core/emscripten/issues/13295.\n        // TODO: Once the bug is fixed and shipped in Safari, adjust the Safari version field in above check.\n        if (!canvas.getContextSafariWebGL2Fixed) {\n          canvas.getContextSafariWebGL2Fixed = canvas.getContext;\n          canvas.getContext = function(ver, attrs) {\n            var gl = canvas.getContextSafariWebGL2Fixed(ver, attrs);\n            return ((ver == 'webgl') == (gl instanceof WebGLRenderingContext)) ? gl : null;\n          }\n        }\n  \n        var ctx = canvas.getContext(\"webgl2\", webGLContextAttributes);\n  \n        if (!ctx) return 0;\n  \n        var handle = GL.registerContext(ctx, webGLContextAttributes);\n  \n        return handle;\n      },registerContext:function(ctx, webGLContextAttributes) {\n        // without pthreads a context is just an integer ID\n        var handle = GL.getNewId(GL.contexts);\n  \n        var context = {\n          handle: handle,\n          attributes: webGLContextAttributes,\n          version: webGLContextAttributes.majorVersion,\n          GLctx: ctx\n        };\n  \n        // Store the created context object so that we can access the context given a canvas without having to pass the parameters again.\n        if (ctx.canvas) ctx.canvas.GLctxObject = context;\n        GL.contexts[handle] = context;\n        if (typeof webGLContextAttributes.enableExtensionsByDefault === 'undefined' || webGLContextAttributes.enableExtensionsByDefault) {\n          GL.initExtensions(context);\n        }\n  \n        return handle;\n      },makeContextCurrent:function(contextHandle) {\n  \n        GL.currentContext = GL.contexts[contextHandle]; // Active Emscripten GL layer context object.\n        Module.ctx = GLctx = GL.currentContext && GL.currentContext.GLctx; // Active WebGL context object.\n        return !(contextHandle && !GLctx);\n      },getContext:function(contextHandle) {\n        return GL.contexts[contextHandle];\n      },deleteContext:function(contextHandle) {\n        if (GL.currentContext === GL.contexts[contextHandle]) GL.currentContext = null;\n        if (typeof JSEvents === 'object') JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas); // Release all JS event handlers on the DOM element that the GL context is associated with since the context is now deleted.\n        if (GL.contexts[contextHandle] && GL.contexts[contextHandle].GLctx.canvas) GL.contexts[contextHandle].GLctx.canvas.GLctxObject = undefined; // Make sure the canvas object no longer refers to the context object so there are no GC surprises.\n        GL.contexts[contextHandle] = null;\n      },initExtensions:function(context) {\n        // If this function is called without a specific context object, init the extensions of the currently active context.\n        if (!context) context = GL.currentContext;\n  \n        if (context.initExtensionsDone) return;\n        context.initExtensionsDone = true;\n  \n        var GLctx = context.GLctx;\n  \n        // Detect the presence of a few extensions manually, this GL interop layer itself will need to know if they exist.\n  \n        // Extensions that are available from WebGL >= 2 (no-op if called on a WebGL 1 context active)\n        __webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);\n        __webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);\n  \n        // On WebGL 2, EXT_disjoint_timer_query is replaced with an alternative\n        // that's based on core APIs, and exposes only the queryCounterEXT()\n        // entrypoint.\n        if (context.version >= 2) {\n          GLctx.disjointTimerQueryExt = GLctx.getExtension(\"EXT_disjoint_timer_query_webgl2\");\n        }\n  \n        // However, Firefox exposes the WebGL 1 version on WebGL 2 as well and\n        // thus we look for the WebGL 1 version again if the WebGL 2 version\n        // isn't present. https://bugzilla.mozilla.org/show_bug.cgi?id=1328882\n        if (context.version < 2 || !GLctx.disjointTimerQueryExt)\n        {\n          GLctx.disjointTimerQueryExt = GLctx.getExtension(\"EXT_disjoint_timer_query\");\n        }\n  \n        __webgl_enable_WEBGL_multi_draw(GLctx);\n  \n        // .getSupportedExtensions() can return null if context is lost, so coerce to empty array.\n        var exts = GLctx.getSupportedExtensions() || [];\n        exts.forEach(function(ext) {\n          // WEBGL_lose_context, WEBGL_debug_renderer_info and WEBGL_debug_shaders are not enabled by default.\n          if (!ext.includes('lose_context') && !ext.includes('debug')) {\n            // Call .getExtension() to enable that extension permanently.\n            GLctx.getExtension(ext);\n          }\n        });\n      }};\n  function _glActiveTexture(x0) { GLctx['activeTexture'](x0) }\n\n  function _glAttachShader(program, shader) {\n      GLctx.attachShader(GL.programs[program], GL.shaders[shader]);\n    }\n\n  function _glBindBuffer(target, buffer) {\n  \n      if (target == 0x88EB /*GL_PIXEL_PACK_BUFFER*/) {\n        // In WebGL 2 glReadPixels entry point, we need to use a different WebGL 2 API function call when a buffer is bound to\n        // GL_PIXEL_PACK_BUFFER_BINDING point, so must keep track whether that binding point is non-null to know what is\n        // the proper API function to call.\n        GLctx.currentPixelPackBufferBinding = buffer;\n      } else if (target == 0x88EC /*GL_PIXEL_UNPACK_BUFFER*/) {\n        // In WebGL 2 gl(Compressed)Tex(Sub)Image[23]D entry points, we need to\n        // use a different WebGL 2 API function call when a buffer is bound to\n        // GL_PIXEL_UNPACK_BUFFER_BINDING point, so must keep track whether that\n        // binding point is non-null to know what is the proper API function to\n        // call.\n        GLctx.currentPixelUnpackBufferBinding = buffer;\n      }\n      GLctx.bindBuffer(target, GL.buffers[buffer]);\n    }\n\n  function _glBindFramebuffer(target, framebuffer) {\n  \n      GLctx.bindFramebuffer(target, GL.framebuffers[framebuffer]);\n  \n    }\n\n  function _glBindRenderbuffer(target, renderbuffer) {\n      GLctx.bindRenderbuffer(target, GL.renderbuffers[renderbuffer]);\n    }\n\n  function _glBindTexture(target, texture) {\n      GLctx.bindTexture(target, GL.textures[texture]);\n    }\n\n  function _glBindVertexArray(vao) {\n      GLctx['bindVertexArray'](GL.vaos[vao]);\n    }\n\n  function _glBlendFunc(x0, x1) { GLctx['blendFunc'](x0, x1) }\n\n  function _glBlendFuncSeparate(x0, x1, x2, x3) { GLctx['blendFuncSeparate'](x0, x1, x2, x3) }\n\n  function _glBlitFramebuffer(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9) { GLctx['blitFramebuffer'](x0, x1, x2, x3, x4, x5, x6, x7, x8, x9) }\n\n  function _glBufferData(target, size, data, usage) {\n  \n      if (true) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.\n        if (data) {\n          GLctx.bufferData(target, HEAPU8, usage, data, size);\n        } else {\n          GLctx.bufferData(target, size, usage);\n        }\n      } else {\n        // N.b. here first form specifies a heap subarray, second form an integer size, so the ?: code here is polymorphic. It is advised to avoid\n        // randomly mixing both uses in calling code, to avoid any potential JS engine JIT issues.\n        GLctx.bufferData(target, data ? HEAPU8.subarray(data, data+size) : size, usage);\n      }\n    }\n\n  function _glBufferSubData(target, offset, size, data) {\n      if (true) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.\n        GLctx.bufferSubData(target, offset, HEAPU8, data, size);\n        return;\n      }\n      GLctx.bufferSubData(target, offset, HEAPU8.subarray(data, data+size));\n    }\n\n  function _glCheckFramebufferStatus(x0) { return GLctx['checkFramebufferStatus'](x0) }\n\n  function _glClear(x0) { GLctx['clear'](x0) }\n\n  function _glClearColor(x0, x1, x2, x3) { GLctx['clearColor'](x0, x1, x2, x3) }\n\n  function _glCompileShader(shader) {\n      GLctx.compileShader(GL.shaders[shader]);\n    }\n\n  function _glCreateProgram() {\n      var id = GL.getNewId(GL.programs);\n      var program = GLctx.createProgram();\n      // Store additional information needed for each shader program:\n      program.name = id;\n      // Lazy cache results of glGetProgramiv(GL_ACTIVE_UNIFORM_MAX_LENGTH/GL_ACTIVE_ATTRIBUTE_MAX_LENGTH/GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH)\n      program.maxUniformLength = program.maxAttributeLength = program.maxUniformBlockNameLength = 0;\n      program.uniformIdCounter = 1;\n      GL.programs[id] = program;\n      return id;\n    }\n\n  function _glCreateShader(shaderType) {\n      var id = GL.getNewId(GL.shaders);\n      GL.shaders[id] = GLctx.createShader(shaderType);\n  \n      return id;\n    }\n\n  function _glDeleteBuffers(n, buffers) {\n      for (var i = 0; i < n; i++) {\n        var id = HEAP32[(((buffers)+(i*4))>>2)];\n        var buffer = GL.buffers[id];\n  \n        // From spec: \"glDeleteBuffers silently ignores 0's and names that do not\n        // correspond to existing buffer objects.\"\n        if (!buffer) continue;\n  \n        GLctx.deleteBuffer(buffer);\n        buffer.name = 0;\n        GL.buffers[id] = null;\n  \n        if (id == GLctx.currentPixelPackBufferBinding) GLctx.currentPixelPackBufferBinding = 0;\n        if (id == GLctx.currentPixelUnpackBufferBinding) GLctx.currentPixelUnpackBufferBinding = 0;\n      }\n    }\n\n  function _glDeleteFramebuffers(n, framebuffers) {\n      for (var i = 0; i < n; ++i) {\n        var id = HEAP32[(((framebuffers)+(i*4))>>2)];\n        var framebuffer = GL.framebuffers[id];\n        if (!framebuffer) continue; // GL spec: \"glDeleteFramebuffers silently ignores 0s and names that do not correspond to existing framebuffer objects\".\n        GLctx.deleteFramebuffer(framebuffer);\n        framebuffer.name = 0;\n        GL.framebuffers[id] = null;\n      }\n    }\n\n  function _glDeleteProgram(id) {\n      if (!id) return;\n      var program = GL.programs[id];\n      if (!program) { // glDeleteProgram actually signals an error when deleting a nonexisting object, unlike some other GL delete functions.\n        GL.recordError(0x501 /* GL_INVALID_VALUE */);\n        return;\n      }\n      GLctx.deleteProgram(program);\n      program.name = 0;\n      GL.programs[id] = null;\n    }\n\n  function _glDeleteRenderbuffers(n, renderbuffers) {\n      for (var i = 0; i < n; i++) {\n        var id = HEAP32[(((renderbuffers)+(i*4))>>2)];\n        var renderbuffer = GL.renderbuffers[id];\n        if (!renderbuffer) continue; // GL spec: \"glDeleteRenderbuffers silently ignores 0s and names that do not correspond to existing renderbuffer objects\".\n        GLctx.deleteRenderbuffer(renderbuffer);\n        renderbuffer.name = 0;\n        GL.renderbuffers[id] = null;\n      }\n    }\n\n  function _glDeleteShader(id) {\n      if (!id) return;\n      var shader = GL.shaders[id];\n      if (!shader) { // glDeleteShader actually signals an error when deleting a nonexisting object, unlike some other GL delete functions.\n        GL.recordError(0x501 /* GL_INVALID_VALUE */);\n        return;\n      }\n      GLctx.deleteShader(shader);\n      GL.shaders[id] = null;\n    }\n\n  function _glDeleteTextures(n, textures) {\n      for (var i = 0; i < n; i++) {\n        var id = HEAP32[(((textures)+(i*4))>>2)];\n        var texture = GL.textures[id];\n        if (!texture) continue; // GL spec: \"glDeleteTextures silently ignores 0s and names that do not correspond to existing textures\".\n        GLctx.deleteTexture(texture);\n        texture.name = 0;\n        GL.textures[id] = null;\n      }\n    }\n\n  function _glDeleteVertexArrays(n, vaos) {\n      for (var i = 0; i < n; i++) {\n        var id = HEAP32[(((vaos)+(i*4))>>2)];\n        GLctx['deleteVertexArray'](GL.vaos[id]);\n        GL.vaos[id] = null;\n      }\n    }\n\n  function _glDepthFunc(x0) { GLctx['depthFunc'](x0) }\n\n  function _glDepthMask(flag) {\n      GLctx.depthMask(!!flag);\n    }\n\n  function _glDisable(x0) { GLctx['disable'](x0) }\n\n  function _glDisableVertexAttribArray(index) {\n      GLctx.disableVertexAttribArray(index);\n    }\n\n  function _glDrawArrays(mode, first, count) {\n  \n      GLctx.drawArrays(mode, first, count);\n  \n    }\n\n  function _glDrawElements(mode, count, type, indices) {\n  \n      GLctx.drawElements(mode, count, type, indices);\n  \n    }\n\n  function _glEnable(x0) { GLctx['enable'](x0) }\n\n  function _glEnableVertexAttribArray(index) {\n      GLctx.enableVertexAttribArray(index);\n    }\n\n  function _glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) {\n      GLctx.framebufferRenderbuffer(target, attachment, renderbuffertarget,\n                                         GL.renderbuffers[renderbuffer]);\n    }\n\n  function _glFramebufferTexture2D(target, attachment, textarget, texture, level) {\n      GLctx.framebufferTexture2D(target, attachment, textarget,\n                                      GL.textures[texture], level);\n    }\n\n  function _glFrontFace(x0) { GLctx['frontFace'](x0) }\n\n  function __glGenObject(n, buffers, createFunction, objectTable\n      ) {\n      for (var i = 0; i < n; i++) {\n        var buffer = GLctx[createFunction]();\n        var id = buffer && GL.getNewId(objectTable);\n        if (buffer) {\n          buffer.name = id;\n          objectTable[id] = buffer;\n        } else {\n          GL.recordError(0x502 /* GL_INVALID_OPERATION */);\n        }\n        HEAP32[(((buffers)+(i*4))>>2)] = id;\n      }\n    }\n  function _glGenBuffers(n, buffers) {\n      __glGenObject(n, buffers, 'createBuffer', GL.buffers\n        );\n    }\n\n  function _glGenFramebuffers(n, ids) {\n      __glGenObject(n, ids, 'createFramebuffer', GL.framebuffers\n        );\n    }\n\n  function _glGenRenderbuffers(n, renderbuffers) {\n      __glGenObject(n, renderbuffers, 'createRenderbuffer', GL.renderbuffers\n        );\n    }\n\n  function _glGenTextures(n, textures) {\n      __glGenObject(n, textures, 'createTexture', GL.textures\n        );\n    }\n\n  function _glGenVertexArrays(n, arrays) {\n      __glGenObject(n, arrays, 'createVertexArray', GL.vaos\n        );\n    }\n\n  function _glGenerateMipmap(x0) { GLctx['generateMipmap'](x0) }\n\n  function __glGetActiveAttribOrUniform(funcName, program, index, bufSize, length, size, type, name) {\n      program = GL.programs[program];\n      var info = GLctx[funcName](program, index);\n      if (info) { // If an error occurs, nothing will be written to length, size and type and name.\n        var numBytesWrittenExclNull = name && stringToUTF8(info.name, name, bufSize);\n        if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;\n        if (size) HEAP32[((size)>>2)] = info.size;\n        if (type) HEAP32[((type)>>2)] = info.type;\n      }\n    }\n  function _glGetActiveAttrib(program, index, bufSize, length, size, type, name) {\n      __glGetActiveAttribOrUniform('getActiveAttrib', program, index, bufSize, length, size, type, name);\n    }\n\n  function _glGetActiveUniform(program, index, bufSize, length, size, type, name) {\n      __glGetActiveAttribOrUniform('getActiveUniform', program, index, bufSize, length, size, type, name);\n    }\n\n  function _glGetAttribLocation(program, name) {\n      return GLctx.getAttribLocation(GL.programs[program], UTF8ToString(name));\n    }\n\n  function readI53FromI64(ptr) {\n      return HEAPU32[ptr>>2] + HEAP32[ptr+4>>2] * 4294967296;\n    }\n  \n  function readI53FromU64(ptr) {\n      return HEAPU32[ptr>>2] + HEAPU32[ptr+4>>2] * 4294967296;\n    }\n  function writeI53ToI64(ptr, num) {\n      HEAPU32[ptr>>2] = num;\n      HEAPU32[ptr+4>>2] = (num - HEAPU32[ptr>>2])/4294967296;\n      var deserialized = (num >= 0) ? readI53FromU64(ptr) : readI53FromI64(ptr);\n      if (deserialized != num) warnOnce('writeI53ToI64() out of range: serialized JS Number ' + num + ' to Wasm heap as bytes lo=0x' + HEAPU32[ptr>>2].toString(16) + ', hi=0x' + HEAPU32[ptr+4>>2].toString(16) + ', which deserializes back to ' + deserialized + ' instead!');\n    }\n  function emscriptenWebGLGet(name_, p, type) {\n      // Guard against user passing a null pointer.\n      // Note that GLES2 spec does not say anything about how passing a null pointer should be treated.\n      // Testing on desktop core GL 3, the application crashes on glGetIntegerv to a null pointer, but\n      // better to report an error instead of doing anything random.\n      if (!p) {\n        GL.recordError(0x501 /* GL_INVALID_VALUE */);\n        return;\n      }\n      var ret = undefined;\n      switch (name_) { // Handle a few trivial GLES values\n        case 0x8DFA: // GL_SHADER_COMPILER\n          ret = 1;\n          break;\n        case 0x8DF8: // GL_SHADER_BINARY_FORMATS\n          if (type != 0 && type != 1) {\n            GL.recordError(0x500); // GL_INVALID_ENUM\n          }\n          return; // Do not write anything to the out pointer, since no binary formats are supported.\n        case 0x87FE: // GL_NUM_PROGRAM_BINARY_FORMATS\n        case 0x8DF9: // GL_NUM_SHADER_BINARY_FORMATS\n          ret = 0;\n          break;\n        case 0x86A2: // GL_NUM_COMPRESSED_TEXTURE_FORMATS\n          // WebGL doesn't have GL_NUM_COMPRESSED_TEXTURE_FORMATS (it's obsolete since GL_COMPRESSED_TEXTURE_FORMATS returns a JS array that can be queried for length),\n          // so implement it ourselves to allow C++ GLES2 code get the length.\n          var formats = GLctx.getParameter(0x86A3 /*GL_COMPRESSED_TEXTURE_FORMATS*/);\n          ret = formats ? formats.length : 0;\n          break;\n  \n        case 0x821D: // GL_NUM_EXTENSIONS\n          if (GL.currentContext.version < 2) {\n            GL.recordError(0x502 /* GL_INVALID_OPERATION */); // Calling GLES3/WebGL2 function with a GLES2/WebGL1 context\n            return;\n          }\n          // .getSupportedExtensions() can return null if context is lost, so coerce to empty array.\n          var exts = GLctx.getSupportedExtensions() || [];\n          ret = 2 * exts.length; // each extension is duplicated, first in unprefixed WebGL form, and then a second time with \"GL_\" prefix.\n          break;\n        case 0x821B: // GL_MAJOR_VERSION\n        case 0x821C: // GL_MINOR_VERSION\n          if (GL.currentContext.version < 2) {\n            GL.recordError(0x500); // GL_INVALID_ENUM\n            return;\n          }\n          ret = name_ == 0x821B ? 3 : 0; // return version 3.0\n          break;\n      }\n  \n      if (ret === undefined) {\n        var result = GLctx.getParameter(name_);\n        switch (typeof(result)) {\n          case \"number\":\n            ret = result;\n            break;\n          case \"boolean\":\n            ret = result ? 1 : 0;\n            break;\n          case \"string\":\n            GL.recordError(0x500); // GL_INVALID_ENUM\n            return;\n          case \"object\":\n            if (result === null) {\n              // null is a valid result for some (e.g., which buffer is bound - perhaps nothing is bound), but otherwise\n              // can mean an invalid name_, which we need to report as an error\n              switch (name_) {\n                case 0x8894: // ARRAY_BUFFER_BINDING\n                case 0x8B8D: // CURRENT_PROGRAM\n                case 0x8895: // ELEMENT_ARRAY_BUFFER_BINDING\n                case 0x8CA6: // FRAMEBUFFER_BINDING or DRAW_FRAMEBUFFER_BINDING\n                case 0x8CA7: // RENDERBUFFER_BINDING\n                case 0x8069: // TEXTURE_BINDING_2D\n                case 0x85B5: // WebGL 2 GL_VERTEX_ARRAY_BINDING, or WebGL 1 extension OES_vertex_array_object GL_VERTEX_ARRAY_BINDING_OES\n                case 0x8F36: // COPY_READ_BUFFER_BINDING or COPY_READ_BUFFER\n                case 0x8F37: // COPY_WRITE_BUFFER_BINDING or COPY_WRITE_BUFFER\n                case 0x88ED: // PIXEL_PACK_BUFFER_BINDING\n                case 0x88EF: // PIXEL_UNPACK_BUFFER_BINDING\n                case 0x8CAA: // READ_FRAMEBUFFER_BINDING\n                case 0x8919: // SAMPLER_BINDING\n                case 0x8C1D: // TEXTURE_BINDING_2D_ARRAY\n                case 0x806A: // TEXTURE_BINDING_3D\n                case 0x8E25: // TRANSFORM_FEEDBACK_BINDING\n                case 0x8C8F: // TRANSFORM_FEEDBACK_BUFFER_BINDING\n                case 0x8A28: // UNIFORM_BUFFER_BINDING\n                case 0x8514: { // TEXTURE_BINDING_CUBE_MAP\n                  ret = 0;\n                  break;\n                }\n                default: {\n                  GL.recordError(0x500); // GL_INVALID_ENUM\n                  return;\n                }\n              }\n            } else if (result instanceof Float32Array ||\n                       result instanceof Uint32Array ||\n                       result instanceof Int32Array ||\n                       result instanceof Array) {\n              for (var i = 0; i < result.length; ++i) {\n                switch (type) {\n                  case 0: HEAP32[(((p)+(i*4))>>2)] = result[i]; break;\n                  case 2: HEAPF32[(((p)+(i*4))>>2)] = result[i]; break;\n                  case 4: HEAP8[(((p)+(i))>>0)] = result[i] ? 1 : 0; break;\n                }\n              }\n              return;\n            } else {\n              try {\n                ret = result.name | 0;\n              } catch(e) {\n                GL.recordError(0x500); // GL_INVALID_ENUM\n                err('GL_INVALID_ENUM in glGet' + type + 'v: Unknown object returned from WebGL getParameter(' + name_ + ')! (error: ' + e + ')');\n                return;\n              }\n            }\n            break;\n          default:\n            GL.recordError(0x500); // GL_INVALID_ENUM\n            err('GL_INVALID_ENUM in glGet' + type + 'v: Native code calling glGet' + type + 'v(' + name_ + ') and it returns ' + result + ' of type ' + typeof(result) + '!');\n            return;\n        }\n      }\n  \n      switch (type) {\n        case 1: writeI53ToI64(p, ret); break;\n        case 0: HEAP32[((p)>>2)] = ret; break;\n        case 2:   HEAPF32[((p)>>2)] = ret; break;\n        case 4: HEAP8[((p)>>0)] = ret ? 1 : 0; break;\n      }\n    }\n  function _glGetFloatv(name_, p) {\n      emscriptenWebGLGet(name_, p, 2);\n    }\n\n  function _glGetIntegerv(name_, p) {\n      emscriptenWebGLGet(name_, p, 0);\n    }\n\n  function _glGetProgramInfoLog(program, maxLength, length, infoLog) {\n      var log = GLctx.getProgramInfoLog(GL.programs[program]);\n      if (log === null) log = '(unknown error)';\n      var numBytesWrittenExclNull = (maxLength > 0 && infoLog) ? stringToUTF8(log, infoLog, maxLength) : 0;\n      if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;\n    }\n\n  function _glGetProgramiv(program, pname, p) {\n      if (!p) {\n        // GLES2 specification does not specify how to behave if p is a null pointer. Since calling this function does not make sense\n        // if p == null, issue a GL error to notify user about it.\n        GL.recordError(0x501 /* GL_INVALID_VALUE */);\n        return;\n      }\n  \n      if (program >= GL.counter) {\n        GL.recordError(0x501 /* GL_INVALID_VALUE */);\n        return;\n      }\n  \n      program = GL.programs[program];\n  \n      if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH\n        var log = GLctx.getProgramInfoLog(program);\n        if (log === null) log = '(unknown error)';\n        HEAP32[((p)>>2)] = log.length + 1;\n      } else if (pname == 0x8B87 /* GL_ACTIVE_UNIFORM_MAX_LENGTH */) {\n        if (!program.maxUniformLength) {\n          for (var i = 0; i < GLctx.getProgramParameter(program, 0x8B86/*GL_ACTIVE_UNIFORMS*/); ++i) {\n            program.maxUniformLength = Math.max(program.maxUniformLength, GLctx.getActiveUniform(program, i).name.length+1);\n          }\n        }\n        HEAP32[((p)>>2)] = program.maxUniformLength;\n      } else if (pname == 0x8B8A /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */) {\n        if (!program.maxAttributeLength) {\n          for (var i = 0; i < GLctx.getProgramParameter(program, 0x8B89/*GL_ACTIVE_ATTRIBUTES*/); ++i) {\n            program.maxAttributeLength = Math.max(program.maxAttributeLength, GLctx.getActiveAttrib(program, i).name.length+1);\n          }\n        }\n        HEAP32[((p)>>2)] = program.maxAttributeLength;\n      } else if (pname == 0x8A35 /* GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */) {\n        if (!program.maxUniformBlockNameLength) {\n          for (var i = 0; i < GLctx.getProgramParameter(program, 0x8A36/*GL_ACTIVE_UNIFORM_BLOCKS*/); ++i) {\n            program.maxUniformBlockNameLength = Math.max(program.maxUniformBlockNameLength, GLctx.getActiveUniformBlockName(program, i).length+1);\n          }\n        }\n        HEAP32[((p)>>2)] = program.maxUniformBlockNameLength;\n      } else {\n        HEAP32[((p)>>2)] = GLctx.getProgramParameter(program, pname);\n      }\n    }\n\n  function _glGetShaderInfoLog(shader, maxLength, length, infoLog) {\n      var log = GLctx.getShaderInfoLog(GL.shaders[shader]);\n      if (log === null) log = '(unknown error)';\n      var numBytesWrittenExclNull = (maxLength > 0 && infoLog) ? stringToUTF8(log, infoLog, maxLength) : 0;\n      if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;\n    }\n\n  function _glGetShaderiv(shader, pname, p) {\n      if (!p) {\n        // GLES2 specification does not specify how to behave if p is a null pointer. Since calling this function does not make sense\n        // if p == null, issue a GL error to notify user about it.\n        GL.recordError(0x501 /* GL_INVALID_VALUE */);\n        return;\n      }\n      if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH\n        var log = GLctx.getShaderInfoLog(GL.shaders[shader]);\n        if (log === null) log = '(unknown error)';\n        // The GLES2 specification says that if the shader has an empty info log,\n        // a value of 0 is returned. Otherwise the log has a null char appended.\n        // (An empty string is falsey, so we can just check that instead of\n        // looking at log.length.)\n        var logLength = log ? log.length + 1 : 0;\n        HEAP32[((p)>>2)] = logLength;\n      } else if (pname == 0x8B88) { // GL_SHADER_SOURCE_LENGTH\n        var source = GLctx.getShaderSource(GL.shaders[shader]);\n        // source may be a null, or the empty string, both of which are falsey\n        // values that we report a 0 length for.\n        var sourceLength = source ? source.length + 1 : 0;\n        HEAP32[((p)>>2)] = sourceLength;\n      } else {\n        HEAP32[((p)>>2)] = GLctx.getShaderParameter(GL.shaders[shader], pname);\n      }\n    }\n\n  function stringToNewUTF8(jsString) {\n      var length = lengthBytesUTF8(jsString)+1;\n      var cString = _malloc(length);\n      stringToUTF8(jsString, cString, length);\n      return cString;\n    }\n  function _glGetString(name_) {\n      var ret = GL.stringCache[name_];\n      if (!ret) {\n        switch (name_) {\n          case 0x1F03 /* GL_EXTENSIONS */:\n            var exts = GLctx.getSupportedExtensions() || []; // .getSupportedExtensions() can return null if context is lost, so coerce to empty array.\n            exts = exts.concat(exts.map(function(e) { return \"GL_\" + e; }));\n            ret = stringToNewUTF8(exts.join(' '));\n            break;\n          case 0x1F00 /* GL_VENDOR */:\n          case 0x1F01 /* GL_RENDERER */:\n          case 0x9245 /* UNMASKED_VENDOR_WEBGL */:\n          case 0x9246 /* UNMASKED_RENDERER_WEBGL */:\n            var s = GLctx.getParameter(name_);\n            if (!s) {\n              GL.recordError(0x500/*GL_INVALID_ENUM*/);\n            }\n            ret = s && stringToNewUTF8(s);\n            break;\n  \n          case 0x1F02 /* GL_VERSION */:\n            var glVersion = GLctx.getParameter(0x1F02 /*GL_VERSION*/);\n            // return GLES version string corresponding to the version of the WebGL context\n            if (true) glVersion = 'OpenGL ES 3.0 (' + glVersion + ')';\n            else\n            {\n              glVersion = 'OpenGL ES 2.0 (' + glVersion + ')';\n            }\n            ret = stringToNewUTF8(glVersion);\n            break;\n          case 0x8B8C /* GL_SHADING_LANGUAGE_VERSION */:\n            var glslVersion = GLctx.getParameter(0x8B8C /*GL_SHADING_LANGUAGE_VERSION*/);\n            // extract the version number 'N.M' from the string 'WebGL GLSL ES N.M ...'\n            var ver_re = /^WebGL GLSL ES ([0-9]\\.[0-9][0-9]?)(?:$| .*)/;\n            var ver_num = glslVersion.match(ver_re);\n            if (ver_num !== null) {\n              if (ver_num[1].length == 3) ver_num[1] = ver_num[1] + '0'; // ensure minor version has 2 digits\n              glslVersion = 'OpenGL ES GLSL ES ' + ver_num[1] + ' (' + glslVersion + ')';\n            }\n            ret = stringToNewUTF8(glslVersion);\n            break;\n          default:\n            GL.recordError(0x500/*GL_INVALID_ENUM*/);\n            // fall through\n        }\n        GL.stringCache[name_] = ret;\n      }\n      return ret;\n    }\n\n  /** @suppress {checkTypes} */\n  function jstoi_q(str) {\n      return parseInt(str);\n    }\n  function _glGetUniformLocation(program, name) {\n      // Returns the index of '[' character in an uniform that represents an array of uniforms (e.g. colors[10])\n      // Closure does counterproductive inlining: https://github.com/google/closure-compiler/issues/3203, so prevent\n      // inlining manually.\n      /** @noinline */\n      function getLeftBracePos(name) {\n        return name.slice(-1) == ']' && name.lastIndexOf('[');\n      }\n  \n      name = UTF8ToString(name);\n  \n      program = GL.programs[program];\n      var uniformLocsById = program.uniformLocsById; // Maps GLuint -> WebGLUniformLocation\n      var uniformSizeAndIdsByName = program.uniformSizeAndIdsByName; // Maps name -> [uniform array length, GLuint]\n      var i, j;\n      var arrayIndex = 0;\n      var uniformBaseName = name;\n  \n      // Invariant: when populating integer IDs for uniform locations, we must maintain the precondition that\n      // arrays reside in contiguous addresses, i.e. for a 'vec4 colors[10];', colors[4] must be at location colors[0]+4.\n      // However, user might call glGetUniformLocation(program, \"colors\") for an array, so we cannot discover based on the user\n      // input arguments whether the uniform we are dealing with is an array. The only way to discover which uniforms are arrays\n      // is to enumerate over all the active uniforms in the program.\n      var leftBrace = getLeftBracePos(name);\n  \n      // On the first time invocation of glGetUniformLocation on this shader program:\n      // initialize cache data structures and discover which uniforms are arrays.\n      if (!uniformLocsById) {\n        // maps GLint integer locations to WebGLUniformLocations\n        program.uniformLocsById = uniformLocsById = {};\n        // maps integer locations back to uniform name strings, so that we can lazily fetch uniform array locations\n        program.uniformArrayNamesById = {};\n  \n        for (i = 0; i < GLctx.getProgramParameter(program, 0x8B86/*GL_ACTIVE_UNIFORMS*/); ++i) {\n          var u = GLctx.getActiveUniform(program, i);\n          var nm = u.name;\n          var sz = u.size;\n          var lb = getLeftBracePos(nm);\n          var arrayName = lb > 0 ? nm.slice(0, lb) : nm;\n  \n          // Assign a new location.\n          var id = program.uniformIdCounter;\n          program.uniformIdCounter += sz;\n          // Eagerly get the location of the uniformArray[0] base element.\n          // The remaining indices >0 will be left for lazy evaluation to\n          // improve performance. Those may never be needed to fetch, if the\n          // application fills arrays always in full starting from the first\n          // element of the array.\n          uniformSizeAndIdsByName[arrayName] = [sz, id];\n  \n          // Store placeholder integers in place that highlight that these\n          // >0 index locations are array indices pending population.\n          for(j = 0; j < sz; ++j) {\n            uniformLocsById[id] = j;\n            program.uniformArrayNamesById[id++] = arrayName;\n          }\n        }\n      }\n  \n      // If user passed an array accessor \"[index]\", parse the array index off the accessor.\n      if (leftBrace > 0) {\n        arrayIndex = jstoi_q(name.slice(leftBrace + 1)) >>> 0; // \"index]\", coerce parseInt(']') with >>>0 to treat \"foo[]\" as \"foo[0]\" and foo[-1] as unsigned out-of-bounds.\n        uniformBaseName = name.slice(0, leftBrace);\n      }\n  \n      // Have we cached the location of this uniform before?\n      var sizeAndId = uniformSizeAndIdsByName[uniformBaseName]; // A pair [array length, GLint of the uniform location]\n  \n      // If an uniform with this name exists, and if its index is within the array limits (if it's even an array),\n      // query the WebGLlocation, or return an existing cached location.\n      if (sizeAndId && arrayIndex < sizeAndId[0]) {\n        arrayIndex += sizeAndId[1]; // Add the base location of the uniform to the array index offset.\n        if ((uniformLocsById[arrayIndex] = uniformLocsById[arrayIndex] || GLctx.getUniformLocation(program, name))) {\n          return arrayIndex;\n        }\n      }\n      return -1;\n    }\n\n  function _glIsBuffer(buffer) {\n      var b = GL.buffers[buffer];\n      if (!b) return 0;\n      return GLctx.isBuffer(b);\n    }\n\n  function _glIsShader(shader) {\n      var s = GL.shaders[shader];\n      if (!s) return 0;\n      return GLctx.isShader(s);\n    }\n\n  function _glLineWidth(x0) { GLctx['lineWidth'](x0) }\n\n  function _glLinkProgram(program) {\n      program = GL.programs[program];\n      GLctx.linkProgram(program);\n      // Invalidate earlier computed uniform->ID mappings, those have now become stale\n      program.uniformLocsById = 0; // Mark as null-like so that glGetUniformLocation() knows to populate this again.\n      program.uniformSizeAndIdsByName = {};\n  \n    }\n\n  function _glPixelStorei(pname, param) {\n      if (pname == 0xCF5 /* GL_UNPACK_ALIGNMENT */) {\n        GL.unpackAlignment = param;\n      }\n      GLctx.pixelStorei(pname, param);\n    }\n\n  function _glReadBuffer(x0) { GLctx['readBuffer'](x0) }\n\n  function computeUnpackAlignedImageSize(width, height, sizePerPixel, alignment) {\n      function roundedToNextMultipleOf(x, y) {\n        return (x + y - 1) & -y;\n      }\n      var plainRowSize = width * sizePerPixel;\n      var alignedRowSize = roundedToNextMultipleOf(plainRowSize, alignment);\n      return height * alignedRowSize;\n    }\n  \n  function __colorChannelsInGlTextureFormat(format) {\n      // Micro-optimizations for size: map format to size by subtracting smallest enum value (0x1902) from all values first.\n      // Also omit the most common size value (1) from the list, which is assumed by formats not on the list.\n      var colorChannels = {\n        // 0x1902 /* GL_DEPTH_COMPONENT */ - 0x1902: 1,\n        // 0x1906 /* GL_ALPHA */ - 0x1902: 1,\n        5: 3,\n        6: 4,\n        // 0x1909 /* GL_LUMINANCE */ - 0x1902: 1,\n        8: 2,\n        29502: 3,\n        29504: 4,\n        // 0x1903 /* GL_RED */ - 0x1902: 1,\n        26917: 2,\n        26918: 2,\n        // 0x8D94 /* GL_RED_INTEGER */ - 0x1902: 1,\n        29846: 3,\n        29847: 4\n      };\n      return colorChannels[format - 0x1902]||1;\n    }\n  \n  function heapObjectForWebGLType(type) {\n      // Micro-optimization for size: Subtract lowest GL enum number (0x1400/* GL_BYTE */) from type to compare\n      // smaller values for the heap, for shorter generated code size.\n      // Also the type HEAPU16 is not tested for explicitly, but any unrecognized type will return out HEAPU16.\n      // (since most types are HEAPU16)\n      type -= 0x1400;\n      if (type == 0) return HEAP8;\n  \n      if (type == 1) return HEAPU8;\n  \n      if (type == 2) return HEAP16;\n  \n      if (type == 4) return HEAP32;\n  \n      if (type == 6) return HEAPF32;\n  \n      if (type == 5\n        || type == 28922\n        || type == 28520\n        || type == 30779\n        || type == 30782\n        )\n        return HEAPU32;\n  \n      return HEAPU16;\n    }\n  \n  function heapAccessShiftForWebGLHeap(heap) {\n      return 31 - Math.clz32(heap.BYTES_PER_ELEMENT);\n    }\n  function emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, internalFormat) {\n      var heap = heapObjectForWebGLType(type);\n      var shift = heapAccessShiftForWebGLHeap(heap);\n      var byteSize = 1<<shift;\n      var sizePerPixel = __colorChannelsInGlTextureFormat(format) * byteSize;\n      var bytes = computeUnpackAlignedImageSize(width, height, sizePerPixel, GL.unpackAlignment);\n      return heap.subarray(pixels >> shift, pixels + bytes >> shift);\n    }\n  function _glReadPixels(x, y, width, height, format, type, pixels) {\n      if (true) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.\n        if (GLctx.currentPixelPackBufferBinding) {\n          GLctx.readPixels(x, y, width, height, format, type, pixels);\n        } else {\n          var heap = heapObjectForWebGLType(type);\n          GLctx.readPixels(x, y, width, height, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));\n        }\n        return;\n      }\n      var pixelData = emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, format);\n      if (!pixelData) {\n        GL.recordError(0x500/*GL_INVALID_ENUM*/);\n        return;\n      }\n      GLctx.readPixels(x, y, width, height, format, type, pixelData);\n    }\n\n  function _glRenderbufferStorage(x0, x1, x2, x3) { GLctx['renderbufferStorage'](x0, x1, x2, x3) }\n\n  function _glRenderbufferStorageMultisample(x0, x1, x2, x3, x4) { GLctx['renderbufferStorageMultisample'](x0, x1, x2, x3, x4) }\n\n  function _glScissor(x0, x1, x2, x3) { GLctx['scissor'](x0, x1, x2, x3) }\n\n  function _glShaderSource(shader, count, string, length) {\n      var source = GL.getSource(shader, count, string, length);\n  \n      GLctx.shaderSource(GL.shaders[shader], source);\n    }\n\n  function _glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels) {\n      if (true) {\n        // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.\n        if (GLctx.currentPixelUnpackBufferBinding) {\n          GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, pixels);\n        } else if (pixels) {\n          var heap = heapObjectForWebGLType(type);\n          GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));\n        } else {\n          GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, null);\n        }\n        return;\n      }\n      GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, pixels ? emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, internalFormat) : null);\n    }\n\n  function _glTexImage3D(target, level, internalFormat, width, height, depth, border, format, type, pixels) {\n      if (GLctx.currentPixelUnpackBufferBinding) {\n        GLctx['texImage3D'](target, level, internalFormat, width, height, depth, border, format, type, pixels);\n      } else if (pixels) {\n        var heap = heapObjectForWebGLType(type);\n        GLctx['texImage3D'](target, level, internalFormat, width, height, depth, border, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));\n      } else {\n        GLctx['texImage3D'](target, level, internalFormat, width, height, depth, border, format, type, null);\n      }\n    }\n\n  function _glTexParameteri(x0, x1, x2) { GLctx['texParameteri'](x0, x1, x2) }\n\n  function _glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels) {\n      if (GLctx.currentPixelUnpackBufferBinding) {\n        GLctx['texSubImage3D'](target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);\n      } else if (pixels) {\n        var heap = heapObjectForWebGLType(type);\n        GLctx['texSubImage3D'](target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));\n      } else {\n        GLctx['texSubImage3D'](target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, null);\n      }\n    }\n\n  function webglGetUniformLocation(location) {\n      var p = GLctx.currentProgram;\n      var webglLoc = p.uniformLocsById[location];\n      // p.uniformLocsById[location] stores either an integer, or a WebGLUniformLocation.\n  \n      // If an integer, we have not yet bound the location, so do it now. The integer value specifies the array index\n      // we should bind to.\n      if (webglLoc >= 0) {\n        p.uniformLocsById[location] = webglLoc = GLctx.getUniformLocation(p, p.uniformArrayNamesById[location] + (webglLoc > 0 ? '[' + webglLoc + ']' : ''));\n      }\n      // Else an already cached WebGLUniformLocation, return it.\n      return webglLoc;\n    }\n  function _glUniform1f(location, v0) {\n      GLctx.uniform1f(webglGetUniformLocation(location), v0);\n    }\n\n  function _glUniform1fv(location, count, value) {\n  \n      GLctx.uniform1fv(webglGetUniformLocation(location), HEAPF32, value>>2, count);\n    }\n\n  function _glUniform1i(location, v0) {\n      GLctx.uniform1i(webglGetUniformLocation(location), v0);\n    }\n\n  function _glUniform1iv(location, count, value) {\n  \n      GLctx.uniform1iv(webglGetUniformLocation(location), HEAP32, value>>2, count);\n    }\n\n  function _glUniform2fv(location, count, value) {\n  \n      GLctx.uniform2fv(webglGetUniformLocation(location), HEAPF32, value>>2, count*2);\n    }\n\n  function _glUniform2iv(location, count, value) {\n  \n      GLctx.uniform2iv(webglGetUniformLocation(location), HEAP32, value>>2, count*2);\n    }\n\n  function _glUniform3fv(location, count, value) {\n  \n      GLctx.uniform3fv(webglGetUniformLocation(location), HEAPF32, value>>2, count*3);\n    }\n\n  function _glUniform3iv(location, count, value) {\n  \n      GLctx.uniform3iv(webglGetUniformLocation(location), HEAP32, value>>2, count*3);\n    }\n\n  function _glUniform4fv(location, count, value) {\n  \n      GLctx.uniform4fv(webglGetUniformLocation(location), HEAPF32, value>>2, count*4);\n    }\n\n  function _glUniform4iv(location, count, value) {\n  \n      GLctx.uniform4iv(webglGetUniformLocation(location), HEAP32, value>>2, count*4);\n    }\n\n  function _glUniformMatrix4fv(location, count, transpose, value) {\n  \n      GLctx.uniformMatrix4fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*16);\n    }\n\n  function _glUseProgram(program) {\n      program = GL.programs[program];\n      GLctx.useProgram(program);\n      // Record the currently active program so that we can access the uniform\n      // mapping table of that program.\n      GLctx.currentProgram = program;\n    }\n\n  function _glVertexAttrib1f(x0, x1) { GLctx['vertexAttrib1f'](x0, x1) }\n\n  function _glVertexAttrib2f(x0, x1, x2) { GLctx['vertexAttrib2f'](x0, x1, x2) }\n\n  function _glVertexAttribPointer(index, size, type, normalized, stride, ptr) {\n      GLctx.vertexAttribPointer(index, size, type, !!normalized, stride, ptr);\n    }\n\n  function _glViewport(x0, x1, x2, x3) { GLctx['viewport'](x0, x1, x2, x3) }\n\n  /** @constructor */\n  function GLFW_Window(id, width, height, title, monitor, share) {\n        this.id = id;\n        this.x = 0;\n        this.y = 0;\n        this.fullscreen = false; // Used to determine if app in fullscreen mode\n        this.storedX = 0; // Used to store X before fullscreen\n        this.storedY = 0; // Used to store Y before fullscreen\n        this.width = width;\n        this.height = height;\n        this.storedWidth = width; // Used to store width before fullscreen\n        this.storedHeight = height; // Used to store height before fullscreen\n        this.title = title;\n        this.monitor = monitor;\n        this.share = share;\n        this.attributes = GLFW.hints;\n        this.inputModes = {\n          0x00033001:0x00034001, // GLFW_CURSOR (GLFW_CURSOR_NORMAL)\n          0x00033002:0, // GLFW_STICKY_KEYS\n          0x00033003:0, // GLFW_STICKY_MOUSE_BUTTONS\n        };\n        this.buttons = 0;\n        this.keys = new Array();\n        this.domKeys = new Array();\n        this.shouldClose = 0;\n        this.title = null;\n        this.windowPosFunc = null; // GLFWwindowposfun\n        this.windowSizeFunc = null; // GLFWwindowsizefun\n        this.windowCloseFunc = null; // GLFWwindowclosefun\n        this.windowRefreshFunc = null; // GLFWwindowrefreshfun\n        this.windowFocusFunc = null; // GLFWwindowfocusfun\n        this.windowIconifyFunc = null; // GLFWwindowiconifyfun\n        this.framebufferSizeFunc = null; // GLFWframebuffersizefun\n        this.mouseButtonFunc = null; // GLFWmousebuttonfun\n        this.cursorPosFunc = null; // GLFWcursorposfun\n        this.cursorEnterFunc = null; // GLFWcursorenterfun\n        this.scrollFunc = null; // GLFWscrollfun\n        this.dropFunc = null; // GLFWdropfun\n        this.keyFunc = null; // GLFWkeyfun\n        this.charFunc = null; // GLFWcharfun\n        this.userptr = null;\n      }\n  var GLFW={WindowFromId:function(id) {\n        if (id <= 0 || !GLFW.windows) return null;\n        return GLFW.windows[id - 1];\n      },joystickFunc:null,errorFunc:null,monitorFunc:null,active:null,windows:null,monitors:null,monitorString:null,versionString:null,initialTime:null,extensions:null,hints:null,defaultHints:{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},DOMToGLFWKeyCode:function(keycode) {\n        switch (keycode) {\n          // these keycodes are only defined for GLFW3, assume they are the same for GLFW2\n          case 0x20:return 32; // DOM_VK_SPACE -> GLFW_KEY_SPACE\n          case 0xDE:return 39; // DOM_VK_QUOTE -> GLFW_KEY_APOSTROPHE\n          case 0xBC:return 44; // DOM_VK_COMMA -> GLFW_KEY_COMMA\n          case 0xAD:return 45; // DOM_VK_HYPHEN_MINUS -> GLFW_KEY_MINUS\n          case 0xBD:return 45; // DOM_VK_MINUS -> GLFW_KEY_MINUS\n          case 0xBE:return 46; // DOM_VK_PERIOD -> GLFW_KEY_PERIOD\n          case 0xBF:return 47; // DOM_VK_SLASH -> GLFW_KEY_SLASH\n          case 0x30:return 48; // DOM_VK_0 -> GLFW_KEY_0\n          case 0x31:return 49; // DOM_VK_1 -> GLFW_KEY_1\n          case 0x32:return 50; // DOM_VK_2 -> GLFW_KEY_2\n          case 0x33:return 51; // DOM_VK_3 -> GLFW_KEY_3\n          case 0x34:return 52; // DOM_VK_4 -> GLFW_KEY_4\n          case 0x35:return 53; // DOM_VK_5 -> GLFW_KEY_5\n          case 0x36:return 54; // DOM_VK_6 -> GLFW_KEY_6\n          case 0x37:return 55; // DOM_VK_7 -> GLFW_KEY_7\n          case 0x38:return 56; // DOM_VK_8 -> GLFW_KEY_8\n          case 0x39:return 57; // DOM_VK_9 -> GLFW_KEY_9\n          case 0x3B:return 59; // DOM_VK_SEMICOLON -> GLFW_KEY_SEMICOLON\n          case 0x3D:return 61; // DOM_VK_EQUALS -> GLFW_KEY_EQUAL\n          case 0xBB:return 61; // DOM_VK_EQUALS -> GLFW_KEY_EQUAL\n          case 0x41:return 65; // DOM_VK_A -> GLFW_KEY_A\n          case 0x42:return 66; // DOM_VK_B -> GLFW_KEY_B\n          case 0x43:return 67; // DOM_VK_C -> GLFW_KEY_C\n          case 0x44:return 68; // DOM_VK_D -> GLFW_KEY_D\n          case 0x45:return 69; // DOM_VK_E -> GLFW_KEY_E\n          case 0x46:return 70; // DOM_VK_F -> GLFW_KEY_F\n          case 0x47:return 71; // DOM_VK_G -> GLFW_KEY_G\n          case 0x48:return 72; // DOM_VK_H -> GLFW_KEY_H\n          case 0x49:return 73; // DOM_VK_I -> GLFW_KEY_I\n          case 0x4A:return 74; // DOM_VK_J -> GLFW_KEY_J\n          case 0x4B:return 75; // DOM_VK_K -> GLFW_KEY_K\n          case 0x4C:return 76; // DOM_VK_L -> GLFW_KEY_L\n          case 0x4D:return 77; // DOM_VK_M -> GLFW_KEY_M\n          case 0x4E:return 78; // DOM_VK_N -> GLFW_KEY_N\n          case 0x4F:return 79; // DOM_VK_O -> GLFW_KEY_O\n          case 0x50:return 80; // DOM_VK_P -> GLFW_KEY_P\n          case 0x51:return 81; // DOM_VK_Q -> GLFW_KEY_Q\n          case 0x52:return 82; // DOM_VK_R -> GLFW_KEY_R\n          case 0x53:return 83; // DOM_VK_S -> GLFW_KEY_S\n          case 0x54:return 84; // DOM_VK_T -> GLFW_KEY_T\n          case 0x55:return 85; // DOM_VK_U -> GLFW_KEY_U\n          case 0x56:return 86; // DOM_VK_V -> GLFW_KEY_V\n          case 0x57:return 87; // DOM_VK_W -> GLFW_KEY_W\n          case 0x58:return 88; // DOM_VK_X -> GLFW_KEY_X\n          case 0x59:return 89; // DOM_VK_Y -> GLFW_KEY_Y\n          case 0x5a:return 90; // DOM_VK_Z -> GLFW_KEY_Z\n          case 0xDB:return 91; // DOM_VK_OPEN_BRACKET -> GLFW_KEY_LEFT_BRACKET\n          case 0xDC:return 92; // DOM_VK_BACKSLASH -> GLFW_KEY_BACKSLASH\n          case 0xDD:return 93; // DOM_VK_CLOSE_BRACKET -> GLFW_KEY_RIGHT_BRACKET\n          case 0xC0:return 94; // DOM_VK_BACK_QUOTE -> GLFW_KEY_GRAVE_ACCENT\n  \n          case 0x1B:return 256; // DOM_VK_ESCAPE -> GLFW_KEY_ESCAPE\n          case 0x0D:return 257; // DOM_VK_RETURN -> GLFW_KEY_ENTER\n          case 0x09:return 258; // DOM_VK_TAB -> GLFW_KEY_TAB\n          case 0x08:return 259; // DOM_VK_BACK -> GLFW_KEY_BACKSPACE\n          case 0x2D:return 260; // DOM_VK_INSERT -> GLFW_KEY_INSERT\n          case 0x2E:return 261; // DOM_VK_DELETE -> GLFW_KEY_DELETE\n          case 0x27:return 262; // DOM_VK_RIGHT -> GLFW_KEY_RIGHT\n          case 0x25:return 263; // DOM_VK_LEFT -> GLFW_KEY_LEFT\n          case 0x28:return 264; // DOM_VK_DOWN -> GLFW_KEY_DOWN\n          case 0x26:return 265; // DOM_VK_UP -> GLFW_KEY_UP\n          case 0x21:return 266; // DOM_VK_PAGE_UP -> GLFW_KEY_PAGE_UP\n          case 0x22:return 267; // DOM_VK_PAGE_DOWN -> GLFW_KEY_PAGE_DOWN\n          case 0x24:return 268; // DOM_VK_HOME -> GLFW_KEY_HOME\n          case 0x23:return 269; // DOM_VK_END -> GLFW_KEY_END\n          case 0x14:return 280; // DOM_VK_CAPS_LOCK -> GLFW_KEY_CAPS_LOCK\n          case 0x91:return 281; // DOM_VK_SCROLL_LOCK -> GLFW_KEY_SCROLL_LOCK\n          case 0x90:return 282; // DOM_VK_NUM_LOCK -> GLFW_KEY_NUM_LOCK\n          case 0x2C:return 283; // DOM_VK_SNAPSHOT -> GLFW_KEY_PRINT_SCREEN\n          case 0x13:return 284; // DOM_VK_PAUSE -> GLFW_KEY_PAUSE\n          case 0x70:return 290; // DOM_VK_F1 -> GLFW_KEY_F1\n          case 0x71:return 291; // DOM_VK_F2 -> GLFW_KEY_F2\n          case 0x72:return 292; // DOM_VK_F3 -> GLFW_KEY_F3\n          case 0x73:return 293; // DOM_VK_F4 -> GLFW_KEY_F4\n          case 0x74:return 294; // DOM_VK_F5 -> GLFW_KEY_F5\n          case 0x75:return 295; // DOM_VK_F6 -> GLFW_KEY_F6\n          case 0x76:return 296; // DOM_VK_F7 -> GLFW_KEY_F7\n          case 0x77:return 297; // DOM_VK_F8 -> GLFW_KEY_F8\n          case 0x78:return 298; // DOM_VK_F9 -> GLFW_KEY_F9\n          case 0x79:return 299; // DOM_VK_F10 -> GLFW_KEY_F10\n          case 0x7A:return 300; // DOM_VK_F11 -> GLFW_KEY_F11\n          case 0x7B:return 301; // DOM_VK_F12 -> GLFW_KEY_F12\n          case 0x7C:return 302; // DOM_VK_F13 -> GLFW_KEY_F13\n          case 0x7D:return 303; // DOM_VK_F14 -> GLFW_KEY_F14\n          case 0x7E:return 304; // DOM_VK_F15 -> GLFW_KEY_F15\n          case 0x7F:return 305; // DOM_VK_F16 -> GLFW_KEY_F16\n          case 0x80:return 306; // DOM_VK_F17 -> GLFW_KEY_F17\n          case 0x81:return 307; // DOM_VK_F18 -> GLFW_KEY_F18\n          case 0x82:return 308; // DOM_VK_F19 -> GLFW_KEY_F19\n          case 0x83:return 309; // DOM_VK_F20 -> GLFW_KEY_F20\n          case 0x84:return 310; // DOM_VK_F21 -> GLFW_KEY_F21\n          case 0x85:return 311; // DOM_VK_F22 -> GLFW_KEY_F22\n          case 0x86:return 312; // DOM_VK_F23 -> GLFW_KEY_F23\n          case 0x87:return 313; // DOM_VK_F24 -> GLFW_KEY_F24\n          case 0x88:return 314; // 0x88 (not used?) -> GLFW_KEY_F25\n          case 0x60:return 320; // DOM_VK_NUMPAD0 -> GLFW_KEY_KP_0\n          case 0x61:return 321; // DOM_VK_NUMPAD1 -> GLFW_KEY_KP_1\n          case 0x62:return 322; // DOM_VK_NUMPAD2 -> GLFW_KEY_KP_2\n          case 0x63:return 323; // DOM_VK_NUMPAD3 -> GLFW_KEY_KP_3\n          case 0x64:return 324; // DOM_VK_NUMPAD4 -> GLFW_KEY_KP_4\n          case 0x65:return 325; // DOM_VK_NUMPAD5 -> GLFW_KEY_KP_5\n          case 0x66:return 326; // DOM_VK_NUMPAD6 -> GLFW_KEY_KP_6\n          case 0x67:return 327; // DOM_VK_NUMPAD7 -> GLFW_KEY_KP_7\n          case 0x68:return 328; // DOM_VK_NUMPAD8 -> GLFW_KEY_KP_8\n          case 0x69:return 329; // DOM_VK_NUMPAD9 -> GLFW_KEY_KP_9\n          case 0x6E:return 330; // DOM_VK_DECIMAL -> GLFW_KEY_KP_DECIMAL\n          case 0x6F:return 331; // DOM_VK_DIVIDE -> GLFW_KEY_KP_DIVIDE\n          case 0x6A:return 332; // DOM_VK_MULTIPLY -> GLFW_KEY_KP_MULTIPLY\n          case 0x6D:return 333; // DOM_VK_SUBTRACT -> GLFW_KEY_KP_SUBTRACT\n          case 0x6B:return 334; // DOM_VK_ADD -> GLFW_KEY_KP_ADD\n          // case 0x0D:return 335; // DOM_VK_RETURN -> GLFW_KEY_KP_ENTER (DOM_KEY_LOCATION_RIGHT)\n          // case 0x61:return 336; // DOM_VK_EQUALS -> GLFW_KEY_KP_EQUAL (DOM_KEY_LOCATION_RIGHT)\n          case 0x10:return 340; // DOM_VK_SHIFT -> GLFW_KEY_LEFT_SHIFT\n          case 0x11:return 341; // DOM_VK_CONTROL -> GLFW_KEY_LEFT_CONTROL\n          case 0x12:return 342; // DOM_VK_ALT -> GLFW_KEY_LEFT_ALT\n          case 0x5B:return 343; // DOM_VK_WIN -> GLFW_KEY_LEFT_SUPER\n          // case 0x10:return 344; // DOM_VK_SHIFT -> GLFW_KEY_RIGHT_SHIFT (DOM_KEY_LOCATION_RIGHT)\n          // case 0x11:return 345; // DOM_VK_CONTROL -> GLFW_KEY_RIGHT_CONTROL (DOM_KEY_LOCATION_RIGHT)\n          // case 0x12:return 346; // DOM_VK_ALT -> GLFW_KEY_RIGHT_ALT (DOM_KEY_LOCATION_RIGHT)\n          // case 0x5B:return 347; // DOM_VK_WIN -> GLFW_KEY_RIGHT_SUPER (DOM_KEY_LOCATION_RIGHT)\n          case 0x5D:return 348; // DOM_VK_CONTEXT_MENU -> GLFW_KEY_MENU\n          // XXX: GLFW_KEY_WORLD_1, GLFW_KEY_WORLD_2 what are these?\n          default:return -1; // GLFW_KEY_UNKNOWN\n        };\n      },getModBits:function(win) {\n        var mod = 0;\n        if (win.keys[340]) mod |= 0x0001; // GLFW_MOD_SHIFT\n        if (win.keys[341]) mod |= 0x0002; // GLFW_MOD_CONTROL\n        if (win.keys[342]) mod |= 0x0004; // GLFW_MOD_ALT\n        if (win.keys[343]) mod |= 0x0008; // GLFW_MOD_SUPER\n        return mod;\n      },onKeyPress:function(event) {\n        if (!GLFW.active || !GLFW.active.charFunc) return;\n        if (event.ctrlKey || event.metaKey) return;\n  \n        // correct unicode charCode is only available with onKeyPress event\n        var charCode = event.charCode;\n        if (charCode == 0 || (charCode >= 0x00 && charCode <= 0x1F)) return;\n  \n        wasmTable.get(GLFW.active.charFunc)(GLFW.active.id, charCode);\n      },onKeyChanged:function(keyCode, status) {\n        if (!GLFW.active) return;\n  \n        var key = GLFW.DOMToGLFWKeyCode(keyCode);\n        if (key == -1) return;\n  \n        var repeat = status && GLFW.active.keys[key];\n        GLFW.active.keys[key] = status;\n        GLFW.active.domKeys[keyCode] = status;\n        if (!GLFW.active.keyFunc) return;\n  \n        if (repeat) status = 2; // GLFW_REPEAT\n        wasmTable.get(GLFW.active.keyFunc)(GLFW.active.id, key, keyCode, status, GLFW.getModBits(GLFW.active));\n      },onGamepadConnected:function(event) {\n        GLFW.refreshJoysticks();\n      },onGamepadDisconnected:function(event) {\n        GLFW.refreshJoysticks();\n      },onKeydown:function(event) {\n        GLFW.onKeyChanged(event.keyCode, 1); // GLFW_PRESS or GLFW_REPEAT\n  \n        // This logic comes directly from the sdl implementation. We cannot\n        // call preventDefault on all keydown events otherwise onKeyPress will\n        // not get called\n        if (event.keyCode === 8 /* backspace */ || event.keyCode === 9 /* tab */) {\n          event.preventDefault();\n        }\n      },onKeyup:function(event) {\n        GLFW.onKeyChanged(event.keyCode, 0); // GLFW_RELEASE\n      },onBlur:function(event) {\n        if (!GLFW.active) return;\n  \n        for (var i = 0; i < GLFW.active.domKeys.length; ++i) {\n          if (GLFW.active.domKeys[i]) {\n            GLFW.onKeyChanged(i, 0); // GLFW_RELEASE\n          }\n        }\n      },onMousemove:function(event) {\n        if (!GLFW.active) return;\n  \n        Browser.calculateMouseEvent(event);\n  \n        if (event.target != Module[\"canvas\"] || !GLFW.active.cursorPosFunc) return;\n  \n        wasmTable.get(GLFW.active.cursorPosFunc)(GLFW.active.id, Browser.mouseX, Browser.mouseY);\n      },DOMToGLFWMouseButton:function(event) {\n        // DOM and glfw have different button codes.\n        // See http://www.w3schools.com/jsref/event_button.asp.\n        var eventButton = event['button'];\n        if (eventButton > 0) {\n          if (eventButton == 1) {\n            eventButton = 2;\n          } else {\n            eventButton = 1;\n          }\n        }\n        return eventButton;\n      },onMouseenter:function(event) {\n        if (!GLFW.active) return;\n  \n        if (event.target != Module[\"canvas\"] || !GLFW.active.cursorEnterFunc) return;\n  \n        wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id, 1);\n      },onMouseleave:function(event) {\n        if (!GLFW.active) return;\n  \n        if (event.target != Module[\"canvas\"] || !GLFW.active.cursorEnterFunc) return;\n  \n        wasmTable.get(GLFW.active.cursorEnterFunc)(GLFW.active.id, 0);\n      },onMouseButtonChanged:function(event, status) {\n        if (!GLFW.active) return;\n  \n        Browser.calculateMouseEvent(event);\n  \n        if (event.target != Module[\"canvas\"]) return;\n  \n        var eventButton = GLFW.DOMToGLFWMouseButton(event);\n  \n        if (status == 1) { // GLFW_PRESS\n          GLFW.active.buttons |= (1 << eventButton);\n          try {\n            event.target.setCapture();\n          } catch (e) {}\n        } else {  // GLFW_RELEASE\n          GLFW.active.buttons &= ~(1 << eventButton);\n        }\n  \n        if (!GLFW.active.mouseButtonFunc) return;\n  \n        wasmTable.get(GLFW.active.mouseButtonFunc)(GLFW.active.id, eventButton, status, GLFW.getModBits(GLFW.active));\n      },onMouseButtonDown:function(event) {\n        if (!GLFW.active) return;\n        GLFW.onMouseButtonChanged(event, 1); // GLFW_PRESS\n      },onMouseButtonUp:function(event) {\n        if (!GLFW.active) return;\n        GLFW.onMouseButtonChanged(event, 0); // GLFW_RELEASE\n      },onMouseWheel:function(event) {\n        // Note the minus sign that flips browser wheel direction (positive direction scrolls page down) to native wheel direction (positive direction is mouse wheel up)\n        var delta = -Browser.getMouseWheelDelta(event);\n        delta = (delta == 0) ? 0 : (delta > 0 ? Math.max(delta, 1) : Math.min(delta, -1)); // Quantize to integer so that minimum scroll is at least +/- 1.\n        GLFW.wheelPos += delta;\n  \n        if (!GLFW.active || !GLFW.active.scrollFunc || event.target != Module['canvas']) return;\n  \n        var sx = 0;\n        var sy = 0;\n        if (event.type == 'mousewheel') {\n          sx = event.wheelDeltaX;\n          sy = event.wheelDeltaY;\n        } else {\n          sx = event.deltaX;\n          sy = event.deltaY;\n        }\n  \n        wasmTable.get(GLFW.active.scrollFunc)(GLFW.active.id, sx, sy);\n  \n        event.preventDefault();\n      },onCanvasResize:function(width, height) {\n        if (!GLFW.active) return;\n  \n        var resizeNeeded = true;\n  \n        // If the client is requesting fullscreen mode\n        if (document[\"fullscreen\"] || document[\"fullScreen\"] || document[\"mozFullScreen\"] || document[\"webkitIsFullScreen\"]) {\n          GLFW.active.storedX = GLFW.active.x;\n          GLFW.active.storedY = GLFW.active.y;\n          GLFW.active.storedWidth = GLFW.active.width;\n          GLFW.active.storedHeight = GLFW.active.height;\n          GLFW.active.x = GLFW.active.y = 0;\n          GLFW.active.width = screen.width;\n          GLFW.active.height = screen.height;\n          GLFW.active.fullscreen = true;\n  \n        // If the client is reverting from fullscreen mode\n        } else if (GLFW.active.fullscreen == true) {\n          GLFW.active.x = GLFW.active.storedX;\n          GLFW.active.y = GLFW.active.storedY;\n          GLFW.active.width = GLFW.active.storedWidth;\n          GLFW.active.height = GLFW.active.storedHeight;\n          GLFW.active.fullscreen = false;\n  \n        // If the width/height values do not match current active window sizes\n        } else if (GLFW.active.width != width || GLFW.active.height != height) {\n            GLFW.active.width = width;\n            GLFW.active.height = height;\n        } else {\n          resizeNeeded = false;\n        }\n  \n        // If any of the above conditions were true, we need to resize the canvas\n        if (resizeNeeded) {\n          // resets the canvas size to counter the aspect preservation of Browser.updateCanvasDimensions\n          Browser.setCanvasSize(GLFW.active.width, GLFW.active.height, true);\n          // TODO: Client dimensions (clientWidth/clientHeight) vs pixel dimensions (width/height) of\n          // the canvas should drive window and framebuffer size respectfully.\n          GLFW.onWindowSizeChanged();\n          GLFW.onFramebufferSizeChanged();\n        }\n      },onWindowSizeChanged:function() {\n        if (!GLFW.active) return;\n  \n        if (!GLFW.active.windowSizeFunc) return;\n  \n        wasmTable.get(GLFW.active.windowSizeFunc)(GLFW.active.id, GLFW.active.width, GLFW.active.height);\n      },onFramebufferSizeChanged:function() {\n        if (!GLFW.active) return;\n  \n        if (!GLFW.active.framebufferSizeFunc) return;\n  \n        wasmTable.get(GLFW.active.framebufferSizeFunc)(GLFW.active.id, GLFW.active.width, GLFW.active.height);\n      },getTime:function() {\n        return _emscripten_get_now() / 1000;\n      },setWindowTitle:function(winid, title) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return;\n  \n        win.title = UTF8ToString(title);\n        if (GLFW.active.id == win.id) {\n          document.title = win.title;\n        }\n      },setJoystickCallback:function(cbfun) {\n        GLFW.joystickFunc = cbfun;\n        GLFW.refreshJoysticks();\n      },joys:{},lastGamepadState:null,lastGamepadStateFrame:null,refreshJoysticks:function() {\n        // Produce a new Gamepad API sample if we are ticking a new game frame, or if not using emscripten_set_main_loop() at all to drive animation.\n        if (Browser.mainLoop.currentFrameNumber !== GLFW.lastGamepadStateFrame || !Browser.mainLoop.currentFrameNumber) {\n          GLFW.lastGamepadState = navigator.getGamepads ? navigator.getGamepads() : (navigator.webkitGetGamepads ? navigator.webkitGetGamepads : null);\n          GLFW.lastGamepadStateFrame = Browser.mainLoop.currentFrameNumber;\n  \n          for (var joy = 0; joy < GLFW.lastGamepadState.length; ++joy) {\n            var gamepad = GLFW.lastGamepadState[joy];\n  \n            if (gamepad) {\n              if (!GLFW.joys[joy]) {\n                console.log('glfw joystick connected:',joy);\n                GLFW.joys[joy] = {\n                  id: allocate(intArrayFromString(gamepad.id), ALLOC_NORMAL),\n                  buttonsCount: gamepad.buttons.length,\n                  axesCount: gamepad.axes.length,\n                  buttons: allocate(new Array(gamepad.buttons.length), ALLOC_NORMAL),\n                  axes: allocate(new Array(gamepad.axes.length*4), ALLOC_NORMAL)\n                };\n  \n                if (GLFW.joystickFunc) {\n                  wasmTable.get(GLFW.joystickFunc)(joy, 0x00040001); // GLFW_CONNECTED\n                }\n              }\n  \n              var data = GLFW.joys[joy];\n  \n              for (var i = 0; i < gamepad.buttons.length;  ++i) {\n                setValue(data.buttons + i, gamepad.buttons[i].pressed, 'i8');\n              }\n  \n              for (var i = 0; i < gamepad.axes.length; ++i) {\n                setValue(data.axes + i*4, gamepad.axes[i], 'float');\n              }\n            } else {\n              if (GLFW.joys[joy]) {\n                console.log('glfw joystick disconnected',joy);\n  \n                if (GLFW.joystickFunc) {\n                  wasmTable.get(GLFW.joystickFunc)(joy, 0x00040002); // GLFW_DISCONNECTED\n                }\n  \n                _free(GLFW.joys[joy].id);\n                _free(GLFW.joys[joy].buttons);\n                _free(GLFW.joys[joy].axes);\n  \n                delete GLFW.joys[joy];\n              }\n            }\n          }\n        }\n      },setKeyCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.keyFunc;\n        win.keyFunc = cbfun;\n        return prevcbfun;\n      },setCharCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.charFunc;\n        win.charFunc = cbfun;\n        return prevcbfun;\n      },setMouseButtonCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.mouseButtonFunc;\n        win.mouseButtonFunc = cbfun;\n        return prevcbfun;\n      },setCursorPosCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.cursorPosFunc;\n        win.cursorPosFunc = cbfun;\n        return prevcbfun;\n      },setScrollCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.scrollFunc;\n        win.scrollFunc = cbfun;\n        return prevcbfun;\n      },setDropCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.dropFunc;\n        win.dropFunc = cbfun;\n        return prevcbfun;\n      },onDrop:function(event) {\n        if (!GLFW.active || !GLFW.active.dropFunc) return;\n        if (!event.dataTransfer || !event.dataTransfer.files || event.dataTransfer.files.length == 0) return;\n  \n        event.preventDefault();\n  \n        var filenames = allocate(new Array(event.dataTransfer.files.length*4), ALLOC_NORMAL);\n        var filenamesArray = [];\n        var count = event.dataTransfer.files.length;\n  \n        // Read and save the files to emscripten's FS\n        var written = 0;\n        var drop_dir = '.glfw_dropped_files';\n        FS.createPath('/', drop_dir);\n  \n        function save(file) {\n          var path = '/' + drop_dir + '/' + file.name.replace(/\\//g, '_');\n          var reader = new FileReader();\n          reader.onloadend = function(e) {\n            if (reader.readyState != 2) { // not DONE\n              ++written;\n              console.log('failed to read dropped file: '+file.name+': '+reader.error);\n              return;\n            }\n  \n            var data = e.target.result;\n            FS.writeFile(path, new Uint8Array(data));\n            if (++written === count) {\n              wasmTable.get(GLFW.active.dropFunc)(GLFW.active.id, count, filenames);\n  \n              for (var i = 0; i < filenamesArray.length; ++i) {\n                _free(filenamesArray[i]);\n              }\n              _free(filenames);\n            }\n          };\n          reader.readAsArrayBuffer(file);\n  \n          var filename = allocate(intArrayFromString(path), ALLOC_NORMAL);\n          filenamesArray.push(filename);\n          setValue(filenames + i*4, filename, 'i8*');\n        }\n  \n        for (var i = 0; i < count; ++i) {\n          save(event.dataTransfer.files[i]);\n        }\n  \n        return false;\n      },onDragover:function(event) {\n        if (!GLFW.active || !GLFW.active.dropFunc) return;\n  \n        event.preventDefault();\n        return false;\n      },setWindowSizeCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.windowSizeFunc;\n        win.windowSizeFunc = cbfun;\n  \n        return prevcbfun;\n      },setWindowCloseCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.windowCloseFunc;\n        win.windowCloseFunc = cbfun;\n        return prevcbfun;\n      },setWindowRefreshCallback:function(winid, cbfun) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return null;\n        var prevcbfun = win.windowRefreshFunc;\n        win.windowRefreshFunc = cbfun;\n        return prevcbfun;\n      },onClickRequestPointerLock:function(e) {\n        if (!Browser.pointerLock && Module['canvas'].requestPointerLock) {\n          Module['canvas'].requestPointerLock();\n          e.preventDefault();\n        }\n      },setInputMode:function(winid, mode, value) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return;\n  \n        switch (mode) {\n          case 0x00033001: { // GLFW_CURSOR\n            switch (value) {\n              case 0x00034001: { // GLFW_CURSOR_NORMAL\n                win.inputModes[mode] = value;\n                Module['canvas'].removeEventListener('click', GLFW.onClickRequestPointerLock, true);\n                Module['canvas'].exitPointerLock();\n                break;\n              }\n              case 0x00034002: { // GLFW_CURSOR_HIDDEN\n                console.log(\"glfwSetInputMode called with GLFW_CURSOR_HIDDEN value not implemented.\");\n                break;\n              }\n              case 0x00034003: { // GLFW_CURSOR_DISABLED\n                win.inputModes[mode] = value;\n                Module['canvas'].addEventListener('click', GLFW.onClickRequestPointerLock, true);\n                Module['canvas'].requestPointerLock();\n                break;\n              }\n              default: {\n                console.log(\"glfwSetInputMode called with unknown value parameter value: \" + value + \".\");\n                break;\n              }\n            }\n            break;\n          }\n          case 0x00033002: { // GLFW_STICKY_KEYS\n            console.log(\"glfwSetInputMode called with GLFW_STICKY_KEYS mode not implemented.\");\n            break;\n          }\n          case 0x00033003: { // GLFW_STICKY_MOUSE_BUTTONS\n            console.log(\"glfwSetInputMode called with GLFW_STICKY_MOUSE_BUTTONS mode not implemented.\");\n            break;\n          }\n          default: {\n            console.log(\"glfwSetInputMode called with unknown mode parameter value: \" + mode + \".\");\n            break;\n          }\n        }\n      },getKey:function(winid, key) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return 0;\n        return win.keys[key];\n      },getMouseButton:function(winid, button) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return 0;\n        return (win.buttons & (1 << button)) > 0;\n      },getCursorPos:function(winid, x, y) {\n        setValue(x, Browser.mouseX, 'double');\n        setValue(y, Browser.mouseY, 'double');\n      },getMousePos:function(winid, x, y) {\n        setValue(x, Browser.mouseX, 'i32');\n        setValue(y, Browser.mouseY, 'i32');\n      },setCursorPos:function(winid, x, y) {\n      },getWindowPos:function(winid, x, y) {\n        var wx = 0;\n        var wy = 0;\n  \n        var win = GLFW.WindowFromId(winid);\n        if (win) {\n          wx = win.x;\n          wy = win.y;\n        }\n  \n        if (x) {\n          setValue(x, wx, 'i32');\n        }\n  \n        if (y) {\n          setValue(y, wy, 'i32');\n        }\n      },setWindowPos:function(winid, x, y) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return;\n        win.x = x;\n        win.y = y;\n      },getWindowSize:function(winid, width, height) {\n        var ww = 0;\n        var wh = 0;\n  \n        var win = GLFW.WindowFromId(winid);\n        if (win) {\n          ww = win.width;\n          wh = win.height;\n        }\n  \n        if (width) {\n          setValue(width, ww, 'i32');\n        }\n  \n        if (height) {\n          setValue(height, wh, 'i32');\n        }\n      },setWindowSize:function(winid, width, height) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return;\n  \n        if (GLFW.active.id == win.id) {\n          if (width == screen.width && height == screen.height) {\n            Browser.requestFullscreen();\n          } else {\n            Browser.exitFullscreen();\n            Browser.setCanvasSize(width, height);\n            win.width = width;\n            win.height = height;\n          }\n        }\n  \n        if (!win.windowSizeFunc) return;\n  \n        wasmTable.get(win.windowSizeFunc)(win.id, width, height);\n      },createWindow:function(width, height, title, monitor, share) {\n        var i, id;\n        for (i = 0; i < GLFW.windows.length && GLFW.windows[i] !== null; i++) {\n          // no-op\n        }\n        if (i > 0) throw \"glfwCreateWindow only supports one window at time currently\";\n  \n        // id for window\n        id = i + 1;\n  \n        // not valid\n        if (width <= 0 || height <= 0) return 0;\n  \n        if (monitor) {\n          Browser.requestFullscreen();\n        } else {\n          Browser.setCanvasSize(width, height);\n        }\n  \n        // Create context when there are no existing alive windows\n        for (i = 0; i < GLFW.windows.length && GLFW.windows[i] == null; i++) {\n          // no-op\n        }\n        var useWebGL = GLFW.hints[0x00022001] > 0; // Use WebGL when we are told to based on GLFW_CLIENT_API\n        if (i == GLFW.windows.length) {\n          if (useWebGL) {\n            var contextAttributes = {\n              antialias: (GLFW.hints[0x0002100D] > 1), // GLFW_SAMPLES\n              depth: (GLFW.hints[0x00021005] > 0),     // GLFW_DEPTH_BITS\n              stencil: (GLFW.hints[0x00021006] > 0),   // GLFW_STENCIL_BITS\n              alpha: (GLFW.hints[0x00021004] > 0)      // GLFW_ALPHA_BITS\n            }\n            Module.ctx = Browser.createContext(Module['canvas'], true, true, contextAttributes);\n          } else {\n            Browser.init();\n          }\n        }\n  \n        // If context creation failed, do not return a valid window\n        if (!Module.ctx && useWebGL) return 0;\n  \n        // Get non alive id\n        var win = new GLFW_Window(id, width, height, title, monitor, share);\n  \n        // Set window to array\n        if (id - 1 == GLFW.windows.length) {\n          GLFW.windows.push(win);\n        } else {\n          GLFW.windows[id - 1] = win;\n        }\n  \n        GLFW.active = win;\n        return win.id;\n      },destroyWindow:function(winid) {\n        var win = GLFW.WindowFromId(winid);\n        if (!win) return;\n  \n        if (win.windowCloseFunc)\n          wasmTable.get(win.windowCloseFunc)(win.id);\n  \n        GLFW.windows[win.id - 1] = null;\n        if (GLFW.active.id == win.id)\n          GLFW.active = null;\n  \n        // Destroy context when no alive windows\n        for (var i = 0; i < GLFW.windows.length; i++)\n          if (GLFW.windows[i] !== null) return;\n  \n        Module.ctx = Browser.destroyContext(Module['canvas'], true, true);\n      },swapBuffers:function(winid) {\n      },GLFW2ParamToGLFW3Param:function(param) {\n        var table = {\n          0x00030001:0, // GLFW_MOUSE_CURSOR\n          0x00030002:0, // GLFW_STICKY_KEYS\n          0x00030003:0, // GLFW_STICKY_MOUSE_BUTTONS\n          0x00030004:0, // GLFW_SYSTEM_KEYS\n          0x00030005:0, // GLFW_KEY_REPEAT\n          0x00030006:0, // GLFW_AUTO_POLL_EVENTS\n          0x00020001:0, // GLFW_OPENED\n          0x00020002:0, // GLFW_ACTIVE\n          0x00020003:0, // GLFW_ICONIFIED\n          0x00020004:0, // GLFW_ACCELERATED\n          0x00020005:0x00021001, // GLFW_RED_BITS\n          0x00020006:0x00021002, // GLFW_GREEN_BITS\n          0x00020007:0x00021003, // GLFW_BLUE_BITS\n          0x00020008:0x00021004, // GLFW_ALPHA_BITS\n          0x00020009:0x00021005, // GLFW_DEPTH_BITS\n          0x0002000A:0x00021006, // GLFW_STENCIL_BITS\n          0x0002000B:0x0002100F, // GLFW_REFRESH_RATE\n          0x0002000C:0x00021007, // GLFW_ACCUM_RED_BITS\n          0x0002000D:0x00021008, // GLFW_ACCUM_GREEN_BITS\n          0x0002000E:0x00021009, // GLFW_ACCUM_BLUE_BITS\n          0x0002000F:0x0002100A, // GLFW_ACCUM_ALPHA_BITS\n          0x00020010:0x0002100B, // GLFW_AUX_BUFFERS\n          0x00020011:0x0002100C, // GLFW_STEREO\n          0x00020012:0, // GLFW_WINDOW_NO_RESIZE\n          0x00020013:0x0002100D, // GLFW_FSAA_SAMPLES\n          0x00020014:0x00022002, // GLFW_OPENGL_VERSION_MAJOR\n          0x00020015:0x00022003, // GLFW_OPENGL_VERSION_MINOR\n          0x00020016:0x00022006, // GLFW_OPENGL_FORWARD_COMPAT\n          0x00020017:0x00022007, // GLFW_OPENGL_DEBUG_CONTEXT\n          0x00020018:0x00022008, // GLFW_OPENGL_PROFILE\n        };\n        return table[param];\n      }};\n  function _glfwCreateWindow(width, height, title, monitor, share) {\n      return GLFW.createWindow(width, height, title, monitor, share);\n    }\n\n  function _glfwDestroyWindow(winid) {\n      return GLFW.destroyWindow(winid);\n    }\n\n  function _glfwGetCursorPos(winid, x, y) {\n      GLFW.getCursorPos(winid, x, y);\n    }\n\n  function _glfwGetWindowUserPointer(winid) {\n      var win = GLFW.WindowFromId(winid);\n      if (!win) return 0;\n      return win.userptr;\n    }\n\n  function _glfwHideWindow(winid) {}\n\n  function _glfwInit() {\n      if (GLFW.windows) return 1; // GL_TRUE\n  \n      GLFW.initialTime = GLFW.getTime();\n      GLFW.hints = GLFW.defaultHints;\n      GLFW.windows = new Array()\n      GLFW.active = null;\n  \n      window.addEventListener(\"gamepadconnected\", GLFW.onGamepadConnected, true);\n      window.addEventListener(\"gamepaddisconnected\", GLFW.onGamepadDisconnected, true);\n      window.addEventListener(\"keydown\", GLFW.onKeydown, true);\n      window.addEventListener(\"keypress\", GLFW.onKeyPress, true);\n      window.addEventListener(\"keyup\", GLFW.onKeyup, true);\n      window.addEventListener(\"blur\", GLFW.onBlur, true);\n      Module[\"canvas\"].addEventListener(\"touchmove\", GLFW.onMousemove, true);\n      Module[\"canvas\"].addEventListener(\"touchstart\", GLFW.onMouseButtonDown, true);\n      Module[\"canvas\"].addEventListener(\"touchcancel\", GLFW.onMouseButtonUp, true);\n      Module[\"canvas\"].addEventListener(\"touchend\", GLFW.onMouseButtonUp, true);\n      Module[\"canvas\"].addEventListener(\"mousemove\", GLFW.onMousemove, true);\n      Module[\"canvas\"].addEventListener(\"mousedown\", GLFW.onMouseButtonDown, true);\n      Module[\"canvas\"].addEventListener(\"mouseup\", GLFW.onMouseButtonUp, true);\n      Module[\"canvas\"].addEventListener('wheel', GLFW.onMouseWheel, true);\n      Module[\"canvas\"].addEventListener('mousewheel', GLFW.onMouseWheel, true);\n      Module[\"canvas\"].addEventListener('mouseenter', GLFW.onMouseenter, true);\n      Module[\"canvas\"].addEventListener('mouseleave', GLFW.onMouseleave, true);\n      Module[\"canvas\"].addEventListener('drop', GLFW.onDrop, true);\n      Module[\"canvas\"].addEventListener('dragover', GLFW.onDragover, true);\n  \n      Browser.resizeListeners.push(function(width, height) {\n         GLFW.onCanvasResize(width, height);\n      });\n      return 1; // GL_TRUE\n    }\n\n  function _glfwMakeContextCurrent(winid) {}\n\n  function _glfwSetCharCallback(winid, cbfun) {\n      return GLFW.setCharCallback(winid, cbfun);\n    }\n\n  function _glfwSetCursorPosCallback(winid, cbfun) {\n      return GLFW.setCursorPosCallback(winid, cbfun);\n    }\n\n  function _glfwSetErrorCallback(cbfun) {\n      var prevcbfun = GLFW.errorFunc;\n      GLFW.errorFunc = cbfun;\n      return prevcbfun;\n    }\n\n  function _glfwSetKeyCallback(winid, cbfun) {\n      return GLFW.setKeyCallback(winid, cbfun);\n    }\n\n  function _glfwSetMouseButtonCallback(winid, cbfun) {\n      return GLFW.setMouseButtonCallback(winid, cbfun);\n    }\n\n  function _glfwSetScrollCallback(winid, cbfun) {\n      return GLFW.setScrollCallback(winid, cbfun);\n    }\n\n  function _glfwSetWindowSize(winid, width, height) {\n      GLFW.setWindowSize(winid, width, height);\n    }\n\n  function _glfwSetWindowSizeCallback(winid, cbfun) {\n      return GLFW.setWindowSizeCallback(winid, cbfun);\n    }\n\n  function _glfwSetWindowTitle(winid, title) {\n      GLFW.setWindowTitle(winid, title);\n    }\n\n  function _glfwSetWindowUserPointer(winid, ptr) {\n      var win = GLFW.WindowFromId(winid);\n      if (!win) return;\n      win.userptr = ptr;\n    }\n\n  function _glfwShowWindow(winid) {}\n\n  function _glfwSwapBuffers(winid) {\n      GLFW.swapBuffers(winid);\n    }\n\n  function _glfwTerminate() {\n      window.removeEventListener(\"gamepadconnected\", GLFW.onGamepadConnected, true);\n      window.removeEventListener(\"gamepaddisconnected\", GLFW.onGamepadDisconnected, true);\n      window.removeEventListener(\"keydown\", GLFW.onKeydown, true);\n      window.removeEventListener(\"keypress\", GLFW.onKeyPress, true);\n      window.removeEventListener(\"keyup\", GLFW.onKeyup, true);\n      window.removeEventListener(\"blur\", GLFW.onBlur, true);\n      Module[\"canvas\"].removeEventListener(\"touchmove\", GLFW.onMousemove, true);\n      Module[\"canvas\"].removeEventListener(\"touchstart\", GLFW.onMouseButtonDown, true);\n      Module[\"canvas\"].removeEventListener(\"touchcancel\", GLFW.onMouseButtonUp, true);\n      Module[\"canvas\"].removeEventListener(\"touchend\", GLFW.onMouseButtonUp, true);\n      Module[\"canvas\"].removeEventListener(\"mousemove\", GLFW.onMousemove, true);\n      Module[\"canvas\"].removeEventListener(\"mousedown\", GLFW.onMouseButtonDown, true);\n      Module[\"canvas\"].removeEventListener(\"mouseup\", GLFW.onMouseButtonUp, true);\n      Module[\"canvas\"].removeEventListener('wheel', GLFW.onMouseWheel, true);\n      Module[\"canvas\"].removeEventListener('mousewheel', GLFW.onMouseWheel, true);\n      Module[\"canvas\"].removeEventListener('mouseenter', GLFW.onMouseenter, true);\n      Module[\"canvas\"].removeEventListener('mouseleave', GLFW.onMouseleave, true);\n      Module[\"canvas\"].removeEventListener('drop', GLFW.onDrop, true);\n      Module[\"canvas\"].removeEventListener('dragover', GLFW.onDragover, true);\n  \n      Module[\"canvas\"].width = Module[\"canvas\"].height = 1;\n      GLFW.windows = null;\n      GLFW.active = null;\n    }\n\n  function _glfwWaitEventsTimeout(timeout) {}\n\n  function _glfwWindowHint(target, hint) {\n      GLFW.hints[target] = hint;\n    }\n\n  function _glfwWindowShouldClose(winid) {\n      var win = GLFW.WindowFromId(winid);\n      if (!win) return 0;\n      return win.shouldClose;\n    }\n\n  function _pthread_create() {\n      return 6;\n    }\n\n  function _pthread_join() {\n      return 28;\n    }\n\n  function _setTempRet0(val) {\n      setTempRet0(val);\n    }\n\n  function __isLeapYear(year) {\n        return year%4 === 0 && (year%100 !== 0 || year%400 === 0);\n    }\n  \n  function __arraySum(array, index) {\n      var sum = 0;\n      for (var i = 0; i <= index; sum += array[i++]) {\n        // no-op\n      }\n      return sum;\n    }\n  \n  var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];\n  \n  var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];\n  function __addDays(date, days) {\n      var newDate = new Date(date.getTime());\n      while (days > 0) {\n        var leap = __isLeapYear(newDate.getFullYear());\n        var currentMonth = newDate.getMonth();\n        var daysInCurrentMonth = (leap ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR)[currentMonth];\n  \n        if (days > daysInCurrentMonth-newDate.getDate()) {\n          // we spill over to next month\n          days -= (daysInCurrentMonth-newDate.getDate()+1);\n          newDate.setDate(1);\n          if (currentMonth < 11) {\n            newDate.setMonth(currentMonth+1)\n          } else {\n            newDate.setMonth(0);\n            newDate.setFullYear(newDate.getFullYear()+1);\n          }\n        } else {\n          // we stay in current month\n          newDate.setDate(newDate.getDate()+days);\n          return newDate;\n        }\n      }\n  \n      return newDate;\n    }\n  function _strftime(s, maxsize, format, tm) {\n      // size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr);\n      // http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html\n  \n      var tm_zone = HEAP32[(((tm)+(40))>>2)];\n  \n      var date = {\n        tm_sec: HEAP32[((tm)>>2)],\n        tm_min: HEAP32[(((tm)+(4))>>2)],\n        tm_hour: HEAP32[(((tm)+(8))>>2)],\n        tm_mday: HEAP32[(((tm)+(12))>>2)],\n        tm_mon: HEAP32[(((tm)+(16))>>2)],\n        tm_year: HEAP32[(((tm)+(20))>>2)],\n        tm_wday: HEAP32[(((tm)+(24))>>2)],\n        tm_yday: HEAP32[(((tm)+(28))>>2)],\n        tm_isdst: HEAP32[(((tm)+(32))>>2)],\n        tm_gmtoff: HEAP32[(((tm)+(36))>>2)],\n        tm_zone: tm_zone ? UTF8ToString(tm_zone) : ''\n      };\n  \n      var pattern = UTF8ToString(format);\n  \n      // expand format\n      var EXPANSION_RULES_1 = {\n        '%c': '%a %b %d %H:%M:%S %Y',     // Replaced by the locale's appropriate date and time representation - e.g., Mon Aug  3 14:02:01 2013\n        '%D': '%m/%d/%y',                 // Equivalent to %m / %d / %y\n        '%F': '%Y-%m-%d',                 // Equivalent to %Y - %m - %d\n        '%h': '%b',                       // Equivalent to %b\n        '%r': '%I:%M:%S %p',              // Replaced by the time in a.m. and p.m. notation\n        '%R': '%H:%M',                    // Replaced by the time in 24-hour notation\n        '%T': '%H:%M:%S',                 // Replaced by the time\n        '%x': '%m/%d/%y',                 // Replaced by the locale's appropriate date representation\n        '%X': '%H:%M:%S',                 // Replaced by the locale's appropriate time representation\n        // Modified Conversion Specifiers\n        '%Ec': '%c',                      // Replaced by the locale's alternative appropriate date and time representation.\n        '%EC': '%C',                      // Replaced by the name of the base year (period) in the locale's alternative representation.\n        '%Ex': '%m/%d/%y',                // Replaced by the locale's alternative date representation.\n        '%EX': '%H:%M:%S',                // Replaced by the locale's alternative time representation.\n        '%Ey': '%y',                      // Replaced by the offset from %EC (year only) in the locale's alternative representation.\n        '%EY': '%Y',                      // Replaced by the full alternative year representation.\n        '%Od': '%d',                      // Replaced by the day of the month, using the locale's alternative numeric symbols, filled as needed with leading zeros if there is any alternative symbol for zero; otherwise, with leading <space> characters.\n        '%Oe': '%e',                      // Replaced by the day of the month, using the locale's alternative numeric symbols, filled as needed with leading <space> characters.\n        '%OH': '%H',                      // Replaced by the hour (24-hour clock) using the locale's alternative numeric symbols.\n        '%OI': '%I',                      // Replaced by the hour (12-hour clock) using the locale's alternative numeric symbols.\n        '%Om': '%m',                      // Replaced by the month using the locale's alternative numeric symbols.\n        '%OM': '%M',                      // Replaced by the minutes using the locale's alternative numeric symbols.\n        '%OS': '%S',                      // Replaced by the seconds using the locale's alternative numeric symbols.\n        '%Ou': '%u',                      // Replaced by the weekday as a number in the locale's alternative representation (Monday=1).\n        '%OU': '%U',                      // Replaced by the week number of the year (Sunday as the first day of the week, rules corresponding to %U ) using the locale's alternative numeric symbols.\n        '%OV': '%V',                      // Replaced by the week number of the year (Monday as the first day of the week, rules corresponding to %V ) using the locale's alternative numeric symbols.\n        '%Ow': '%w',                      // Replaced by the number of the weekday (Sunday=0) using the locale's alternative numeric symbols.\n        '%OW': '%W',                      // Replaced by the week number of the year (Monday as the first day of the week) using the locale's alternative numeric symbols.\n        '%Oy': '%y',                      // Replaced by the year (offset from %C ) using the locale's alternative numeric symbols.\n      };\n      for (var rule in EXPANSION_RULES_1) {\n        pattern = pattern.replace(new RegExp(rule, 'g'), EXPANSION_RULES_1[rule]);\n      }\n  \n      var WEEKDAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n      var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n  \n      function leadingSomething(value, digits, character) {\n        var str = typeof value === 'number' ? value.toString() : (value || '');\n        while (str.length < digits) {\n          str = character[0]+str;\n        }\n        return str;\n      }\n  \n      function leadingNulls(value, digits) {\n        return leadingSomething(value, digits, '0');\n      }\n  \n      function compareByDay(date1, date2) {\n        function sgn(value) {\n          return value < 0 ? -1 : (value > 0 ? 1 : 0);\n        }\n  \n        var compare;\n        if ((compare = sgn(date1.getFullYear()-date2.getFullYear())) === 0) {\n          if ((compare = sgn(date1.getMonth()-date2.getMonth())) === 0) {\n            compare = sgn(date1.getDate()-date2.getDate());\n          }\n        }\n        return compare;\n      }\n  \n      function getFirstWeekStartDate(janFourth) {\n          switch (janFourth.getDay()) {\n            case 0: // Sunday\n              return new Date(janFourth.getFullYear()-1, 11, 29);\n            case 1: // Monday\n              return janFourth;\n            case 2: // Tuesday\n              return new Date(janFourth.getFullYear(), 0, 3);\n            case 3: // Wednesday\n              return new Date(janFourth.getFullYear(), 0, 2);\n            case 4: // Thursday\n              return new Date(janFourth.getFullYear(), 0, 1);\n            case 5: // Friday\n              return new Date(janFourth.getFullYear()-1, 11, 31);\n            case 6: // Saturday\n              return new Date(janFourth.getFullYear()-1, 11, 30);\n          }\n      }\n  \n      function getWeekBasedYear(date) {\n          var thisDate = __addDays(new Date(date.tm_year+1900, 0, 1), date.tm_yday);\n  \n          var janFourthThisYear = new Date(thisDate.getFullYear(), 0, 4);\n          var janFourthNextYear = new Date(thisDate.getFullYear()+1, 0, 4);\n  \n          var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear);\n          var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear);\n  \n          if (compareByDay(firstWeekStartThisYear, thisDate) <= 0) {\n            // this date is after the start of the first week of this year\n            if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) {\n              return thisDate.getFullYear()+1;\n            } else {\n              return thisDate.getFullYear();\n            }\n          } else {\n            return thisDate.getFullYear()-1;\n          }\n      }\n  \n      var EXPANSION_RULES_2 = {\n        '%a': function(date) {\n          return WEEKDAYS[date.tm_wday].substring(0,3);\n        },\n        '%A': function(date) {\n          return WEEKDAYS[date.tm_wday];\n        },\n        '%b': function(date) {\n          return MONTHS[date.tm_mon].substring(0,3);\n        },\n        '%B': function(date) {\n          return MONTHS[date.tm_mon];\n        },\n        '%C': function(date) {\n          var year = date.tm_year+1900;\n          return leadingNulls((year/100)|0,2);\n        },\n        '%d': function(date) {\n          return leadingNulls(date.tm_mday, 2);\n        },\n        '%e': function(date) {\n          return leadingSomething(date.tm_mday, 2, ' ');\n        },\n        '%g': function(date) {\n          // %g, %G, and %V give values according to the ISO 8601:2000 standard week-based year.\n          // In this system, weeks begin on a Monday and week 1 of the year is the week that includes\n          // January 4th, which is also the week that includes the first Thursday of the year, and\n          // is also the first week that contains at least four days in the year.\n          // If the first Monday of January is the 2nd, 3rd, or 4th, the preceding days are part of\n          // the last week of the preceding year; thus, for Saturday 2nd January 1999,\n          // %G is replaced by 1998 and %V is replaced by 53. If December 29th, 30th,\n          // or 31st is a Monday, it and any following days are part of week 1 of the following year.\n          // Thus, for Tuesday 30th December 1997, %G is replaced by 1998 and %V is replaced by 01.\n  \n          return getWeekBasedYear(date).toString().substring(2);\n        },\n        '%G': function(date) {\n          return getWeekBasedYear(date);\n        },\n        '%H': function(date) {\n          return leadingNulls(date.tm_hour, 2);\n        },\n        '%I': function(date) {\n          var twelveHour = date.tm_hour;\n          if (twelveHour == 0) twelveHour = 12;\n          else if (twelveHour > 12) twelveHour -= 12;\n          return leadingNulls(twelveHour, 2);\n        },\n        '%j': function(date) {\n          // Day of the year (001-366)\n          return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon-1), 3);\n        },\n        '%m': function(date) {\n          return leadingNulls(date.tm_mon+1, 2);\n        },\n        '%M': function(date) {\n          return leadingNulls(date.tm_min, 2);\n        },\n        '%n': function() {\n          return '\\n';\n        },\n        '%p': function(date) {\n          if (date.tm_hour >= 0 && date.tm_hour < 12) {\n            return 'AM';\n          } else {\n            return 'PM';\n          }\n        },\n        '%S': function(date) {\n          return leadingNulls(date.tm_sec, 2);\n        },\n        '%t': function() {\n          return '\\t';\n        },\n        '%u': function(date) {\n          return date.tm_wday || 7;\n        },\n        '%U': function(date) {\n          // Replaced by the week number of the year as a decimal number [00,53].\n          // The first Sunday of January is the first day of week 1;\n          // days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]\n          var janFirst = new Date(date.tm_year+1900, 0, 1);\n          var firstSunday = janFirst.getDay() === 0 ? janFirst : __addDays(janFirst, 7-janFirst.getDay());\n          var endDate = new Date(date.tm_year+1900, date.tm_mon, date.tm_mday);\n  \n          // is target date after the first Sunday?\n          if (compareByDay(firstSunday, endDate) < 0) {\n            // calculate difference in days between first Sunday and endDate\n            var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth()-1)-31;\n            var firstSundayUntilEndJanuary = 31-firstSunday.getDate();\n            var days = firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();\n            return leadingNulls(Math.ceil(days/7), 2);\n          }\n  \n          return compareByDay(firstSunday, janFirst) === 0 ? '01': '00';\n        },\n        '%V': function(date) {\n          // Replaced by the week number of the year (Monday as the first day of the week)\n          // as a decimal number [01,53]. If the week containing 1 January has four\n          // or more days in the new year, then it is considered week 1.\n          // Otherwise, it is the last week of the previous year, and the next week is week 1.\n          // Both January 4th and the first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday]\n          var janFourthThisYear = new Date(date.tm_year+1900, 0, 4);\n          var janFourthNextYear = new Date(date.tm_year+1901, 0, 4);\n  \n          var firstWeekStartThisYear = getFirstWeekStartDate(janFourthThisYear);\n          var firstWeekStartNextYear = getFirstWeekStartDate(janFourthNextYear);\n  \n          var endDate = __addDays(new Date(date.tm_year+1900, 0, 1), date.tm_yday);\n  \n          if (compareByDay(endDate, firstWeekStartThisYear) < 0) {\n            // if given date is before this years first week, then it belongs to the 53rd week of last year\n            return '53';\n          }\n  \n          if (compareByDay(firstWeekStartNextYear, endDate) <= 0) {\n            // if given date is after next years first week, then it belongs to the 01th week of next year\n            return '01';\n          }\n  \n          // given date is in between CW 01..53 of this calendar year\n          var daysDifference;\n          if (firstWeekStartThisYear.getFullYear() < date.tm_year+1900) {\n            // first CW of this year starts last year\n            daysDifference = date.tm_yday+32-firstWeekStartThisYear.getDate()\n          } else {\n            // first CW of this year starts this year\n            daysDifference = date.tm_yday+1-firstWeekStartThisYear.getDate();\n          }\n          return leadingNulls(Math.ceil(daysDifference/7), 2);\n        },\n        '%w': function(date) {\n          return date.tm_wday;\n        },\n        '%W': function(date) {\n          // Replaced by the week number of the year as a decimal number [00,53].\n          // The first Monday of January is the first day of week 1;\n          // days in the new year before this are in week 0. [ tm_year, tm_wday, tm_yday]\n          var janFirst = new Date(date.tm_year, 0, 1);\n          var firstMonday = janFirst.getDay() === 1 ? janFirst : __addDays(janFirst, janFirst.getDay() === 0 ? 1 : 7-janFirst.getDay()+1);\n          var endDate = new Date(date.tm_year+1900, date.tm_mon, date.tm_mday);\n  \n          // is target date after the first Monday?\n          if (compareByDay(firstMonday, endDate) < 0) {\n            var februaryFirstUntilEndMonth = __arraySum(__isLeapYear(endDate.getFullYear()) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, endDate.getMonth()-1)-31;\n            var firstMondayUntilEndJanuary = 31-firstMonday.getDate();\n            var days = firstMondayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();\n            return leadingNulls(Math.ceil(days/7), 2);\n          }\n          return compareByDay(firstMonday, janFirst) === 0 ? '01': '00';\n        },\n        '%y': function(date) {\n          // Replaced by the last two digits of the year as a decimal number [00,99]. [ tm_year]\n          return (date.tm_year+1900).toString().substring(2);\n        },\n        '%Y': function(date) {\n          // Replaced by the year as a decimal number (for example, 1997). [ tm_year]\n          return date.tm_year+1900;\n        },\n        '%z': function(date) {\n          // Replaced by the offset from UTC in the ISO 8601:2000 standard format ( +hhmm or -hhmm ).\n          // For example, \"-0430\" means 4 hours 30 minutes behind UTC (west of Greenwich).\n          var off = date.tm_gmtoff;\n          var ahead = off >= 0;\n          off = Math.abs(off) / 60;\n          // convert from minutes into hhmm format (which means 60 minutes = 100 units)\n          off = (off / 60)*100 + (off % 60);\n          return (ahead ? '+' : '-') + String(\"0000\" + off).slice(-4);\n        },\n        '%Z': function(date) {\n          return date.tm_zone;\n        },\n        '%%': function() {\n          return '%';\n        }\n      };\n      for (var rule in EXPANSION_RULES_2) {\n        if (pattern.includes(rule)) {\n          pattern = pattern.replace(new RegExp(rule, 'g'), EXPANSION_RULES_2[rule](date));\n        }\n      }\n  \n      var bytes = intArrayFromString(pattern, false);\n      if (bytes.length > maxsize) {\n        return 0;\n      }\n  \n      writeArrayToMemory(bytes, s);\n      return bytes.length-1;\n    }\n  function _strftime_l(s, maxsize, format, tm) {\n      return _strftime(s, maxsize, format, tm); // no locale support yet\n    }\n\n  function _time(ptr) {\n      var ret = (Date.now()/1000)|0;\n      if (ptr) {\n        HEAP32[((ptr)>>2)] = ret;\n      }\n      return ret;\n    }\n\n  function setFileTime(path, time) {\n      path = UTF8ToString(path);\n      try {\n        FS.utime(path, time, time);\n        return 0;\n      } catch (e) {\n        if (!(e instanceof FS.ErrnoError)) throw e + ' : ' + stackTrace();\n        setErrNo(e.errno);\n        return -1;\n      }\n    }\n  function _utimes(path, times) {\n      // utimes is just like utime but take an array of 2 times: `struct timeval times[2]`\n      // times[0] is the new access time (which we currently ignore)\n      // times[1] is the new modification time.\n      var time;\n      if (times) {\n        var mtime = times + 8;\n        time = HEAP32[((mtime)>>2)] * 1000;\n        time += HEAP32[(((mtime)+(4))>>2)] / 1000;\n      } else {\n        time = Date.now();\n      }\n      return setFileTime(path, time);\n    }\n\nvar FSNode = /** @constructor */ function(parent, name, mode, rdev) {\n    if (!parent) {\n      parent = this;  // root node sets parent to itself\n    }\n    this.parent = parent;\n    this.mount = parent.mount;\n    this.mounted = null;\n    this.id = FS.nextInode++;\n    this.name = name;\n    this.mode = mode;\n    this.node_ops = {};\n    this.stream_ops = {};\n    this.rdev = rdev;\n  };\n  var readMode = 292/*292*/ | 73/*73*/;\n  var writeMode = 146/*146*/;\n  Object.defineProperties(FSNode.prototype, {\n   read: {\n    get: /** @this{FSNode} */function() {\n     return (this.mode & readMode) === readMode;\n    },\n    set: /** @this{FSNode} */function(val) {\n     val ? this.mode |= readMode : this.mode &= ~readMode;\n    }\n   },\n   write: {\n    get: /** @this{FSNode} */function() {\n     return (this.mode & writeMode) === writeMode;\n    },\n    set: /** @this{FSNode} */function(val) {\n     val ? this.mode |= writeMode : this.mode &= ~writeMode;\n    }\n   },\n   isFolder: {\n    get: /** @this{FSNode} */function() {\n     return FS.isDir(this.mode);\n    }\n   },\n   isDevice: {\n    get: /** @this{FSNode} */function() {\n     return FS.isChrdev(this.mode);\n    }\n   }\n  });\n  FS.FSNode = FSNode;\n  FS.staticInit();Module[\"FS_createPath\"] = FS.createPath;Module[\"FS_createDataFile\"] = FS.createDataFile;Module[\"FS_createPreloadedFile\"] = FS.createPreloadedFile;Module[\"FS_createLazyFile\"] = FS.createLazyFile;Module[\"FS_createDevice\"] = FS.createDevice;Module[\"FS_unlink\"] = FS.unlink;;\nModule[\"requestFullscreen\"] = function Module_requestFullscreen(lockPointer, resizeCanvas) { Browser.requestFullscreen(lockPointer, resizeCanvas) };\n  Module[\"requestFullScreen\"] = function Module_requestFullScreen() { Browser.requestFullScreen() };\n  Module[\"requestAnimationFrame\"] = function Module_requestAnimationFrame(func) { Browser.requestAnimationFrame(func) };\n  Module[\"setCanvasSize\"] = function Module_setCanvasSize(width, height, noUpdates) { Browser.setCanvasSize(width, height, noUpdates) };\n  Module[\"pauseMainLoop\"] = function Module_pauseMainLoop() { Browser.mainLoop.pause() };\n  Module[\"resumeMainLoop\"] = function Module_resumeMainLoop() { Browser.mainLoop.resume() };\n  Module[\"getUserMedia\"] = function Module_getUserMedia() { Browser.getUserMedia() }\n  Module[\"createContext\"] = function Module_createContext(canvas, useWebGL, setInModule, webGLContextAttributes) { return Browser.createContext(canvas, useWebGL, setInModule, webGLContextAttributes) };\nFetch.staticInit();;\nvar GLctx;;\nvar ASSERTIONS = true;\n\n\n\n/** @type {function(string, boolean=, number=)} */\nfunction intArrayFromString(stringy, dontAddNull, length) {\n  var len = length > 0 ? length : lengthBytesUTF8(stringy)+1;\n  var u8array = new Array(len);\n  var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length);\n  if (dontAddNull) u8array.length = numBytesWritten;\n  return u8array;\n}\n\nfunction intArrayToString(array) {\n  var ret = [];\n  for (var i = 0; i < array.length; i++) {\n    var chr = array[i];\n    if (chr > 0xFF) {\n      if (ASSERTIONS) {\n        assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ')  at offset ' + i + ' not in 0x00-0xFF.');\n      }\n      chr &= 0xFF;\n    }\n    ret.push(String.fromCharCode(chr));\n  }\n  return ret.join('');\n}\n\n\nvar asmLibraryArg = {\n  \"__cxa_allocate_exception\": ___cxa_allocate_exception,\n  \"__cxa_atexit\": ___cxa_atexit,\n  \"__cxa_begin_catch\": ___cxa_begin_catch,\n  \"__cxa_end_catch\": ___cxa_end_catch,\n  \"__cxa_find_matching_catch_2\": ___cxa_find_matching_catch_2,\n  \"__cxa_find_matching_catch_3\": ___cxa_find_matching_catch_3,\n  \"__cxa_free_exception\": ___cxa_free_exception,\n  \"__cxa_rethrow\": ___cxa_rethrow,\n  \"__cxa_throw\": ___cxa_throw,\n  \"__cxa_uncaught_exceptions\": ___cxa_uncaught_exceptions,\n  \"__localtime_r\": ___localtime_r,\n  \"__resumeException\": ___resumeException,\n  \"__sys_access\": ___sys_access,\n  \"__sys_chmod\": ___sys_chmod,\n  \"__sys_chown32\": ___sys_chown32,\n  \"__sys_fchmod\": ___sys_fchmod,\n  \"__sys_fchown32\": ___sys_fchown32,\n  \"__sys_fcntl64\": ___sys_fcntl64,\n  \"__sys_fstat64\": ___sys_fstat64,\n  \"__sys_ftruncate64\": ___sys_ftruncate64,\n  \"__sys_getcwd\": ___sys_getcwd,\n  \"__sys_geteuid32\": ___sys_geteuid32,\n  \"__sys_getpid\": ___sys_getpid,\n  \"__sys_ioctl\": ___sys_ioctl,\n  \"__sys_lstat64\": ___sys_lstat64,\n  \"__sys_mkdir\": ___sys_mkdir,\n  \"__sys_mmap2\": ___sys_mmap2,\n  \"__sys_munmap\": ___sys_munmap,\n  \"__sys_open\": ___sys_open,\n  \"__sys_readlink\": ___sys_readlink,\n  \"__sys_rmdir\": ___sys_rmdir,\n  \"__sys_stat64\": ___sys_stat64,\n  \"__sys_unlink\": ___sys_unlink,\n  \"_emscripten_fetch_free\": __emscripten_fetch_free,\n  \"abort\": _abort,\n  \"clock\": _clock,\n  \"clock_gettime\": _clock_gettime,\n  \"dlclose\": _dlclose,\n  \"dlerror\": _dlerror,\n  \"dlopen\": _dlopen,\n  \"dlsym\": _dlsym,\n  \"emscripten_asm_const_int\": _emscripten_asm_const_int,\n  \"emscripten_get_element_css_size\": _emscripten_get_element_css_size,\n  \"emscripten_get_heap_max\": _emscripten_get_heap_max,\n  \"emscripten_is_main_browser_thread\": _emscripten_is_main_browser_thread,\n  \"emscripten_longjmp\": _emscripten_longjmp,\n  \"emscripten_memcpy_big\": _emscripten_memcpy_big,\n  \"emscripten_resize_heap\": _emscripten_resize_heap,\n  \"emscripten_set_main_loop_arg\": _emscripten_set_main_loop_arg,\n  \"emscripten_start_fetch\": _emscripten_start_fetch,\n  \"emscripten_thread_sleep\": _emscripten_thread_sleep,\n  \"environ_get\": _environ_get,\n  \"environ_sizes_get\": _environ_sizes_get,\n  \"exit\": _exit,\n  \"fd_close\": _fd_close,\n  \"fd_fdstat_get\": _fd_fdstat_get,\n  \"fd_read\": _fd_read,\n  \"fd_seek\": _fd_seek,\n  \"fd_sync\": _fd_sync,\n  \"fd_write\": _fd_write,\n  \"getTempRet0\": _getTempRet0,\n  \"get_browser_modifiers\": get_browser_modifiers,\n  \"get_commands\": get_commands,\n  \"getentropy\": _getentropy,\n  \"gettimeofday\": _gettimeofday,\n  \"glActiveTexture\": _glActiveTexture,\n  \"glAttachShader\": _glAttachShader,\n  \"glBindBuffer\": _glBindBuffer,\n  \"glBindFramebuffer\": _glBindFramebuffer,\n  \"glBindRenderbuffer\": _glBindRenderbuffer,\n  \"glBindTexture\": _glBindTexture,\n  \"glBindVertexArray\": _glBindVertexArray,\n  \"glBlendFunc\": _glBlendFunc,\n  \"glBlendFuncSeparate\": _glBlendFuncSeparate,\n  \"glBlitFramebuffer\": _glBlitFramebuffer,\n  \"glBufferData\": _glBufferData,\n  \"glBufferSubData\": _glBufferSubData,\n  \"glCheckFramebufferStatus\": _glCheckFramebufferStatus,\n  \"glClear\": _glClear,\n  \"glClearColor\": _glClearColor,\n  \"glCompileShader\": _glCompileShader,\n  \"glCreateProgram\": _glCreateProgram,\n  \"glCreateShader\": _glCreateShader,\n  \"glDeleteBuffers\": _glDeleteBuffers,\n  \"glDeleteFramebuffers\": _glDeleteFramebuffers,\n  \"glDeleteProgram\": _glDeleteProgram,\n  \"glDeleteRenderbuffers\": _glDeleteRenderbuffers,\n  \"glDeleteShader\": _glDeleteShader,\n  \"glDeleteTextures\": _glDeleteTextures,\n  \"glDeleteVertexArrays\": _glDeleteVertexArrays,\n  \"glDepthFunc\": _glDepthFunc,\n  \"glDepthMask\": _glDepthMask,\n  \"glDisable\": _glDisable,\n  \"glDisableVertexAttribArray\": _glDisableVertexAttribArray,\n  \"glDrawArrays\": _glDrawArrays,\n  \"glDrawElements\": _glDrawElements,\n  \"glEnable\": _glEnable,\n  \"glEnableVertexAttribArray\": _glEnableVertexAttribArray,\n  \"glFramebufferRenderbuffer\": _glFramebufferRenderbuffer,\n  \"glFramebufferTexture2D\": _glFramebufferTexture2D,\n  \"glFrontFace\": _glFrontFace,\n  \"glGenBuffers\": _glGenBuffers,\n  \"glGenFramebuffers\": _glGenFramebuffers,\n  \"glGenRenderbuffers\": _glGenRenderbuffers,\n  \"glGenTextures\": _glGenTextures,\n  \"glGenVertexArrays\": _glGenVertexArrays,\n  \"glGenerateMipmap\": _glGenerateMipmap,\n  \"glGetActiveAttrib\": _glGetActiveAttrib,\n  \"glGetActiveUniform\": _glGetActiveUniform,\n  \"glGetAttribLocation\": _glGetAttribLocation,\n  \"glGetFloatv\": _glGetFloatv,\n  \"glGetIntegerv\": _glGetIntegerv,\n  \"glGetProgramInfoLog\": _glGetProgramInfoLog,\n  \"glGetProgramiv\": _glGetProgramiv,\n  \"glGetShaderInfoLog\": _glGetShaderInfoLog,\n  \"glGetShaderiv\": _glGetShaderiv,\n  \"glGetString\": _glGetString,\n  \"glGetUniformLocation\": _glGetUniformLocation,\n  \"glIsBuffer\": _glIsBuffer,\n  \"glIsShader\": _glIsShader,\n  \"glLineWidth\": _glLineWidth,\n  \"glLinkProgram\": _glLinkProgram,\n  \"glPixelStorei\": _glPixelStorei,\n  \"glReadBuffer\": _glReadBuffer,\n  \"glReadPixels\": _glReadPixels,\n  \"glRenderbufferStorage\": _glRenderbufferStorage,\n  \"glRenderbufferStorageMultisample\": _glRenderbufferStorageMultisample,\n  \"glScissor\": _glScissor,\n  \"glShaderSource\": _glShaderSource,\n  \"glTexImage2D\": _glTexImage2D,\n  \"glTexImage3D\": _glTexImage3D,\n  \"glTexParameteri\": _glTexParameteri,\n  \"glTexSubImage3D\": _glTexSubImage3D,\n  \"glUniform1f\": _glUniform1f,\n  \"glUniform1fv\": _glUniform1fv,\n  \"glUniform1i\": _glUniform1i,\n  \"glUniform1iv\": _glUniform1iv,\n  \"glUniform2fv\": _glUniform2fv,\n  \"glUniform2iv\": _glUniform2iv,\n  \"glUniform3fv\": _glUniform3fv,\n  \"glUniform3iv\": _glUniform3iv,\n  \"glUniform4fv\": _glUniform4fv,\n  \"glUniform4iv\": _glUniform4iv,\n  \"glUniformMatrix4fv\": _glUniformMatrix4fv,\n  \"glUseProgram\": _glUseProgram,\n  \"glVertexAttrib1f\": _glVertexAttrib1f,\n  \"glVertexAttrib2f\": _glVertexAttrib2f,\n  \"glVertexAttribPointer\": _glVertexAttribPointer,\n  \"glViewport\": _glViewport,\n  \"glfwCreateWindow\": _glfwCreateWindow,\n  \"glfwDestroyWindow\": _glfwDestroyWindow,\n  \"glfwGetCursorPos\": _glfwGetCursorPos,\n  \"glfwGetWindowUserPointer\": _glfwGetWindowUserPointer,\n  \"glfwHideWindow\": _glfwHideWindow,\n  \"glfwInit\": _glfwInit,\n  \"glfwMakeContextCurrent\": _glfwMakeContextCurrent,\n  \"glfwSetCharCallback\": _glfwSetCharCallback,\n  \"glfwSetCursorPosCallback\": _glfwSetCursorPosCallback,\n  \"glfwSetErrorCallback\": _glfwSetErrorCallback,\n  \"glfwSetKeyCallback\": _glfwSetKeyCallback,\n  \"glfwSetMouseButtonCallback\": _glfwSetMouseButtonCallback,\n  \"glfwSetScrollCallback\": _glfwSetScrollCallback,\n  \"glfwSetWindowSize\": _glfwSetWindowSize,\n  \"glfwSetWindowSizeCallback\": _glfwSetWindowSizeCallback,\n  \"glfwSetWindowTitle\": _glfwSetWindowTitle,\n  \"glfwSetWindowUserPointer\": _glfwSetWindowUserPointer,\n  \"glfwShowWindow\": _glfwShowWindow,\n  \"glfwSwapBuffers\": _glfwSwapBuffers,\n  \"glfwTerminate\": _glfwTerminate,\n  \"glfwWaitEventsTimeout\": _glfwWaitEventsTimeout,\n  \"glfwWindowHint\": _glfwWindowHint,\n  \"glfwWindowShouldClose\": _glfwWindowShouldClose,\n  \"invoke_diii\": invoke_diii,\n  \"invoke_fiii\": invoke_fiii,\n  \"invoke_i\": invoke_i,\n  \"invoke_ii\": invoke_ii,\n  \"invoke_iii\": invoke_iii,\n  \"invoke_iiii\": invoke_iiii,\n  \"invoke_iiiii\": invoke_iiiii,\n  \"invoke_iiiiid\": invoke_iiiiid,\n  \"invoke_iiiiii\": invoke_iiiiii,\n  \"invoke_iiiiiii\": invoke_iiiiiii,\n  \"invoke_iiiiiiii\": invoke_iiiiiiii,\n  \"invoke_iiiiiiiiiii\": invoke_iiiiiiiiiii,\n  \"invoke_iiiiiiiiiiii\": invoke_iiiiiiiiiiii,\n  \"invoke_iiiiiiiiiiiii\": invoke_iiiiiiiiiiiii,\n  \"invoke_jii\": invoke_jii,\n  \"invoke_jiiii\": invoke_jiiii,\n  \"invoke_v\": invoke_v,\n  \"invoke_vi\": invoke_vi,\n  \"invoke_vii\": invoke_vii,\n  \"invoke_viii\": invoke_viii,\n  \"invoke_viiii\": invoke_viiii,\n  \"invoke_viiiiiii\": invoke_viiiiiii,\n  \"invoke_viiiiiiiiii\": invoke_viiiiiiiiii,\n  \"invoke_viiiiiiiiiiiiiii\": invoke_viiiiiiiiiiiiiii,\n  \"invoke_viijii\": invoke_viijii,\n  \"pthread_create\": _pthread_create,\n  \"pthread_join\": _pthread_join,\n  \"setTempRet0\": _setTempRet0,\n  \"set_canvas_visible\": set_canvas_visible,\n  \"set_theme\": set_theme,\n  \"strftime_l\": _strftime_l,\n  \"time\": _time,\n  \"utimes\": _utimes\n};\nvar asm = createWasm();\n/** @type {function(...*):?} */\nvar ___wasm_call_ctors = Module[\"___wasm_call_ctors\"] = createExportWrapper(\"__wasm_call_ctors\");\n\n/** @type {function(...*):?} */\nvar _main = Module[\"_main\"] = createExportWrapper(\"main\");\n\n/** @type {function(...*):?} */\nvar _memset = Module[\"_memset\"] = createExportWrapper(\"memset\");\n\n/** @type {function(...*):?} */\nvar ___errno_location = Module[\"___errno_location\"] = createExportWrapper(\"__errno_location\");\n\n/** @type {function(...*):?} */\nvar _fflush = Module[\"_fflush\"] = createExportWrapper(\"fflush\");\n\n/** @type {function(...*):?} */\nvar _malloc = Module[\"_malloc\"] = createExportWrapper(\"malloc\");\n\n/** @type {function(...*):?} */\nvar _free = Module[\"_free\"] = createExportWrapper(\"free\");\n\n/** @type {function(...*):?} */\nvar __get_tzname = Module[\"__get_tzname\"] = createExportWrapper(\"_get_tzname\");\n\n/** @type {function(...*):?} */\nvar __get_daylight = Module[\"__get_daylight\"] = createExportWrapper(\"_get_daylight\");\n\n/** @type {function(...*):?} */\nvar __get_timezone = Module[\"__get_timezone\"] = createExportWrapper(\"_get_timezone\");\n\n/** @type {function(...*):?} */\nvar _emscripten_main_thread_process_queued_calls = Module[\"_emscripten_main_thread_process_queued_calls\"] = createExportWrapper(\"emscripten_main_thread_process_queued_calls\");\n\n/** @type {function(...*):?} */\nvar _emscripten_stack_get_end = Module[\"_emscripten_stack_get_end\"] = function() {\n  return (_emscripten_stack_get_end = Module[\"_emscripten_stack_get_end\"] = Module[\"asm\"][\"emscripten_stack_get_end\"]).apply(null, arguments);\n};\n\n/** @type {function(...*):?} */\nvar stackSave = Module[\"stackSave\"] = createExportWrapper(\"stackSave\");\n\n/** @type {function(...*):?} */\nvar stackRestore = Module[\"stackRestore\"] = createExportWrapper(\"stackRestore\");\n\n/** @type {function(...*):?} */\nvar stackAlloc = Module[\"stackAlloc\"] = createExportWrapper(\"stackAlloc\");\n\n/** @type {function(...*):?} */\nvar _emscripten_stack_init = Module[\"_emscripten_stack_init\"] = function() {\n  return (_emscripten_stack_init = Module[\"_emscripten_stack_init\"] = Module[\"asm\"][\"emscripten_stack_init\"]).apply(null, arguments);\n};\n\n/** @type {function(...*):?} */\nvar _emscripten_stack_get_free = Module[\"_emscripten_stack_get_free\"] = function() {\n  return (_emscripten_stack_get_free = Module[\"_emscripten_stack_get_free\"] = Module[\"asm\"][\"emscripten_stack_get_free\"]).apply(null, arguments);\n};\n\n/** @type {function(...*):?} */\nvar _setThrew = Module[\"_setThrew\"] = createExportWrapper(\"setThrew\");\n\n/** @type {function(...*):?} */\nvar ___cxa_can_catch = Module[\"___cxa_can_catch\"] = createExportWrapper(\"__cxa_can_catch\");\n\n/** @type {function(...*):?} */\nvar ___cxa_is_pointer_type = Module[\"___cxa_is_pointer_type\"] = createExportWrapper(\"__cxa_is_pointer_type\");\n\n/** @type {function(...*):?} */\nvar _memalign = Module[\"_memalign\"] = createExportWrapper(\"memalign\");\n\n/** @type {function(...*):?} */\nvar dynCall_viijii = Module[\"dynCall_viijii\"] = createExportWrapper(\"dynCall_viijii\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiiij = Module[\"dynCall_iiiij\"] = createExportWrapper(\"dynCall_iiiij\");\n\n/** @type {function(...*):?} */\nvar dynCall_iij = Module[\"dynCall_iij\"] = createExportWrapper(\"dynCall_iij\");\n\n/** @type {function(...*):?} */\nvar dynCall_iijii = Module[\"dynCall_iijii\"] = createExportWrapper(\"dynCall_iijii\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiji = Module[\"dynCall_iiji\"] = createExportWrapper(\"dynCall_iiji\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiiiiij = Module[\"dynCall_iiiiiij\"] = createExportWrapper(\"dynCall_iiiiiij\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiij = Module[\"dynCall_iiij\"] = createExportWrapper(\"dynCall_iiij\");\n\n/** @type {function(...*):?} */\nvar dynCall_jii = Module[\"dynCall_jii\"] = createExportWrapper(\"dynCall_jii\");\n\n/** @type {function(...*):?} */\nvar dynCall_ji = Module[\"dynCall_ji\"] = createExportWrapper(\"dynCall_ji\");\n\n/** @type {function(...*):?} */\nvar dynCall_vij = Module[\"dynCall_vij\"] = createExportWrapper(\"dynCall_vij\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiiiijii = Module[\"dynCall_iiiiijii\"] = createExportWrapper(\"dynCall_iiiiijii\");\n\n/** @type {function(...*):?} */\nvar dynCall_j = Module[\"dynCall_j\"] = createExportWrapper(\"dynCall_j\");\n\n/** @type {function(...*):?} */\nvar dynCall_jj = Module[\"dynCall_jj\"] = createExportWrapper(\"dynCall_jj\");\n\n/** @type {function(...*):?} */\nvar dynCall_jiij = Module[\"dynCall_jiij\"] = createExportWrapper(\"dynCall_jiij\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiiiji = Module[\"dynCall_iiiiji\"] = createExportWrapper(\"dynCall_iiiiji\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiiijii = Module[\"dynCall_iiiijii\"] = createExportWrapper(\"dynCall_iiiijii\");\n\n/** @type {function(...*):?} */\nvar dynCall_ij = Module[\"dynCall_ij\"] = createExportWrapper(\"dynCall_ij\");\n\n/** @type {function(...*):?} */\nvar dynCall_viiji = Module[\"dynCall_viiji\"] = createExportWrapper(\"dynCall_viiji\");\n\n/** @type {function(...*):?} */\nvar dynCall_jiji = Module[\"dynCall_jiji\"] = createExportWrapper(\"dynCall_jiji\");\n\n/** @type {function(...*):?} */\nvar dynCall_jiiii = Module[\"dynCall_jiiii\"] = createExportWrapper(\"dynCall_jiiii\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiiiij = Module[\"dynCall_iiiiij\"] = createExportWrapper(\"dynCall_iiiiij\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiiiijj = Module[\"dynCall_iiiiijj\"] = createExportWrapper(\"dynCall_iiiiijj\");\n\n/** @type {function(...*):?} */\nvar dynCall_iiiiiijj = Module[\"dynCall_iiiiiijj\"] = createExportWrapper(\"dynCall_iiiiiijj\");\n\n\nfunction invoke_vi(index,a1) {\n  var sp = stackSave();\n  try {\n    wasmTable.get(index)(a1);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_vii(index,a1,a2) {\n  var sp = stackSave();\n  try {\n    wasmTable.get(index)(a1,a2);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_ii(index,a1) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iii(index,a1,a2) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiii(index,a1,a2,a3) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_viii(index,a1,a2,a3) {\n  var sp = stackSave();\n  try {\n    wasmTable.get(index)(a1,a2,a3);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_v(index) {\n  var sp = stackSave();\n  try {\n    wasmTable.get(index)();\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiiiiii(index,a1,a2,a3,a4,a5,a6) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3,a4,a5,a6);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_viiii(index,a1,a2,a3,a4) {\n  var sp = stackSave();\n  try {\n    wasmTable.get(index)(a1,a2,a3,a4);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiiiii(index,a1,a2,a3,a4,a5) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3,a4,a5);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiiiid(index,a1,a2,a3,a4,a5) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3,a4,a5);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3,a4,a5,a6,a7);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiiii(index,a1,a2,a3,a4) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3,a4);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_fiii(index,a1,a2,a3) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_diii(index,a1,a2,a3) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_i(index) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)();\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_viiiiiii(index,a1,a2,a3,a4,a5,a6,a7) {\n  var sp = stackSave();\n  try {\n    wasmTable.get(index)(a1,a2,a3,a4,a5,a6,a7);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_iiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) {\n  var sp = stackSave();\n  try {\n    return wasmTable.get(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_viiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) {\n  var sp = stackSave();\n  try {\n    wasmTable.get(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_viiiiiiiiiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15) {\n  var sp = stackSave();\n  try {\n    wasmTable.get(index)(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_jii(index,a1,a2) {\n  var sp = stackSave();\n  try {\n    return dynCall_jii(index,a1,a2);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_viijii(index,a1,a2,a3,a4,a5,a6) {\n  var sp = stackSave();\n  try {\n    dynCall_viijii(index,a1,a2,a3,a4,a5,a6);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\nfunction invoke_jiiii(index,a1,a2,a3,a4) {\n  var sp = stackSave();\n  try {\n    return dynCall_jiiii(index,a1,a2,a3,a4);\n  } catch(e) {\n    stackRestore(sp);\n    if (e !== e+0 && e !== 'longjmp') throw e;\n    _setThrew(1, 0);\n  }\n}\n\n\n\n\n// === Auto-generated postamble setup entry stuff ===\n\nif (!Object.getOwnPropertyDescriptor(Module, \"intArrayFromString\")) Module[\"intArrayFromString\"] = function() { abort(\"'intArrayFromString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"intArrayToString\")) Module[\"intArrayToString\"] = function() { abort(\"'intArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"ccall\")) Module[\"ccall\"] = function() { abort(\"'ccall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"cwrap\")) Module[\"cwrap\"] = function() { abort(\"'cwrap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"setValue\")) Module[\"setValue\"] = function() { abort(\"'setValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getValue\")) Module[\"getValue\"] = function() { abort(\"'getValue' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"allocate\")) Module[\"allocate\"] = function() { abort(\"'allocate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"UTF8ArrayToString\")) Module[\"UTF8ArrayToString\"] = function() { abort(\"'UTF8ArrayToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"UTF8ToString\")) Module[\"UTF8ToString\"] = function() { abort(\"'UTF8ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stringToUTF8Array\")) Module[\"stringToUTF8Array\"] = function() { abort(\"'stringToUTF8Array' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stringToUTF8\")) Module[\"stringToUTF8\"] = function() { abort(\"'stringToUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"lengthBytesUTF8\")) Module[\"lengthBytesUTF8\"] = function() { abort(\"'lengthBytesUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stackTrace\")) Module[\"stackTrace\"] = function() { abort(\"'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"addOnPreRun\")) Module[\"addOnPreRun\"] = function() { abort(\"'addOnPreRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"addOnInit\")) Module[\"addOnInit\"] = function() { abort(\"'addOnInit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"addOnPreMain\")) Module[\"addOnPreMain\"] = function() { abort(\"'addOnPreMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"addOnExit\")) Module[\"addOnExit\"] = function() { abort(\"'addOnExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"addOnPostRun\")) Module[\"addOnPostRun\"] = function() { abort(\"'addOnPostRun' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeStringToMemory\")) Module[\"writeStringToMemory\"] = function() { abort(\"'writeStringToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeArrayToMemory\")) Module[\"writeArrayToMemory\"] = function() { abort(\"'writeArrayToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeAsciiToMemory\")) Module[\"writeAsciiToMemory\"] = function() { abort(\"'writeAsciiToMemory' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nModule[\"addRunDependency\"] = addRunDependency;\nModule[\"removeRunDependency\"] = removeRunDependency;\nif (!Object.getOwnPropertyDescriptor(Module, \"FS_createFolder\")) Module[\"FS_createFolder\"] = function() { abort(\"'FS_createFolder' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nModule[\"FS_createPath\"] = FS.createPath;\nModule[\"FS_createDataFile\"] = FS.createDataFile;\nModule[\"FS_createPreloadedFile\"] = FS.createPreloadedFile;\nModule[\"FS_createLazyFile\"] = FS.createLazyFile;\nif (!Object.getOwnPropertyDescriptor(Module, \"FS_createLink\")) Module[\"FS_createLink\"] = function() { abort(\"'FS_createLink' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nModule[\"FS_createDevice\"] = FS.createDevice;\nModule[\"FS_unlink\"] = FS.unlink;\nif (!Object.getOwnPropertyDescriptor(Module, \"getLEB\")) Module[\"getLEB\"] = function() { abort(\"'getLEB' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getFunctionTables\")) Module[\"getFunctionTables\"] = function() { abort(\"'getFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"alignFunctionTables\")) Module[\"alignFunctionTables\"] = function() { abort(\"'alignFunctionTables' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerFunctions\")) Module[\"registerFunctions\"] = function() { abort(\"'registerFunctions' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"addFunction\")) Module[\"addFunction\"] = function() { abort(\"'addFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"removeFunction\")) Module[\"removeFunction\"] = function() { abort(\"'removeFunction' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getFuncWrapper\")) Module[\"getFuncWrapper\"] = function() { abort(\"'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"prettyPrint\")) Module[\"prettyPrint\"] = function() { abort(\"'prettyPrint' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"dynCall\")) Module[\"dynCall\"] = function() { abort(\"'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getCompilerSetting\")) Module[\"getCompilerSetting\"] = function() { abort(\"'getCompilerSetting' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"print\")) Module[\"print\"] = function() { abort(\"'print' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"printErr\")) Module[\"printErr\"] = function() { abort(\"'printErr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getTempRet0\")) Module[\"getTempRet0\"] = function() { abort(\"'getTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"setTempRet0\")) Module[\"setTempRet0\"] = function() { abort(\"'setTempRet0' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"callMain\")) Module[\"callMain\"] = function() { abort(\"'callMain' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"abort\")) Module[\"abort\"] = function() { abort(\"'abort' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stringToNewUTF8\")) Module[\"stringToNewUTF8\"] = function() { abort(\"'stringToNewUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"setFileTime\")) Module[\"setFileTime\"] = function() { abort(\"'setFileTime' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"emscripten_realloc_buffer\")) Module[\"emscripten_realloc_buffer\"] = function() { abort(\"'emscripten_realloc_buffer' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"ENV\")) Module[\"ENV\"] = function() { abort(\"'ENV' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"ERRNO_CODES\")) Module[\"ERRNO_CODES\"] = function() { abort(\"'ERRNO_CODES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"ERRNO_MESSAGES\")) Module[\"ERRNO_MESSAGES\"] = function() { abort(\"'ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"setErrNo\")) Module[\"setErrNo\"] = function() { abort(\"'setErrNo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"inetPton4\")) Module[\"inetPton4\"] = function() { abort(\"'inetPton4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"inetNtop4\")) Module[\"inetNtop4\"] = function() { abort(\"'inetNtop4' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"inetPton6\")) Module[\"inetPton6\"] = function() { abort(\"'inetPton6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"inetNtop6\")) Module[\"inetNtop6\"] = function() { abort(\"'inetNtop6' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"readSockaddr\")) Module[\"readSockaddr\"] = function() { abort(\"'readSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeSockaddr\")) Module[\"writeSockaddr\"] = function() { abort(\"'writeSockaddr' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"DNS\")) Module[\"DNS\"] = function() { abort(\"'DNS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getHostByName\")) Module[\"getHostByName\"] = function() { abort(\"'getHostByName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"GAI_ERRNO_MESSAGES\")) Module[\"GAI_ERRNO_MESSAGES\"] = function() { abort(\"'GAI_ERRNO_MESSAGES' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"Protocols\")) Module[\"Protocols\"] = function() { abort(\"'Protocols' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"Sockets\")) Module[\"Sockets\"] = function() { abort(\"'Sockets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getRandomDevice\")) Module[\"getRandomDevice\"] = function() { abort(\"'getRandomDevice' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"traverseStack\")) Module[\"traverseStack\"] = function() { abort(\"'traverseStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"UNWIND_CACHE\")) Module[\"UNWIND_CACHE\"] = function() { abort(\"'UNWIND_CACHE' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"withBuiltinMalloc\")) Module[\"withBuiltinMalloc\"] = function() { abort(\"'withBuiltinMalloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"readAsmConstArgsArray\")) Module[\"readAsmConstArgsArray\"] = function() { abort(\"'readAsmConstArgsArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"readAsmConstArgs\")) Module[\"readAsmConstArgs\"] = function() { abort(\"'readAsmConstArgs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"mainThreadEM_ASM\")) Module[\"mainThreadEM_ASM\"] = function() { abort(\"'mainThreadEM_ASM' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"jstoi_q\")) Module[\"jstoi_q\"] = function() { abort(\"'jstoi_q' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"jstoi_s\")) Module[\"jstoi_s\"] = function() { abort(\"'jstoi_s' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getExecutableName\")) Module[\"getExecutableName\"] = function() { abort(\"'getExecutableName' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"listenOnce\")) Module[\"listenOnce\"] = function() { abort(\"'listenOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"autoResumeAudioContext\")) Module[\"autoResumeAudioContext\"] = function() { abort(\"'autoResumeAudioContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"dynCallLegacy\")) Module[\"dynCallLegacy\"] = function() { abort(\"'dynCallLegacy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getDynCaller\")) Module[\"getDynCaller\"] = function() { abort(\"'getDynCaller' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"dynCall\")) Module[\"dynCall\"] = function() { abort(\"'dynCall' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"callRuntimeCallbacks\")) Module[\"callRuntimeCallbacks\"] = function() { abort(\"'callRuntimeCallbacks' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"runtimeKeepaliveCounter\")) Module[\"runtimeKeepaliveCounter\"] = function() { abort(\"'runtimeKeepaliveCounter' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"keepRuntimeAlive\")) Module[\"keepRuntimeAlive\"] = function() { abort(\"'keepRuntimeAlive' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"runtimeKeepalivePush\")) Module[\"runtimeKeepalivePush\"] = function() { abort(\"'runtimeKeepalivePush' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"runtimeKeepalivePop\")) Module[\"runtimeKeepalivePop\"] = function() { abort(\"'runtimeKeepalivePop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"callUserCallback\")) Module[\"callUserCallback\"] = function() { abort(\"'callUserCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"maybeExit\")) Module[\"maybeExit\"] = function() { abort(\"'maybeExit' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"asmjsMangle\")) Module[\"asmjsMangle\"] = function() { abort(\"'asmjsMangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"reallyNegative\")) Module[\"reallyNegative\"] = function() { abort(\"'reallyNegative' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"unSign\")) Module[\"unSign\"] = function() { abort(\"'unSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"reSign\")) Module[\"reSign\"] = function() { abort(\"'reSign' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"formatString\")) Module[\"formatString\"] = function() { abort(\"'formatString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"PATH\")) Module[\"PATH\"] = function() { abort(\"'PATH' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"PATH_FS\")) Module[\"PATH_FS\"] = function() { abort(\"'PATH_FS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"SYSCALLS\")) Module[\"SYSCALLS\"] = function() { abort(\"'SYSCALLS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"syscallMmap2\")) Module[\"syscallMmap2\"] = function() { abort(\"'syscallMmap2' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"syscallMunmap\")) Module[\"syscallMunmap\"] = function() { abort(\"'syscallMunmap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getSocketFromFD\")) Module[\"getSocketFromFD\"] = function() { abort(\"'getSocketFromFD' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getSocketAddress\")) Module[\"getSocketAddress\"] = function() { abort(\"'getSocketAddress' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"JSEvents\")) Module[\"JSEvents\"] = function() { abort(\"'JSEvents' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerKeyEventCallback\")) Module[\"registerKeyEventCallback\"] = function() { abort(\"'registerKeyEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"specialHTMLTargets\")) Module[\"specialHTMLTargets\"] = function() { abort(\"'specialHTMLTargets' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"maybeCStringToJsString\")) Module[\"maybeCStringToJsString\"] = function() { abort(\"'maybeCStringToJsString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"findEventTarget\")) Module[\"findEventTarget\"] = function() { abort(\"'findEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"findCanvasEventTarget\")) Module[\"findCanvasEventTarget\"] = function() { abort(\"'findCanvasEventTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getBoundingClientRect\")) Module[\"getBoundingClientRect\"] = function() { abort(\"'getBoundingClientRect' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillMouseEventData\")) Module[\"fillMouseEventData\"] = function() { abort(\"'fillMouseEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerMouseEventCallback\")) Module[\"registerMouseEventCallback\"] = function() { abort(\"'registerMouseEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerWheelEventCallback\")) Module[\"registerWheelEventCallback\"] = function() { abort(\"'registerWheelEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerUiEventCallback\")) Module[\"registerUiEventCallback\"] = function() { abort(\"'registerUiEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerFocusEventCallback\")) Module[\"registerFocusEventCallback\"] = function() { abort(\"'registerFocusEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillDeviceOrientationEventData\")) Module[\"fillDeviceOrientationEventData\"] = function() { abort(\"'fillDeviceOrientationEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerDeviceOrientationEventCallback\")) Module[\"registerDeviceOrientationEventCallback\"] = function() { abort(\"'registerDeviceOrientationEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillDeviceMotionEventData\")) Module[\"fillDeviceMotionEventData\"] = function() { abort(\"'fillDeviceMotionEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerDeviceMotionEventCallback\")) Module[\"registerDeviceMotionEventCallback\"] = function() { abort(\"'registerDeviceMotionEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"screenOrientation\")) Module[\"screenOrientation\"] = function() { abort(\"'screenOrientation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillOrientationChangeEventData\")) Module[\"fillOrientationChangeEventData\"] = function() { abort(\"'fillOrientationChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerOrientationChangeEventCallback\")) Module[\"registerOrientationChangeEventCallback\"] = function() { abort(\"'registerOrientationChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillFullscreenChangeEventData\")) Module[\"fillFullscreenChangeEventData\"] = function() { abort(\"'fillFullscreenChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerFullscreenChangeEventCallback\")) Module[\"registerFullscreenChangeEventCallback\"] = function() { abort(\"'registerFullscreenChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerRestoreOldStyle\")) Module[\"registerRestoreOldStyle\"] = function() { abort(\"'registerRestoreOldStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"hideEverythingExceptGivenElement\")) Module[\"hideEverythingExceptGivenElement\"] = function() { abort(\"'hideEverythingExceptGivenElement' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"restoreHiddenElements\")) Module[\"restoreHiddenElements\"] = function() { abort(\"'restoreHiddenElements' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"setLetterbox\")) Module[\"setLetterbox\"] = function() { abort(\"'setLetterbox' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"currentFullscreenStrategy\")) Module[\"currentFullscreenStrategy\"] = function() { abort(\"'currentFullscreenStrategy' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"restoreOldWindowedStyle\")) Module[\"restoreOldWindowedStyle\"] = function() { abort(\"'restoreOldWindowedStyle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"softFullscreenResizeWebGLRenderTarget\")) Module[\"softFullscreenResizeWebGLRenderTarget\"] = function() { abort(\"'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"doRequestFullscreen\")) Module[\"doRequestFullscreen\"] = function() { abort(\"'doRequestFullscreen' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillPointerlockChangeEventData\")) Module[\"fillPointerlockChangeEventData\"] = function() { abort(\"'fillPointerlockChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerPointerlockChangeEventCallback\")) Module[\"registerPointerlockChangeEventCallback\"] = function() { abort(\"'registerPointerlockChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerPointerlockErrorEventCallback\")) Module[\"registerPointerlockErrorEventCallback\"] = function() { abort(\"'registerPointerlockErrorEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"requestPointerLock\")) Module[\"requestPointerLock\"] = function() { abort(\"'requestPointerLock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillVisibilityChangeEventData\")) Module[\"fillVisibilityChangeEventData\"] = function() { abort(\"'fillVisibilityChangeEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerVisibilityChangeEventCallback\")) Module[\"registerVisibilityChangeEventCallback\"] = function() { abort(\"'registerVisibilityChangeEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerTouchEventCallback\")) Module[\"registerTouchEventCallback\"] = function() { abort(\"'registerTouchEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillGamepadEventData\")) Module[\"fillGamepadEventData\"] = function() { abort(\"'fillGamepadEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerGamepadEventCallback\")) Module[\"registerGamepadEventCallback\"] = function() { abort(\"'registerGamepadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerBeforeUnloadEventCallback\")) Module[\"registerBeforeUnloadEventCallback\"] = function() { abort(\"'registerBeforeUnloadEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fillBatteryEventData\")) Module[\"fillBatteryEventData\"] = function() { abort(\"'fillBatteryEventData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"battery\")) Module[\"battery\"] = function() { abort(\"'battery' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"registerBatteryEventCallback\")) Module[\"registerBatteryEventCallback\"] = function() { abort(\"'registerBatteryEventCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"setCanvasElementSize\")) Module[\"setCanvasElementSize\"] = function() { abort(\"'setCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getCanvasElementSize\")) Module[\"getCanvasElementSize\"] = function() { abort(\"'getCanvasElementSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"polyfillSetImmediate\")) Module[\"polyfillSetImmediate\"] = function() { abort(\"'polyfillSetImmediate' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"demangle\")) Module[\"demangle\"] = function() { abort(\"'demangle' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"demangleAll\")) Module[\"demangleAll\"] = function() { abort(\"'demangleAll' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"jsStackTrace\")) Module[\"jsStackTrace\"] = function() { abort(\"'jsStackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stackTrace\")) Module[\"stackTrace\"] = function() { abort(\"'stackTrace' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getEnvStrings\")) Module[\"getEnvStrings\"] = function() { abort(\"'getEnvStrings' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"checkWasiClock\")) Module[\"checkWasiClock\"] = function() { abort(\"'checkWasiClock' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeI53ToI64\")) Module[\"writeI53ToI64\"] = function() { abort(\"'writeI53ToI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeI53ToI64Clamped\")) Module[\"writeI53ToI64Clamped\"] = function() { abort(\"'writeI53ToI64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeI53ToI64Signaling\")) Module[\"writeI53ToI64Signaling\"] = function() { abort(\"'writeI53ToI64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeI53ToU64Clamped\")) Module[\"writeI53ToU64Clamped\"] = function() { abort(\"'writeI53ToU64Clamped' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeI53ToU64Signaling\")) Module[\"writeI53ToU64Signaling\"] = function() { abort(\"'writeI53ToU64Signaling' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"readI53FromI64\")) Module[\"readI53FromI64\"] = function() { abort(\"'readI53FromI64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"readI53FromU64\")) Module[\"readI53FromU64\"] = function() { abort(\"'readI53FromU64' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"convertI32PairToI53\")) Module[\"convertI32PairToI53\"] = function() { abort(\"'convertI32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"convertU32PairToI53\")) Module[\"convertU32PairToI53\"] = function() { abort(\"'convertU32PairToI53' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"uncaughtExceptionCount\")) Module[\"uncaughtExceptionCount\"] = function() { abort(\"'uncaughtExceptionCount' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"exceptionLast\")) Module[\"exceptionLast\"] = function() { abort(\"'exceptionLast' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"exceptionCaught\")) Module[\"exceptionCaught\"] = function() { abort(\"'exceptionCaught' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"ExceptionInfoAttrs\")) Module[\"ExceptionInfoAttrs\"] = function() { abort(\"'ExceptionInfoAttrs' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"ExceptionInfo\")) Module[\"ExceptionInfo\"] = function() { abort(\"'ExceptionInfo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"CatchInfo\")) Module[\"CatchInfo\"] = function() { abort(\"'CatchInfo' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"exception_addRef\")) Module[\"exception_addRef\"] = function() { abort(\"'exception_addRef' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"exception_decRef\")) Module[\"exception_decRef\"] = function() { abort(\"'exception_decRef' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"Browser\")) Module[\"Browser\"] = function() { abort(\"'Browser' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"funcWrappers\")) Module[\"funcWrappers\"] = function() { abort(\"'funcWrappers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"getFuncWrapper\")) Module[\"getFuncWrapper\"] = function() { abort(\"'getFuncWrapper' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"setMainLoop\")) Module[\"setMainLoop\"] = function() { abort(\"'setMainLoop' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nModule[\"FS\"] = FS;\nif (!Object.getOwnPropertyDescriptor(Module, \"mmapAlloc\")) Module[\"mmapAlloc\"] = function() { abort(\"'mmapAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"MEMFS\")) Module[\"MEMFS\"] = function() { abort(\"'MEMFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"TTY\")) Module[\"TTY\"] = function() { abort(\"'TTY' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"PIPEFS\")) Module[\"PIPEFS\"] = function() { abort(\"'PIPEFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"SOCKFS\")) Module[\"SOCKFS\"] = function() { abort(\"'SOCKFS' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"_setNetworkCallback\")) Module[\"_setNetworkCallback\"] = function() { abort(\"'_setNetworkCallback' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"tempFixedLengthArray\")) Module[\"tempFixedLengthArray\"] = function() { abort(\"'tempFixedLengthArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"miniTempWebGLFloatBuffers\")) Module[\"miniTempWebGLFloatBuffers\"] = function() { abort(\"'miniTempWebGLFloatBuffers' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"heapObjectForWebGLType\")) Module[\"heapObjectForWebGLType\"] = function() { abort(\"'heapObjectForWebGLType' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"heapAccessShiftForWebGLHeap\")) Module[\"heapAccessShiftForWebGLHeap\"] = function() { abort(\"'heapAccessShiftForWebGLHeap' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"GL\")) Module[\"GL\"] = function() { abort(\"'GL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"emscriptenWebGLGet\")) Module[\"emscriptenWebGLGet\"] = function() { abort(\"'emscriptenWebGLGet' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"computeUnpackAlignedImageSize\")) Module[\"computeUnpackAlignedImageSize\"] = function() { abort(\"'computeUnpackAlignedImageSize' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"emscriptenWebGLGetTexPixelData\")) Module[\"emscriptenWebGLGetTexPixelData\"] = function() { abort(\"'emscriptenWebGLGetTexPixelData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"emscriptenWebGLGetUniform\")) Module[\"emscriptenWebGLGetUniform\"] = function() { abort(\"'emscriptenWebGLGetUniform' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"webglGetUniformLocation\")) Module[\"webglGetUniformLocation\"] = function() { abort(\"'webglGetUniformLocation' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"emscriptenWebGLGetVertexAttrib\")) Module[\"emscriptenWebGLGetVertexAttrib\"] = function() { abort(\"'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"writeGLArray\")) Module[\"writeGLArray\"] = function() { abort(\"'writeGLArray' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"AL\")) Module[\"AL\"] = function() { abort(\"'AL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"SDL_unicode\")) Module[\"SDL_unicode\"] = function() { abort(\"'SDL_unicode' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"SDL_ttfContext\")) Module[\"SDL_ttfContext\"] = function() { abort(\"'SDL_ttfContext' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"SDL_audio\")) Module[\"SDL_audio\"] = function() { abort(\"'SDL_audio' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"SDL\")) Module[\"SDL\"] = function() { abort(\"'SDL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"SDL_gfx\")) Module[\"SDL_gfx\"] = function() { abort(\"'SDL_gfx' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"GLUT\")) Module[\"GLUT\"] = function() { abort(\"'GLUT' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"EGL\")) Module[\"EGL\"] = function() { abort(\"'EGL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"GLFW_Window\")) Module[\"GLFW_Window\"] = function() { abort(\"'GLFW_Window' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"GLFW\")) Module[\"GLFW\"] = function() { abort(\"'GLFW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"GLEW\")) Module[\"GLEW\"] = function() { abort(\"'GLEW' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"IDBStore\")) Module[\"IDBStore\"] = function() { abort(\"'IDBStore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"runAndAbortIfError\")) Module[\"runAndAbortIfError\"] = function() { abort(\"'runAndAbortIfError' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"Fetch\")) Module[\"Fetch\"] = function() { abort(\"'Fetch' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fetchDeleteCachedData\")) Module[\"fetchDeleteCachedData\"] = function() { abort(\"'fetchDeleteCachedData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fetchLoadCachedData\")) Module[\"fetchLoadCachedData\"] = function() { abort(\"'fetchLoadCachedData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fetchCacheData\")) Module[\"fetchCacheData\"] = function() { abort(\"'fetchCacheData' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"fetchXHR\")) Module[\"fetchXHR\"] = function() { abort(\"'fetchXHR' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"emscriptenWebGLGetIndexed\")) Module[\"emscriptenWebGLGetIndexed\"] = function() { abort(\"'emscriptenWebGLGetIndexed' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"warnOnce\")) Module[\"warnOnce\"] = function() { abort(\"'warnOnce' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stackSave\")) Module[\"stackSave\"] = function() { abort(\"'stackSave' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stackRestore\")) Module[\"stackRestore\"] = function() { abort(\"'stackRestore' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stackAlloc\")) Module[\"stackAlloc\"] = function() { abort(\"'stackAlloc' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"AsciiToString\")) Module[\"AsciiToString\"] = function() { abort(\"'AsciiToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stringToAscii\")) Module[\"stringToAscii\"] = function() { abort(\"'stringToAscii' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"UTF16ToString\")) Module[\"UTF16ToString\"] = function() { abort(\"'UTF16ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stringToUTF16\")) Module[\"stringToUTF16\"] = function() { abort(\"'stringToUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"lengthBytesUTF16\")) Module[\"lengthBytesUTF16\"] = function() { abort(\"'lengthBytesUTF16' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"UTF32ToString\")) Module[\"UTF32ToString\"] = function() { abort(\"'UTF32ToString' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"stringToUTF32\")) Module[\"stringToUTF32\"] = function() { abort(\"'stringToUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"lengthBytesUTF32\")) Module[\"lengthBytesUTF32\"] = function() { abort(\"'lengthBytesUTF32' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"allocateUTF8\")) Module[\"allocateUTF8\"] = function() { abort(\"'allocateUTF8' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nif (!Object.getOwnPropertyDescriptor(Module, \"allocateUTF8OnStack\")) Module[\"allocateUTF8OnStack\"] = function() { abort(\"'allocateUTF8OnStack' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") };\nModule[\"writeStackCookie\"] = writeStackCookie;\nModule[\"checkStackCookie\"] = checkStackCookie;\nif (!Object.getOwnPropertyDescriptor(Module, \"ALLOC_NORMAL\")) Object.defineProperty(Module, \"ALLOC_NORMAL\", { configurable: true, get: function() { abort(\"'ALLOC_NORMAL' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\nif (!Object.getOwnPropertyDescriptor(Module, \"ALLOC_STACK\")) Object.defineProperty(Module, \"ALLOC_STACK\", { configurable: true, get: function() { abort(\"'ALLOC_STACK' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)\") } });\n\nvar calledRun;\n\n/**\n * @constructor\n * @this {ExitStatus}\n */\nfunction ExitStatus(status) {\n  this.name = \"ExitStatus\";\n  this.message = \"Program terminated with exit(\" + status + \")\";\n  this.status = status;\n}\n\nvar calledMain = false;\n\ndependenciesFulfilled = function runCaller() {\n  // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)\n  if (!calledRun) run();\n  if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled\n};\n\nfunction callMain(args) {\n  assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module[\"onRuntimeInitialized\"])');\n  assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called');\n\n  var entryFunction = Module['_main'];\n\n  args = args || [];\n\n  var argc = args.length+1;\n  var argv = stackAlloc((argc + 1) * 4);\n  HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram);\n  for (var i = 1; i < argc; i++) {\n    HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]);\n  }\n  HEAP32[(argv >> 2) + argc] = 0;\n\n  try {\n\n    var ret = entryFunction(argc, argv);\n\n    // In PROXY_TO_PTHREAD builds, we should never exit the runtime below, as\n    // execution is asynchronously handed off to a pthread.\n      // if we're not running an evented main loop, it's time to exit\n      exit(ret, /* implicit = */ true);\n  }\n  catch(e) {\n    if (e instanceof ExitStatus) {\n      // exit() throws this once it's done to make sure execution\n      // has been stopped completely\n      return;\n    } else if (e == 'unwind') {\n      // running an evented main loop, don't immediately exit\n      return;\n    } else {\n      var toLog = e;\n      if (e && typeof e === 'object' && e.stack) {\n        toLog = [e, e.stack];\n      }\n      err('exception thrown: ' + toLog);\n      quit_(1, e);\n    }\n  } finally {\n    calledMain = true;\n\n  }\n}\n\nfunction stackCheckInit() {\n  // This is normally called automatically during __wasm_call_ctors but need to\n  // get these values before even running any of the ctors so we call it redundantly\n  // here.\n  // TODO(sbc): Move writeStackCookie to native to to avoid this.\n  _emscripten_stack_init();\n  writeStackCookie();\n}\n\n/** @type {function(Array=)} */\nfunction run(args) {\n  args = args || arguments_;\n\n  if (runDependencies > 0) {\n    return;\n  }\n\n  stackCheckInit();\n\n  preRun();\n\n  // a preRun added a dependency, run will be called later\n  if (runDependencies > 0) {\n    return;\n  }\n\n  function doRun() {\n    // run may have just been called through dependencies being fulfilled just in this very frame,\n    // or while the async setStatus time below was happening\n    if (calledRun) return;\n    calledRun = true;\n    Module['calledRun'] = true;\n\n    if (ABORT) return;\n\n    initRuntime();\n\n    preMain();\n\n    if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();\n\n    if (shouldRunNow) callMain(args);\n\n    postRun();\n  }\n\n  if (Module['setStatus']) {\n    Module['setStatus']('Running...');\n    setTimeout(function() {\n      setTimeout(function() {\n        Module['setStatus']('');\n      }, 1);\n      doRun();\n    }, 1);\n  } else\n  {\n    doRun();\n  }\n  checkStackCookie();\n}\nModule['run'] = run;\n\nfunction checkUnflushedContent() {\n  // Compiler settings do not allow exiting the runtime, so flushing\n  // the streams is not possible. but in ASSERTIONS mode we check\n  // if there was something to flush, and if so tell the user they\n  // should request that the runtime be exitable.\n  // Normally we would not even include flush() at all, but in ASSERTIONS\n  // builds we do so just for this check, and here we see if there is any\n  // content to flush, that is, we check if there would have been\n  // something a non-ASSERTIONS build would have not seen.\n  // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0\n  // mode (which has its own special function for this; otherwise, all\n  // the code is inside libc)\n  var oldOut = out;\n  var oldErr = err;\n  var has = false;\n  out = err = function(x) {\n    has = true;\n  }\n  try { // it doesn't matter if it fails\n    var flush = Module['_fflush'];\n    if (flush) flush(0);\n    // also flush in the JS FS layer\n    ['stdout', 'stderr'].forEach(function(name) {\n      var info = FS.analyzePath('/dev/' + name);\n      if (!info) return;\n      var stream = info.object;\n      var rdev = stream.rdev;\n      var tty = TTY.ttys[rdev];\n      if (tty && tty.output && tty.output.length) {\n        has = true;\n      }\n    });\n  } catch(e) {}\n  out = oldOut;\n  err = oldErr;\n  if (has) {\n    warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.');\n  }\n}\n\n/** @param {boolean|number=} implicit */\nfunction exit(status, implicit) {\n  EXITSTATUS = status;\n\n  checkUnflushedContent();\n\n  // if this is just main exit-ing implicitly, and the status is 0, then we\n  // don't need to do anything here and can just leave. if the status is\n  // non-zero, though, then we need to report it.\n  // (we may have warned about this earlier, if a situation justifies doing so)\n  if (implicit && keepRuntimeAlive() && status === 0) {\n    return;\n  }\n\n  if (keepRuntimeAlive()) {\n    // if exit() was called, we may warn the user if the runtime isn't actually being shut down\n    if (!implicit) {\n      var msg = 'program exited (with status: ' + status + '), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)';\n      err(msg);\n    }\n  } else {\n\n    exitRuntime();\n\n    if (Module['onExit']) Module['onExit'](status);\n\n    ABORT = true;\n  }\n\n  quit_(status, new ExitStatus(status));\n}\n\nif (Module['preInit']) {\n  if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];\n  while (Module['preInit'].length > 0) {\n    Module['preInit'].pop()();\n  }\n}\n\n// shouldRunNow refers to calling main(), not run().\nvar shouldRunNow = true;\n\nif (Module['noInitialRun']) shouldRunNow = false;\n\nrun();\n\n\n\n\n\n"]}