From d1cff7d84eade6f65b9f7d3f07d133bf2c510f7d Mon Sep 17 00:00:00 2001 From: Ingvar Stepanyan Date: Thu, 16 Jul 2020 16:32:07 +0100 Subject: [PATCH] Consolidate C++ builds Use a shared base image with fixed Emscripten version, autotools and optimisation flags for all C++ codecs. Additionally, move build commands for codecs themselves to Makefile - they're already platform-specific, and Make allows for better caching and parallelisation that custom ad-hoc scripts. This is essentially same as #777 but for C++. --- codecs/build-cpp.sh | 3 ++ codecs/cpp.Dockerfile | 9 ++++ codecs/imagequant/Makefile | 33 ++++++++++++ codecs/imagequant/build.sh | 43 --------------- codecs/imagequant/imagequant.js | 71 ++++++++++++------------ codecs/imagequant/imagequant.wasm | Bin 57729 -> 58170 bytes codecs/imagequant/package.json | 2 +- codecs/mozjpeg_enc/Makefile | 45 ++++++++++++++++ codecs/mozjpeg_enc/build.sh | 52 ------------------ codecs/mozjpeg_enc/mozjpeg_enc.js | 74 ++++++++++++------------- codecs/mozjpeg_enc/mozjpeg_enc.wasm | Bin 227611 -> 217799 bytes codecs/mozjpeg_enc/package.json | 2 +- codecs/webp/Makefile | 49 +++++++++++++++++ codecs/webp/build.sh | 71 ------------------------ codecs/webp/dec/webp_dec.js | 74 ++++++++++++------------- codecs/webp/dec/webp_dec.wasm | Bin 79650 -> 79676 bytes codecs/webp/enc/webp_enc.js | 80 ++++++++++++++-------------- codecs/webp/enc/webp_enc.wasm | Bin 148003 -> 147990 bytes codecs/webp/package.json | 2 +- 19 files changed, 291 insertions(+), 319 deletions(-) create mode 100644 codecs/build-cpp.sh create mode 100644 codecs/cpp.Dockerfile create mode 100644 codecs/imagequant/Makefile delete mode 100755 codecs/imagequant/build.sh create mode 100644 codecs/mozjpeg_enc/Makefile delete mode 100755 codecs/mozjpeg_enc/build.sh create mode 100644 codecs/webp/Makefile delete mode 100644 codecs/webp/build.sh diff --git a/codecs/build-cpp.sh b/codecs/build-cpp.sh new file mode 100644 index 00000000..4388be5a --- /dev/null +++ b/codecs/build-cpp.sh @@ -0,0 +1,3 @@ +#!/bin/sh -e +docker build -t squoosh-cpp - < ../cpp.Dockerfile +docker run --rm -v $PWD:/src squoosh-cpp diff --git a/codecs/cpp.Dockerfile b/codecs/cpp.Dockerfile new file mode 100644 index 00000000..88e489db --- /dev/null +++ b/codecs/cpp.Dockerfile @@ -0,0 +1,9 @@ +FROM emscripten/emsdk:1.39.19 +RUN apt-get update && apt-get install -qqy autoconf libtool pkg-config +ENV CFLAGS "-Os -flto" +ENV CXXFLAGS "${CFLAGS} -std=c++17" +ENV LDFLAGS "${CFLAGS}" +# Build and cache standard libraries with these flags +RUN emcc ${CXXFLAGS} --bind -xc++ /dev/null -o /dev/null +WORKDIR /src +CMD ["sh", "-c", "emmake make -j`nproc`"] diff --git a/codecs/imagequant/Makefile b/codecs/imagequant/Makefile new file mode 100644 index 00000000..b75f6353 --- /dev/null +++ b/codecs/imagequant/Makefile @@ -0,0 +1,33 @@ +CODEC_DIR := node_modules/libimagequant +CODEC_OUT_RELATIVE := libimagequant.a +CODEC_OUT := $(addprefix $(CODEC_DIR)/, $(CODEC_OUT_RELATIVE)) +OUT_JS := imagequant.js +OUT_WASM := $(OUT_JS:.js=.wasm) + +.PHONY: all clean + +all: $(OUT_JS) + +%.js: %.cpp $(CODEC_OUT) + $(CXX) \ + -I $(CODEC_DIR) \ + ${CXXFLAGS} \ + ${LDFLAGS} \ + --bind \ + --closure 1 \ + -s ALLOW_MEMORY_GROWTH=1 \ + -s MODULARIZE=1 \ + -s 'EXPORT_NAME="$(basename $(@F))"' \ + -o $@ \ + $+ + +$(CODEC_OUT): $(CODEC_DIR)/config.mk + $(MAKE) -C $(CODEC_DIR) $(CODEC_OUT_RELATIVE) + +$(CODEC_DIR)/config.mk: $(CODEC_DIR)/configure + cd $(CODEC_DIR) && ./configure \ + --disable-sse + +clean: + $(RM) $(OUT_JS) $(OUT_WASM) + $(MAKE) -C $(CODEC_DIR) clean diff --git a/codecs/imagequant/build.sh b/codecs/imagequant/build.sh deleted file mode 100755 index 3b8020a1..00000000 --- a/codecs/imagequant/build.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -set -e - -export EM_CACHE="${PWD}/node_modules/.em_cache" -export OPTIMIZE="-Os -flto --llvm-lto 1" -export LDFLAGS="${OPTIMIZE}" -export CFLAGS="${OPTIMIZE}" -export CPPFLAGS="${OPTIMIZE}" - -echo "=============================================" -echo "Compiling libimagequant" -echo "=============================================" -( - cd node_modules/libimagequant - emconfigure ./configure --disable-sse - emmake make static -j`nproc` -) -echo "=============================================" -echo "Compiling wasm module" -echo "=============================================" -( - emcc \ - --bind \ - ${OPTIMIZE} \ - --closure 1 \ - -s ALLOW_MEMORY_GROWTH=1 \ - -s MODULARIZE=1 \ - -s 'EXPORT_NAME="imagequant"' \ - -I node_modules/libimagequant \ - -o ./imagequant.js \ - --std=c++11 \ - imagequant.cpp \ - node_modules/libimagequant/libimagequant.a -) -echo "=============================================" -echo "Compiling wasm module done" -echo "=============================================" - -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "Did you update your docker image?" -echo "Run \`docker pull trzeci/emscripten-upstream\`" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" diff --git a/codecs/imagequant/imagequant.js b/codecs/imagequant/imagequant.js index 37cf44c0..cad60c5e 100644 --- a/codecs/imagequant/imagequant.js +++ b/codecs/imagequant/imagequant.js @@ -11,49 +11,48 @@ var d;d||(d=typeof imagequant !== 'undefined' ? imagequant : {});var aa;d.ready= if(ba)w=v?require("path").dirname(w)+"/":__dirname+"/",x=function(a,b){da||(da=require("fs"));ea||(ea=require("path"));a=ea.normalize(a);return da.readFileSync(a,b?null:"utf8")},z=function(a){a=x(a,!0);a.buffer||(a=new Uint8Array(a));a.buffer||A("Assertion failed: undefined");return a},1=e);)++c;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e} function la(a,b,c){var e=F;if(0=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}if(127>=g){if(b>=c)break;e[b++]=g}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var ma="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; function na(a,b){var c=a>>1;for(var e=c+b/2;!(c>=e)&&G[c];)++c;c<<=1;if(32>1];if(0==f||c==b/2)return e;++c;e+=String.fromCharCode(f)}}function oa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;H[b>>1]=0;return b-e}function pa(a){return 2*a.length} function qa(a,b){for(var c=0,e="";!(c>=b/4);){var f=I[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023)):e+=String.fromCharCode(f)}return e}function ra(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}I[b>>2]=g;b+=4;if(b+4>c)break}I[b>>2]=0;return b-e} function sa(a){for(var b=0,c=0;c=e&&++c;b+=4}return b}var J,ta,F,H,G,I,L,ua,va;function wa(a){J=a;d.HEAP8=ta=new Int8Array(a);d.HEAP16=H=new Int16Array(a);d.HEAP32=I=new Int32Array(a);d.HEAPU8=F=new Uint8Array(a);d.HEAPU16=G=new Uint16Array(a);d.HEAPU32=L=new Uint32Array(a);d.HEAPF32=ua=new Float32Array(a);d.HEAPF64=va=new Float64Array(a)}var xa=d.INITIAL_MEMORY||16777216;d.wasmMemory?E=d.wasmMemory:E=new WebAssembly.Memory({initial:xa/65536,maximum:32768}); -E&&(J=E.buffer);xa=J.byteLength;wa(J);I[1472]=5248928;function M(a){for(;0=b?"_"+a:a} -function Oa(a,b){a=Na(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Pa(a){var b=Error,c=Oa(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} -var Qa=void 0;function W(a){throw new Qa(a);}var Ra=void 0;function Sa(a,b){function c(k){k=b(k);if(k.length!==e.length)throw new Ra("Mismatched type converter count");for(var h=0;h>2])}function Za(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a} -function $a(a,b){switch(b){case 2:return function(c){return this.fromWireType(ua[c>>2])};case 3:return function(c){return this.fromWireType(va[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function ab(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Oa(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} -function bb(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function cb(a,b){var c=d;if(void 0===c[a].S){var e=c[a];c[a]=function(){c[a].S.hasOwnProperty(arguments.length)||W("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].S+")!");return c[a].S[arguments.length].apply(this,arguments)};c[a].S=[];c[a].S[e.Y]=e}} -function db(a,b,c){d.hasOwnProperty(a)?((void 0===c||void 0!==d[a].S&&void 0!==d[a].S[c])&&W("Cannot register public name '"+a+"' twice"),cb(a,a),d.hasOwnProperty(c)&&W("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),d[a].S[c]=b):(d[a]=b,void 0!==c&&(d[a].aa=c))}function eb(a,b){for(var c=[],e=0;e>2)+e]);return c} -function fb(a,b){a=S(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return G[e>>1]};case 2:return c?function(e){return I[e>>2]}:function(e){return L[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var lb={}; -function mb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function nb(a,b){var c=U[a];void 0===c&&W(b+" has unknown type "+hb(a));return c}for(var ob={},pb=[null,[],[]],qb=Array(256),rb=0;256>rb;++rb)qb[rb]=String.fromCharCode(rb);Ma=qb;Qa=d.BindingError=Pa("BindingError");Ra=d.InternalError=Pa("InternalError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},T:null})},t:function(a,b){b=S(b);X(a,{name:b, -fromWireType:function(c){var e=Y[c].value;Ua(c);return e},toWireType:function(c,e){return Xa(e)},argPackAdvance:8,readValueFromPointer:Ya,T:null})},h:function(a,b,c){c=La(c);b=S(b);X(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Za(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:$a(b,c),T:null})},d:function(a,b,c,e,f,g){var l=eb(b,c);a=S(a);f=fb(e,f);db(a,function(){jb("Cannot call "+ -a+" due to unbound types",l)},b-1);Sa(l,function(k){var h=[k[0],null].concat(k.slice(1)),n=k=a,p=f,q=h.length;2>q&&W("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var y=null!==h[1]&&!1,C=!1,m=1;m>>k}}var h=-1!=b.indexOf("unsigned");X(a,{name:b,fromWireType:g,toWireType:function(n,p){if("number"!==typeof p&&"boolean"!==typeof p)throw new TypeError('Cannot convert "'+Za(p)+'" to '+this.name);if(pf)throw new TypeError('Passing a number "'+Za(p)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+ -e+", "+f+"]!");return h?p>>>0:p|0},argPackAdvance:8,readValueFromPointer:kb(b,l,0!==e),T:null})},a:function(a,b,c){function e(g){g>>=2;var l=L;return new f(J,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=S(c);X(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{Z:!0})},i:function(a,b){b=S(b);var c="std::string"===b;X(a,{name:b,fromWireType:function(e){var f=L[e>>2];if(c)for(var g=e+4,l=0;l<=f;++l){var k=e+4+l; -if(0==F[k]||l==f){g=g?ka(F,g,k-g):"";if(void 0===h)var h=g;else h+=String.fromCharCode(0),h+=g;g=k+1}}else{h=Array(f);for(l=0;l=q&&(q=65536+((q&1023)<<10)|f.charCodeAt(++p)&1023);127>=q?++n:n=2047>=q?n+2:65535>=q?n+3:n+4}return n}:function(){return f.length})(),k=sb(4+l+1);L[k>>2]=l;if(c&&g)la(f,k+4,l+1);else if(g)for(g=0;g>2],p=l(),q,y=h+4,C=0;C<=n;++C){var m=h+4+C*b;if(0==p[m>>k]||C==n)y=e(y,m-y),void 0===q?q=y:(q+=String.fromCharCode(0),q+=y),y=m+b}Z(h);return q},toWireType:function(h,n){"string"!==typeof n&&W("Cannot pass non-string to C++ string type "+c);var p=g(n),q=sb(4+p+b);L[q>>2]=p>>k;f(n,q+4,p+b);null!==h&&h.push(Z,q);return q},argPackAdvance:8,readValueFromPointer:Ya, -T:function(h){Z(h)}})},j:function(a,b){b=S(b);X(a,{$:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},r:Ua,v:function(a){if(0===a)return Xa(mb());var b=lb[a];a=void 0===b?S(a):b;return Xa(mb()[a])},k:function(a){4>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(nb,d,Xa);ob[b]=f}return f(a,c,e)},f:function(){A()},q:function(a,b,c){F.copyWithin(a,b,b+c)},c:function(a){a>>>=0;var b=F.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>>16);wa(E.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},s:function(){return 0},o:function(){},g:function(a,b,c,e){for(var f=0,g=0;g>2],k=I[b+(8*g+4)>>2],h=0;h>2]=f;return 0},memory:E, -p:function(){},table:ha}; -(function(){function a(f){d.asm=f.exports;N--;d.monitorRunDependencies&&d.monitorRunDependencies(N);0==N&&(null!==Ea&&(clearInterval(Ea),Ea=null),O&&(f=O,O=null,f()))}function b(f){a(f.instance)}function c(f){return Ja().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){B("failed to asynchronously prepare wasm: "+g);A(g)})}var e={a:tb};N++;d.monitorRunDependencies&&d.monitorRunDependencies(N);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return B("Module.instantiateWasm callback failed with error: "+f), -!1}(function(){if(D||"function"!==typeof WebAssembly.instantiateStreaming||Ga()||Fa("file://")||"function"!==typeof fetch)return c(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){B("wasm streaming compile failed: "+g);B("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); -var Ka=d.___wasm_call_ctors=function(){return(Ka=d.___wasm_call_ctors=d.asm.x).apply(null,arguments)},sb=d._malloc=function(){return(sb=d._malloc=d.asm.y).apply(null,arguments)},Z=d._free=function(){return(Z=d._free=d.asm.z).apply(null,arguments)},ib=d.___getTypeName=function(){return(ib=d.___getTypeName=d.asm.A).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.B).apply(null,arguments)}; +E&&(J=E.buffer);xa=J.byteLength;wa(J);I[1472]=5248928;function M(a){for(;0=b?"_"+a:a} +function Na(a,b){a=Ma(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Oa(a){var b=Error,c=Na(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} +var Pa=void 0;function W(a){throw new Pa(a);}var Qa=void 0;function Ra(a,b){function c(k){k=b(k);if(k.length!==e.length)throw new Qa("Mismatched type converter count");for(var h=0;h>2])}function Ya(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a} +function Za(a,b){switch(b){case 2:return function(c){return this.fromWireType(ua[c>>2])};case 3:return function(c){return this.fromWireType(va[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function $a(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Na(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} +function ab(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function bb(a,b){var c=d;if(void 0===c[a].S){var e=c[a];c[a]=function(){c[a].S.hasOwnProperty(arguments.length)||W("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].S+")!");return c[a].S[arguments.length].apply(this,arguments)};c[a].S=[];c[a].S[e.X]=e}} +function cb(a,b,c){d.hasOwnProperty(a)?((void 0===c||void 0!==d[a].S&&void 0!==d[a].S[c])&&W("Cannot register public name '"+a+"' twice"),bb(a,a),d.hasOwnProperty(c)&&W("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),d[a].S[c]=b):(d[a]=b,void 0!==c&&(d[a].aa=c))}function db(a,b){for(var c=[],e=0;e>2)+e]);return c} +function eb(a,b){a=S(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return G[e>>1]};case 2:return c?function(e){return I[e>>2]}:function(e){return L[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var kb={}; +function lb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function mb(a,b){var c=U[a];void 0===c&&W(b+" has unknown type "+gb(a));return c}for(var nb={},ob=[null,[],[]],pb=Array(256),qb=0;256>qb;++qb)pb[qb]=String.fromCharCode(qb);La=pb;Pa=d.BindingError=Oa("BindingError");Qa=d.InternalError=Oa("InternalError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},T:null})},t:function(a,b){b=S(b);X(a,{name:b,fromWireType:function(c){var e= +Y[c].value;Ta(c);return e},toWireType:function(c,e){return Ua(e)},argPackAdvance:8,readValueFromPointer:Xa,T:null})},h:function(a,b,c){c=Ka(c);b=S(b);X(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Ya(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Za(b,c),T:null})},d:function(a,b,c,e,f,g){var l=db(b,c);a=S(a);f=eb(e,f);cb(a,function(){ib("Cannot call "+a+" due to unbound types", +l)},b-1);Ra(l,function(k){var h=[k[0],null].concat(k.slice(1)),n=k=a,p=f,q=h.length;2>q&&W("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var y=null!==h[1]&&!1,C=!1,m=1;m>>k}}var h=-1!=b.indexOf("unsigned");X(a,{name:b,fromWireType:g,toWireType:function(n,p){if("number"!==typeof p&&"boolean"!==typeof p)throw new TypeError('Cannot convert "'+Ya(p)+'" to '+this.name);if(pf)throw new TypeError('Passing a number "'+Ya(p)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return h?p>>>0:p|0},argPackAdvance:8,readValueFromPointer:jb(b, +l,0!==e),T:null})},a:function(a,b,c){function e(g){g>>=2;var l=L;return new f(J,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=S(c);X(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{Z:!0})},i:function(a,b){b=S(b);var c="std::string"===b;X(a,{name:b,fromWireType:function(e){var f=L[e>>2];if(c)for(var g=e+4,l=0;l<=f;++l){var k=e+4+l;if(0==F[k]||l==f){g=g?ka(F,g,k-g):"";if(void 0===h)var h=g;else h+=String.fromCharCode(0), +h+=g;g=k+1}}else{h=Array(f);for(l=0;l=q&&(q=65536+((q&1023)<<10)|f.charCodeAt(++p)&1023);127>=q?++n:n=2047>=q?n+ +2:65535>=q?n+3:n+4}return n}:function(){return f.length})(),k=rb(4+l+1);L[k>>2]=l;if(c&&g)la(f,k+4,l+1);else if(g)for(g=0;g>2],p=l(),q,y=h+4,C=0;C<=n;++C){var m=h+4+C*b;if(0==p[m>>k]||C==n)y=e(y,m-y),void 0===q?q=y:(q+=String.fromCharCode(0),q+=y),y=m+b}Z(h);return q},toWireType:function(h,n){"string"!==typeof n&&W("Cannot pass non-string to C++ string type "+c);var p=g(n),q=rb(4+p+b);L[q>>2]=p>>k;f(n,q+4,p+b);null!==h&&h.push(Z,q);return q},argPackAdvance:8,readValueFromPointer:Xa,T:function(h){Z(h)}})},j:function(a,b){b=S(b);X(a,{$:!0,name:b,argPackAdvance:0,fromWireType:function(){}, +toWireType:function(){}})},r:Ta,v:function(a){if(0===a)return Ua(lb());var b=kb[a];a=void 0===b?S(a):b;return Ua(lb()[a])},k:function(a){4>> 2) + "+g+'], "parameter '+g+ +'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(mb,d,Ua);nb[b]=f}return f(a,c,e)},f:function(){A()},q:function(a,b,c){F.copyWithin(a,b,b+c)},c:function(a){a>>>=0;var b=F.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>>16);wa(E.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},s:function(){return 0},o:function(){},g:function(a,b,c,e){for(var f=0,g=0;g>2],k=I[b+(8*g+4)>>2],h=0;h>2]=f;return 0},memory:E,p:function(){},table:ha}; +(function(){function a(f){d.asm=f.exports;N--;d.monitorRunDependencies&&d.monitorRunDependencies(N);0==N&&(null!==Da&&(clearInterval(Da),Da=null),O&&(f=O,O=null,f()))}function b(f){a(f.instance)}function c(f){return Ia().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){B("failed to asynchronously prepare wasm: "+g);A(g)})}var e={a:sb};N++;d.monitorRunDependencies&&d.monitorRunDependencies(N);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return B("Module.instantiateWasm callback failed with error: "+ +f),!1}(function(){if(D||"function"!==typeof WebAssembly.instantiateStreaming||Fa()||Ea("file://")||"function"!==typeof fetch)return c(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){B("wasm streaming compile failed: "+g);B("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); +var Ja=d.___wasm_call_ctors=function(){return(Ja=d.___wasm_call_ctors=d.asm.x).apply(null,arguments)},rb=d._malloc=function(){return(rb=d._malloc=d.asm.y).apply(null,arguments)},Z=d._free=function(){return(Z=d._free=d.asm.z).apply(null,arguments)},hb=d.___getTypeName=function(){return(hb=d.___getTypeName=d.asm.A).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.B).apply(null,arguments)}; d.dynCall_iiiiiif=function(){return(d.dynCall_iiiiiif=d.asm.C).apply(null,arguments)};d.dynCall_viiiiif=function(){return(d.dynCall_viiiiif=d.asm.D).apply(null,arguments)};d.dynCall_iiiiif=function(){return(d.dynCall_iiiiif=d.asm.E).apply(null,arguments)};d.dynCall_viiiif=function(){return(d.dynCall_viiiif=d.asm.F).apply(null,arguments)};d.dynCall_ii=function(){return(d.dynCall_ii=d.asm.G).apply(null,arguments)};d.dynCall_i=function(){return(d.dynCall_i=d.asm.H).apply(null,arguments)}; d.dynCall_vi=function(){return(d.dynCall_vi=d.asm.I).apply(null,arguments)};d.dynCall_iii=function(){return(d.dynCall_iii=d.asm.J).apply(null,arguments)};d.dynCall_vif=function(){return(d.dynCall_vif=d.asm.K).apply(null,arguments)};d.dynCall_iidiiii=function(){return(d.dynCall_iidiiii=d.asm.L).apply(null,arguments)};d.dynCall_vii=function(){return(d.dynCall_vii=d.asm.M).apply(null,arguments)};d.dynCall_iiii=function(){return(d.dynCall_iiii=d.asm.N).apply(null,arguments)}; -d.dynCall_jiji=function(){return(d.dynCall_jiji=d.asm.O).apply(null,arguments)};d.dynCall_viiiiii=function(){return(d.dynCall_viiiiii=d.asm.P).apply(null,arguments)};d.dynCall_viiiii=function(){return(d.dynCall_viiiii=d.asm.Q).apply(null,arguments)};d.dynCall_viiii=function(){return(d.dynCall_viiii=d.asm.R).apply(null,arguments)};var ub;O=function vb(){ub||wb();ub||(O=vb)}; -function wb(){function a(){if(!ub&&(ub=!0,d.calledRun=!0,!ia)){M(za);M(Aa);aa(d);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();Ca.unshift(b)}M(Ca)}}if(!(0o2b**cATf6#Lw|Cvv)n4xRpGgpVZ^L4r zv-kebe*FLUKWF9>*c7dbsF^4!NjW-NepD;&O zmX8`|6&n;OAjhx_iiPcABdoAPjrucliD@9Q%Y3!lZ20~R%yr(21SzR zwxvOKiDtzO*X0R`aedgS56zY&X6G(CPe*dIiwj7vDSAN+0fkXxPV^1lT0Eee#7x?& zw+j#LQ{tH3U(!wcbw%mm%6$|gSAkqSN>k%TKR)R&D=CKPYf6XE1A0^G6Ldr;%R2PX zxp(AlDqBS~Qoos4Mn`ph`7C-;Z!F)fzg#lG#<4B^KjkY+Tig_uQzVU)XPB*6d30`5 z#rG;h|Kb~>Sx+0eEWSZn0Z&3QEN1AJM;@lZxdo&C!z`E~Z52r?6LcM8CXQ;t*>Dvw z3FJ1ID`vQo6m@{70U?Po%3vbyVX-m#g)vj8N&j`sXl&u#&sh@7%2yhJ?`y!3Zy*Ku}>282T{z#Cq z`=IWbFic;Z(4q?_u1zL!taw;P%&d&mn6rJVH^>i*YQ1mbD^#uLO;Y6OM<(48+2R)| zV|v`ypG_K$iQ366m{>J=Ds9mxCLbz~1{a>nOR3h3ba8b@+@)`BS<#Z{{VPlqIfaFV z35WY;$Vw!l2}&ev!v(KNoy(>R!-WYq0UCpu^&_Jr9*vc1yR{*k3OOm4PuMEsO{Nj+ zcV(xtuk&29WyEl!JlzB`VikQIsA8Mw=| z2}NoxeX{jyTO$8vG+PmA)tU8Ry2Wbf!a6yk zUdAOPxA)Z^FOGG=V_Qb1#f_NBYz6;$H{J|J03U>UH_P&F1-x6RZ?{meo5XH-!*0pX zcT4ha1;K8iU=&O$H2%rXFq~m^Z-k{Q8o^XYEMQv~@d|P7MkqDDE7Wu5{H(YHJZGE8 z%zW2Ki^|+Hb9Y5_&!!AaLu_+v1KViTBhny>1P0r4aO=SOOUHf2q=Kxprh>0)z*#-= zy0$=`NiPQN2xq)FxE=xv2;Ts1ULix$Y_(cpKMHX?oRd*#7`~&rySpRv00T$5U1$or zWPHOKKO$pydf*_Ihga|%SV0q35H809iotDw5{pLEyG1-QE_QCk0X z(O|R#u3t_=ayzcSfoNXtqZ^8dHtIjzxP(hb?2q)wEGdr1AbMC>5- zUnSyhQb$U~c2Z|bMK_7xk@%F<(`5pb-zj6tUzIWC?gUdFOEBeI38wrliQka>^^jGR zrL8vWP%D7ht3%*`g!RCq%5&Qdqx+m!0;S0sq6V&!$EW*Yh$75=m^2ew1(VN6!BpTq ztu_F3tPCEFuu2RpWhg@oa-km3G)VVK6^#OQJSL;iQdiMjEN{w~N_M8bVnzi}k_8@w z@5L|gmDixsV9=WR2k>lNbE1$<;F(79}%vgg&WSJ_MOMI_C;w*Zz==zF;=fwGqeK!dUuT&e7R zd-+b<7f|=!-9ndli}4_g2-Yf0`%ax4GchnV?(%Uv}9Xl?SlnMs}Wl>LsrP zb`~K3;8CLIFRyUxATt=G`(t99Ub}oVeMSF%xuzfMpR5=-xfS9zcs_7v(wY}1wg%k8 zdN3l=N=t-}fUG5*v=@dU1XMy|1guV0H{bRL7iKh?H(z1hz2eJy)XFk?SWjCyhqT_e zvXMw%Sh<&K^bM<;$=7<-5b|@ctV);*CO~c+pV?vp%d7W&AG`+(G#Kt19DjLi{AI%N zf$?WL9t-Ec$oZWWMBDWE+ux?gw6l6trK{=~g_=IzX)4?=+Hs-IK3d;hX$~G9GFU~2;bAk=Q^v>XW@ErWdvRl*GIK%e( zid`Ibl29c^NU&uz|5Zpvm>g5EA2NhftIfgppP#~nOP|F601I851{w5{t#EQTC8v2uq)@ZuSgG{bHcH-SqKjTq&dh(uYWO{UF0D)-y1 zVXC+h$oB}C;V&h*VMCp+7415b{b4oSHxwi06SGY9XA6B#;KzAXT!nQJCkd&kyP6)= zwcX=rvR>9b7LM<5_X1k1|J0pm*x-BWM^&j9iS4xJ=62F*oDXhEPz^O^Dn^^vQaEmE;a>YV!i(R&Izc8aU#1>EPmM5HkiQ1lnN~!)x)d zV8#S5?E!_z`hFcSKnyqD9*+I;_M$_l9vl^H^=F!{+aJnMW$wg7bp)~f{3}Nj3ZN4M zfI~)??MCnvN&1&zubd-wyQS$fx_S+tHmlKr^cD#=>gh$EDfcE;y80kL|MS#JWe zXZ>Vb_BvpWJfTiXuT;_@pU!$oR!&=Wi>}_e9OgI@d`YTPk{xrGFH#^EQ@t|I7n5xa zU;O>$lCk58_r>$URL*luDHKc;LKk)E(p_BwcYvQ2s7V;=2U5K)AynDrTPgKjsop@0 zo&v{cX-ZilI1D=#ugFAT%jd=w5M*rBoA%Zem#dGBX>e2)2hMVhU#_3u`)ONco8cv4 zG#wo668?&INM{UCS-ESA->7XtT>Z-E@GA6_{Y`E{Wo2xg%C7ZF^v?Z*?2;~-&|lv_t-KSma&&oRdcnaa7i*}f=U}oz?>l%cmFZ6pdT8T^{Ak%4KcS3i zxa`M{Kj~KvOdt4R?&v!D4W(OrE2ksIMu#vr75geN`ks2aCao{oiVu`em z`I}9v1~m-J7}HaE%Hj;?U9cG?=`?!{0OSkUXasT?G~N2Ahgy*HCm)}iO2TW{90L{3 zVM!$di2X<^LNdSo@g%4YJ1eAv5Dx0ccpWy0J;G3cH zpRyA`ZiKS~0|of!%uHdyV~2-FigBgl3_2ej?(dYUXj+zPI#NA71%UNQsIm1Z_@8G3 zpQ<1b3>TPKDl+wC4@ARi1%dRS%W@LRT!W;sNZ)y+%mP34?jt`dE&{kkIwRv54lpdt zc0Eyz+Z=piuw-p%#2CU|%tI2HASYmD0(?X=_rVjlv;NQQ89}4<=AL?*oqM)tmPPmG z{`0AJv-tD$qW}jh5H)(*Gu7crgz_a~l3xGJU>c+kKC_$VXz$sis6^m{jB+NXvA*#2 zjAv^Rw5@&ic^Z@(`t{GOY$N-6B(^Xrj(fy56DTOKRjTjJe*8jgQ^=825f4irWf0^e zoS@9|O2EAmJIhS(^h#lZkYZp*VrB;) z`4wProc&@)3K<K5Mn2GniV|FRtLvL%*o+atOa7l2QVRlyZXoVd)Mtd z99F;bYj9J~JD$u|TAaXF0)w_JO{e_`V+k(v`SvHf>RR^h^^=?~&08$_X&6gjrDgIM z+h@atu;9#Cxq53Q`7ki**{};9DqK~WpogRYn*{IV;(7tx!7>Si0BN35_qsFF15F>>d7kMWi#7C&l@Q5vTGignltDt})GY&x!!k`+2 z8~{H;6rWJZSarsyt$NRy0g+9?ETW=QXS|!%L0*9=0qk-7Cdk!fmO} zN7=K1`(ZFa>@s}|0Mc{LHV=pdg@s|3gb55bg%`p$d<#FSpFCSx9_4YqFqikDDD2I_ zZKC?!v;FFs3WeFAw2DjJR}J(*tE^5$8Oq#%%*|29-k@Mqm%ld12l7$7iHobRpn|42 zs^>vxmT#tfM_>0^{U9gjxl>yAytr||iNutko@PQB`SKQGv}^Ry*RDgM{j=9n{Rze6 zhX?^)Ogu;)8%XqGFfeiPpdNY78$K8^keok*abjlxzxsd^pW|>3!2*Q2)KjAuo%166 z0jrC?`qL5T;+RdDeNDCP&gW&8-R+`6 zj_)`RnXEIf*8$4=U(ZsVEgeM8;rv;s4vu*jb4;r+gg#aZeQZV$TF#_K63e~;dx0wZ~Tv=S0 zgiSYFXG<5r2#R6?GDXc9>LqSKZ4KM|<>DC+mwLJZWfssmkc0CpZ#u#JqdpjRgC zw&&jZ9g6n40{vG5;8gby_n#0j~1; z)A8tzF+XjN7y#RQrKr?*UTB#b0-q2Za8m_F@8@h95RZwg!2^I!?87gLxHUYrv;ipg zA}#q!CFm}I4jj>czEDTw^q}vKiR0d`+Y;1v!~uQFcTdF*Ls&3DIK4Qm2fn!rm58U` zVO4c&zEe%6p8w7@ x2`tIR7|aQbu_EvrwZwNaG%;8GgNublGv;;}t5&Zt=Bl~I>RVRltPi(Y{|l5z>uUf2 delta 7159 zcmZu$36xaTnSTF!uU;*$mfKy`-PK*Recz+8cWGMbX79Safi#OojkdV37}TnU(15ss z1u6}SV90GEAZUZ*7*BKrN(q~S5;sgnG%=ctPU2*eXf*3NGs!q}4)fht-I7cOkGI~v z_rKf!fB)LYUNbhFHV!P)%PccsSz3{nG)z5Y)o4TpaWf=0>f@|&I!)0uc|e~~(K5Nz zDAFhpB1JT_rT>)S*ddnwzXcjj`AR~0p9i2F>Wg@PFw}3$)H^D$Q%jP7g$4nOpiCrQzMWmKtvrA-6 zYZpzF{jC>YyvDUyD>rNPfaAk*D>F)m?Jwb`HzWM3TJ^x_Uaj)o*4EI((e5R(xa~r0 zHo5I`njyEeJw!>FoOB0`m)j@3K+XA?lV8^D+aRAm5F~4FlksT{a@sT@bJGTr<+y0X z;sHI!1GV}bml`#4{j637rXQtR`O0)bA!*K76u8@s32jy+AeYU!2orl|v}5AK8QpZZ zblZ2A20RvYtF1&j%WW{jVt2`R+n2T{M*c+;F)JF4CM?z0eMTY?Oi&_WYBsn};$$up z^+ywS0yLUp-w(B(NHAP1Z%;QZs_95sY_vC(v~cNY z2MQQ28SSVY5~Ce&QC#}OE5zj+qOlyH4e`>;co7e0GcKV+vr|qe9Fmca7CbuLv54-J z`#Y8<9q>0byo%7+~j}7g0dY?@U(saSRXC8R=E3h zH+0sME}!YFrn}@jovBc;H{ydPk*j^PtE3pXwna|CQv@$fIsULuj_tab%H`Ev)o9mt zmHWVQk;}`j#TH#C|8w?NCbYT!DOyrtrb#R325WNzQ}E&Sp+V>er$Af0eoFP_oxNY^ zRkr+HU#Z+Or=F(D!*i-~zab-#)7R;1$7+ISUBfZCQLQO(*Xo*Uh}wSfGc6-l3}juO zH|}FsL9?ehmQrWt1_aFm^6{-XLA)r){ld38;~Lz;CPtGs2GAXoVbyME3cihcJ>ft# zxKXDE+6;D6;ZtiffcScS3>fCAjS`EGUCDLqZFntjT>%ZWEE zq=x*rZukyCZ#xz?L~A|fkZ1qcQhE2nX|Nba7S_|H@)rviqwQHV7wyoZ9W*~*zqpgA zUM^o!N8gh>m#oR%PvW^^b{~l!7qfdw{6{g{Kw@v4ttW9T&T{N?VxN(CGQmLjYC;kI zDxnBBl_qP7u0h~l9&PsVBP@;)fRp@KnSU4geEjrZG+ne*MW?`#&QT)R%1K_ zI7bQ?h7}XZ{*1!_V-1GeadJgpp5hwn9308&^{~3*)awPUQb!w#)CSVRxFP|S3M9n< zNdW&F*eeL@0&B6_^<~_cLbIn2j)5me)%z6g;dY`K*H^EZ$CYbQ_i*j{oW_ptb4z&1 zemB8OxLvP>IcPL_+$|Y)OL^&jGzngMQ%Vg7jw^};RwQ_$Fas*@8#Fv|Q)*a|g*~$5 z{~_}ZDFImt$PO>`-o|s5W7xb{@d>WXfL(>U#tNES_&Tq+al9*#QJiVV8$;0DG9HJX zmf`Kt(*O?_^mIgPBZZz0$}4#AyzZ7MnO3WY_aA9~;;<7}js9nqIr)|gI&y_Io^-IU<^m8Ij*vyKP+Cje znD42#39~WI@k38_8&9w@%1(Jha>p&dcdBgMQ^iZ%Zx51g0Lbc^45m)2*XOW@9s56bM>{4knv|-_h?K2(!>B437>@{&H;c zmxPnKe}qnr`3o!Z?=34MS|@+I{4IJ!9{qYt`6E;WQ33v~I(v>RE7Q+noiwC@@ z+p*O3J?L5aC+=ROqTGsg_oID$-N&>*Zn$Ul`0HRa6oq{eq|N@3I9+O{+4bNcJQthb z>WG7s-n8nbawqxfoS(`TKpPzLumM<;?bpPSI@TdO*1ubWTL9f*mz3VXVu2O+d)HB; zY(Dk{_F0vjx}k=)%Ox8o({#Ca!zB2qA8)v_>^ca}yUr|io$riZM~ZvnV}y4p9pL)= zd&w2|&ZP~3Q9Zb+FopEw1SM|lx@ z0Ap|&Y7{~FpnPVqo|en^2kY9FgNgy|ie62#jR*N1Wp{XEY_)9L zG?iA#Rhy=ZC2(PjVeuC6ayP>DSspMG$|-oC>}xooIl~znP@2co87m+(HORh>;hW?i zHz}5|&6OTY;I9-*ERQAm8JnLankhejpb~B9!8YoW9S^QUd+Nb!sYj-^452-+Wj#hF zJoF-6EPww{58BqPt!S5Ror?D9tu@pw-`QG5E9IwK$DxgFYsAR3ZAr9OZENv%XqT^V zdjV&xdpJwU{HG7s6L_B3zP~9A%&jK$}Zdpg}YJ^VY6mi<^(u+=+IKY)&nqoa0D9nhw z8WD%NILI+h18z~uc1rX#FO%InoUaxM*cBC0o;!E<0K@IzMT?NQYT_*}-sa$}Z;e`I zq{L}1Ugz9M!BElSlrUJiX9FN{hv{k0g%B{*m|?feqdRJgV&Y?MW`x3UkUqgzx-t2u z9iMe1J2a;Z_Q~R99S9H4#qQ(QMBpVkxYjN2SU>dHhsJumZ2jj$PprL%m#>|HIZLdC z!R3BwBUNU6fG6Z9kIXDBO~J1g ztAGOsA{)yJ{We}KyLVm{^wy`cJSLymc_GE+nVn5&|FW~8w77?dfh;%9>akaN5SIXQ2k%wX%Zdc(n)%4$QSgv+_8MV|+xb zEP={IG54u)MI)L-1Gdp-r3#eAS(RcGWq3T3QJw)H`5SyR!=@)~((!>wBAY_53_9Q{|lRYYHi|lQqQrW$?1|!S%&b*`?H=qoRN~{|; zJtSyW3Va(~sw_0z8}1Gegz%p=JB1BD*?Um{euEch(YfHUF;e(=A*26d~DCm2a!h#-#7WR;`z_y;(#@_cG|nNsZs z_Kl|&d30YR_2z%Iuh*bW`IaX;^`i4(eF*mqu{t^UREfnjNEuQVwKRriCOkXh8{;ot4vTM za&Y`qyAd1{QK3#$^|^~&I^)E+EvVNE_nDc)W9)vX2=>MjI!;vS9&q7lmlH<^7MU_o zRcOgbD(IFdJu;f28ZttJMy8PiQ!M%Uv(-5WdnSY(#>LLjK#vkQvc9Yc^*e}z5XYd` z>mk^OyBQ*;c$~m~h_sc@8d;{|Z=?qB<)bw5|CeSY#YBM|5TQPA%ev%1EfqK z9l%x4fO9(3xo@DpeQ3xnRpI*l>$&>Xw1qILy!2^hP&FGjL^!8(Wh5L6s;zm@F`?!T zDjh*?_ke4~zENM2w9aS?x(V_ZMoa03oVb@U4X7gqKKy%_7z^zwMcp;Ei*Pb!N=Ey%Es0+`7IIw|= zMmEdFgV)ezx$$6iYEA?ZC*l@wh8qpWa6rlaNPx|g-#fU8=E^yT+Pt<-K6@xibMq$- zy`j@(`He4BQ^EzpHJp7JAP0G&8pB|k;O|6=;X^G?4b6iJiR3*WtbO*_?1|_ zhZG_ZuwRXsY*3NbW>g6bs89?;*nvQ!7OBZSm`b8-g~a}o<1Ve0_KC{C9o{VBj^-22 z4XYq0&mzD_z$Ldrp1NW+c<(_4AqTRdLc9SM7UB&H!G zbTP8tMfvAW+(7z9zl^;!wgb#%uyI(_=mc~u#t^3r$^)lLI=7O7o|n!mtA&ZKs*Rsre&mAp+DBIWK{=(sTzG2Kf%hv1hQ0mZ z5!*^^S z`P9kADkJaMUFnBjxTEs9k}j{3q(evHMwDw}Uy*-0c{Lew_Nmkum=5+3A zhaRj6KDNjWryRcvAykD)o;~FRye||V<$s-WV|W&)I^Aqjkv_)iU#^U*U|wibwHKiS zc;Zzr-)ldiHU|U3Y`Xlnm+JxA$SXN&kXv6_9G4~q6<|>iG^;i7De7QSKizSS(m^n+ z&Pbwk$Mx}amU|}5R0@a+2NJA0{Telg#JNttOjY%i0YSvRMR$GY_1s(PDLTR&Y`*7o zrTH)_rt-zpsa!$%9n0g4<$(jnhHK;D&J?_md!m5O{()SpRS$Deh+kq8WbJyI`yqCi zVgsMbw^*vmqap~u`lw~s0v;fQ|Mc$6woxmJFNzJgCX5B_Xu_jZMFJk^S4o(aV%N&0 z-y3%Y%m4yOW55e<#K{=66L!L5p<=JP%n0Z^cke219|H7s*itBkBErS+2!THj?cpe4 zeG8RHyu9euM0h9IYNB8T+u+Mjc(q1{jqH2f$vvifaN;U@Dp>jn{9163` z3kR?v{K-Z=PMwAtiL%@6g}NE&UIQI$x;*qoJx!7yy)iK|3695Z_sSLQTe9lSgW*TP zP=E_>VUNlW-yB4izT}L`*grahj6JWvwUlU2{?_mJ8PUU}BT8QjZmGJEeEaPZT~Et@ zf4hcAhR0Dj GG5#0z0GBiX diff --git a/codecs/imagequant/package.json b/codecs/imagequant/package.json index 7797faa7..ad9bf993 100644 --- a/codecs/imagequant/package.json +++ b/codecs/imagequant/package.json @@ -2,7 +2,7 @@ "name": "imagequant", "scripts": { "install": "napa", - "build": "docker run --rm -v $(pwd):/src trzeci/emscripten-upstream ./build.sh" + "build": "../build-cpp.sh" }, "napa": { "libimagequant": "ImageOptim/libimagequant#2.12.1" diff --git a/codecs/mozjpeg_enc/Makefile b/codecs/mozjpeg_enc/Makefile new file mode 100644 index 00000000..bdd3b872 --- /dev/null +++ b/codecs/mozjpeg_enc/Makefile @@ -0,0 +1,45 @@ +CODEC_DIR := node_modules/mozjpeg +CODEC_OUT_RELATIVE := .libs/libjpeg.a rdswitch.o +CODEC_OUT := $(addprefix $(CODEC_DIR)/, $(CODEC_OUT_RELATIVE)) +OUT_JS := mozjpeg_enc.js +OUT_WASM := $(OUT_JS:.js=.wasm) + +.PHONY: all clean + +all: $(OUT_JS) + +%.js: %.cpp $(CODEC_OUT) + $(CXX) \ + -I $(CODEC_DIR) \ + ${CXXFLAGS} \ + ${LDFLAGS} \ + --bind \ + --closure 1 \ + -s ALLOW_MEMORY_GROWTH=1 \ + -s MODULARIZE=1 \ + -s 'EXPORT_NAME="$(basename $(@F))"' \ + -o $@ \ + $+ + +# This one is a bit special: there is no rule for .libs/libjpeg.a +# so we use libjpeg.la which implicitly builds that one instead. +$(CODEC_DIR)/.libs/libjpeg.a: $(CODEC_DIR)/Makefile + $(MAKE) -C $(CODEC_DIR) libjpeg.la + +$(CODEC_DIR)/rdswitch.o: $(CODEC_DIR)/Makefile + $(MAKE) -C $(CODEC_DIR) rdswitch.o + +$(CODEC_DIR)/Makefile: $(CODEC_DIR)/configure + cd $(CODEC_DIR) && ./configure \ + --disable-shared \ + --without-turbojpeg \ + --without-simd \ + --without-arith-enc \ + --without-arith-dec + +$(CODEC_DIR)/configure: + cd $(CODEC_DIR) && autoreconf -iv + +clean: + $(RM) $(OUT_JS) $(OUT_WASM) + $(MAKE) -C $(CODEC_DIR) clean diff --git a/codecs/mozjpeg_enc/build.sh b/codecs/mozjpeg_enc/build.sh deleted file mode 100755 index 8a92649a..00000000 --- a/codecs/mozjpeg_enc/build.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -set -e - -export EM_CACHE="${PWD}/node_modules/.em_cache" -export OPTIMIZE="-Os -flto --llvm-lto 1" -export LDFLAGS="${OPTIMIZE}" -export CFLAGS="${OPTIMIZE}" -export CPPFLAGS="${OPTIMIZE}" - -apt-get update -apt-get install -qqy autoconf libtool libpng-dev pkg-config - -echo "=============================================" -echo "Compiling mozjpeg" -echo "=============================================" -( - cd node_modules/mozjpeg - autoreconf -iv - emconfigure ./configure -C --without-simd - emmake make libjpeg.la rdswitch.o -j`nproc` -) -echo "=============================================" -echo "Compiling mozjpeg done" -echo "=============================================" - -echo "=============================================" -echo "Compiling wasm bindings" -echo "=============================================" -( - emcc \ - --bind \ - ${OPTIMIZE} \ - --closure 1 \ - -s ALLOW_MEMORY_GROWTH=1 \ - -s MODULARIZE=1 \ - -s 'EXPORT_NAME="mozjpeg_enc"' \ - -I node_modules/mozjpeg \ - -o ./mozjpeg_enc.js \ - -std=c++11 \ - mozjpeg_enc.cpp \ - node_modules/mozjpeg/.libs/libjpeg.a \ - node_modules/mozjpeg/rdswitch.o -) -echo "=============================================" -echo "Compiling wasm bindings done" -echo "=============================================" - -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "Did you update your docker image?" -echo "Run \`docker pull trzeci/emscripten-upstream\`" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" diff --git a/codecs/mozjpeg_enc/mozjpeg_enc.js b/codecs/mozjpeg_enc/mozjpeg_enc.js index 7d79efb6..7c6d20f6 100644 --- a/codecs/mozjpeg_enc/mozjpeg_enc.js +++ b/codecs/mozjpeg_enc/mozjpeg_enc.js @@ -11,52 +11,52 @@ var d;d||(d=typeof mozjpeg_enc !== 'undefined' ? mozjpeg_enc : {});var aa;d.read if(ca)x=w?require("path").dirname(x)+"/":__dirname+"/",B=function(a,b){ea||(ea=require("fs"));fa||(fa=require("path"));a=fa.normalize(a);return ea.readFileSync(a,b?null:"utf8")},C=function(a){a=B(a,!0);a.buffer||(a=new Uint8Array(a));a.buffer||D("Assertion failed: undefined");return a},1=e);)++c;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e} function oa(a,b,c){var e=I;if(0=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}if(127>=g){if(b>=c)break;e[b++]=g}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var pa="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; function qa(a,b){var c=a>>1;for(var e=c+b/2;!(c>=e)&&ra[c];)++c;c<<=1;if(32>1];if(0==f||c==b/2)return e;++c;e+=String.fromCharCode(f)}}function sa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;J[b>>1]=0;return b-e}function ta(a){return 2*a.length} function ua(a,b){for(var c=0,e="";!(c>=b/4);){var f=K[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023)):e+=String.fromCharCode(f)}return e}function va(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}K[b>>2]=g;b+=4;if(b+4>c)break}K[b>>2]=0;return b-e} function wa(a){for(var b=0,c=0;c=e&&++c;b+=4}return b}var L,M,I,J,ra,K,N,xa,ya;function za(a){L=a;d.HEAP8=M=new Int8Array(a);d.HEAP16=J=new Int16Array(a);d.HEAP32=K=new Int32Array(a);d.HEAPU8=I=new Uint8Array(a);d.HEAPU16=ra=new Uint16Array(a);d.HEAPU32=N=new Uint32Array(a);d.HEAPF32=xa=new Float32Array(a);d.HEAPF64=ya=new Float64Array(a)}var Aa=d.INITIAL_MEMORY||16777216;d.wasmMemory?H=d.wasmMemory:H=new WebAssembly.Memory({initial:Aa/65536,maximum:32768}); -H&&(L=H.buffer);Aa=L.byteLength;za(L);K[23016]=5335104;function Ba(a){for(;0>2])}var R={},S={},Ta={};function Ua(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Va(a,b){a=Ua(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} -function Wa(a){var b=Error,c=Va(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Xa=void 0; -function Ya(a,b,c){function e(k){k=c(k);if(k.length!==a.length)throw new Xa("Mismatched type converter count");for(var h=0;h>2])};case 3:return function(c){return this.fromWireType(ya[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function gb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Va(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} -function hb(a,b){var c=d;if(void 0===c[a].Y){var e=c[a];c[a]=function(){c[a].Y.hasOwnProperty(arguments.length)||V("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].Y+")!");return c[a].Y[arguments.length].apply(this,arguments)};c[a].Y=[];c[a].Y[e.fa]=e}} -function ib(a,b,c){d.hasOwnProperty(a)?((void 0===c||void 0!==d[a].Y&&void 0!==d[a].Y[c])&&V("Cannot register public name '"+a+"' twice"),hb(a,a),d.hasOwnProperty(c)&&V("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),d[a].Y[c]=b):(d[a]=b,void 0!==c&&(d[a].ra=c))}function jb(a,b){for(var c=[],e=0;e>2)+e]);return c} -function Y(a,b){a=U(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return ra[e>>1]};case 2:return c?function(e){return K[e>>2]}:function(e){return N[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var pb={}; -function qb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function rb(a,b){var c=S[a];void 0===c&&V(b+" has unknown type "+lb(a));return c}var sb={},tb={};function ub(){if(!vb){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ba||"./this.program"},b;for(b in tb)a[b]=tb[b];var c=[];for(b in a)c.push(b+"="+a[b]);vb=c}return vb} -var vb,wb=[null,[],[]];Xa=d.InternalError=Wa("InternalError");for(var xb=Array(256),yb=0;256>yb;++yb)xb[yb]=String.fromCharCode(yb);$a=xb;ab=d.BindingError=Wa("BindingError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},Z:null})},w:function(a,b){b=U(b);T(a,{name:b,fromWireType:function(c){var e=X[c].value;cb(c);return e},toWireType:function(c,e){return db(e)},argPackAdvance:8,readValueFromPointer:Sa,Z:null})},h:function(a,b,c){c=Za(c);b=U(b);T(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+ -eb(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:fb(b,c),Z:null})},e:function(a,b,c,e,f,g){var l=jb(b,c);a=U(a);f=Y(e,f);ib(a,function(){nb("Cannot call "+a+" due to unbound types",l)},b-1);Ya([],l,function(k){var h=[k[0],null].concat(k.slice(1)),m=k=a,n=f,q=h.length;2>q&&V("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var y=null!==h[1]&&!1,z=!1,p=1;p>2])}var R={},S={},Sa={};function Ta(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Ua(a,b){a=Ta(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} +function Va(a){var b=Error,c=Ua(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Wa=void 0; +function Xa(a,b,c){function e(k){k=c(k);if(k.length!==a.length)throw new Wa("Mismatched type converter count");for(var h=0;h>2])};case 3:return function(c){return this.fromWireType(ya[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function fb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ua(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} +function gb(a,b){var c=d;if(void 0===c[a].Y){var e=c[a];c[a]=function(){c[a].Y.hasOwnProperty(arguments.length)||V("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].Y+")!");return c[a].Y[arguments.length].apply(this,arguments)};c[a].Y=[];c[a].Y[e.ea]=e}} +function hb(a,b,c){d.hasOwnProperty(a)?((void 0===c||void 0!==d[a].Y&&void 0!==d[a].Y[c])&&V("Cannot register public name '"+a+"' twice"),gb(a,a),d.hasOwnProperty(c)&&V("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),d[a].Y[c]=b):(d[a]=b,void 0!==c&&(d[a].ra=c))}function ib(a,b){for(var c=[],e=0;e>2)+e]);return c} +function Y(a,b){a=U(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return ra[e>>1]};case 2:return c?function(e){return K[e>>2]}:function(e){return N[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var ob={}; +function pb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function qb(a,b){var c=S[a];void 0===c&&V(b+" has unknown type "+kb(a));return c}var rb={},sb={};function tb(){if(!ub){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"===typeof navigator&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8",_:ba||"./this.program"},b;for(b in sb)a[b]=sb[b];var c=[];for(b in a)c.push(b+"="+a[b]);ub=c}return ub} +var ub,vb=[null,[],[]];Wa=d.InternalError=Va("InternalError");for(var wb=Array(256),xb=0;256>xb;++xb)wb[xb]=String.fromCharCode(xb);Za=wb;$a=d.BindingError=Va("BindingError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},Z:null})},w:function(a,b){b=U(b);T(a,{name:b,fromWireType:function(c){var e=X[c].value;bb(c);return e},toWireType:function(c,e){return cb(e)},argPackAdvance:8,readValueFromPointer:Ra,Z:null})},h:function(a,b,c){c=Ya(c);b=U(b);T(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+db(f)+ +'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:eb(b,c),Z:null})},e:function(a,b,c,e,f,g){var l=ib(b,c);a=U(a);f=Y(e,f);hb(a,function(){mb("Cannot call "+a+" due to unbound types",l)},b-1);Xa([],l,function(k){var h=[k[0],null].concat(k.slice(1)),m=k=a,n=f,q=h.length;2>q&&V("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var y=null!==h[1]&&!1,z=!1,p=1;p>>k}}var h=-1!=b.indexOf("unsigned");T(a,{name:b,fromWireType:g,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+eb(n)+ -'" to '+this.name);if(nf)throw new TypeError('Passing a number "'+eb(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return h?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:ob(b,l,0!==e),Z:null})},a:function(a,b,c){function e(g){g>>=2;var l=N;return new f(L,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=U(c);T(a,{name:c,fromWireType:e,argPackAdvance:8, +A.push(m+"}\n");h=fb(A).apply(null,n);p=b-1;if(!d.hasOwnProperty(k))throw new Wa("Replacing nonexistant public symbol");void 0!==d[k].Y&&void 0!==p?d[k].Y[p]=h:(d[k]=h,d[k].ea=p);return[]})},b:function(a,b,c,e,f){function g(m){return m}b=U(b);-1===f&&(f=4294967295);var l=Ya(c);if(0===e){var k=32-8*c;g=function(m){return m<>>k}}var h=-1!=b.indexOf("unsigned");T(a,{name:b,fromWireType:g,toWireType:function(m,n){if("number"!==typeof n&&"boolean"!==typeof n)throw new TypeError('Cannot convert "'+db(n)+ +'" to '+this.name);if(nf)throw new TypeError('Passing a number "'+db(n)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return h?n>>>0:n|0},argPackAdvance:8,readValueFromPointer:nb(b,l,0!==e),Z:null})},a:function(a,b,c){function e(g){g>>=2;var l=N;return new f(L,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=U(c);T(a,{name:c,fromWireType:e,argPackAdvance:8, readValueFromPointer:e},{ka:!0})},i:function(a,b){b=U(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(e){var f=N[e>>2];if(c)for(var g=e+4,l=0;l<=f;++l){var k=e+4+l;if(0==I[k]||l==f){g=g?na(I,g,k-g):"";if(void 0===h)var h=g;else h+=String.fromCharCode(0),h+=g;g=k+1}}else{h=Array(f);for(l=0;l=q&&(q=65536+((q&1023)<<10)|f.charCodeAt(++n)&1023);127>=q?++m:m=2047>=q?m+2:65535>=q?m+3:m+4}return m}:function(){return f.length})(),k=zb(4+l+1);N[k>>2]=l;if(c&&g)oa(f,k+4,l+1);else if(g)for(g=0;g>2],n=l(),q,y=h+4,z=0;z<=m;++z){var p=h+4+z*b;if(0==n[p>>k]||z==m)y=e(y,p-y),void 0===q?q=y:(q+=String.fromCharCode(0),q+=y),y=p+b}Z(h);return q},toWireType:function(h, -m){"string"!==typeof m&&V("Cannot pass non-string to C++ string type "+c);var n=g(m),q=zb(4+n+b);N[q>>2]=n>>k;f(m,q+4,n+b);null!==h&&h.push(Z,q);return q},argPackAdvance:8,readValueFromPointer:Sa,Z:function(h){Z(h)}})},m:function(a,b,c,e,f,g){Qa[a]={name:U(b),la:Y(c,e),ma:Y(f,g),da:[]}},f:function(a,b,c,e,f,g,l,k,h,m){Qa[a].da.push({ga:U(b),ja:c,ha:Y(e,f),ia:g,oa:l,na:Y(k,h),pa:m})},y:function(a,b){b=U(b);T(a,{qa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},v:cb, -B:function(a){if(0===a)return db(qb());var b=pb[a];a=void 0===b?U(a):b;return db(qb()[a])},k:function(a){4>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+ -g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(rb,d,db);sb[b]=f}return f(a,c,e)},r:function(){D()},q:function(a,b,c){I.copyWithin(a,b,b+c)},c:function(a){a>>>=0;var b=I.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>>16);za(H.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},s:function(a,b){var c=0;ub().forEach(function(e,f){var g=b+c;f=K[a+4*f>>2]=g;for(g=0;g>0]=e.charCodeAt(g);M[f>>0]=0;c+=e.length+1});return 0},t:function(a,b){var c=ub();K[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});K[b>>2]=e;return 0},z:function(a){if(!noExitRuntime&&(la=!0,d.onExit))d.onExit(a);u(a,new ha(a))},u:function(){return 0},o:function(){},g:function(a, -b,c,e){for(var f=0,g=0;g>2],k=K[b+(8*g+4)>>2],h=0;h>2]=f;return 0},memory:H,p:function(){},table:ja}; -(function(){function a(f){d.asm=f.exports;O--;d.monitorRunDependencies&&d.monitorRunDependencies(O);0==O&&(null!==Ia&&(clearInterval(Ia),Ia=null),P&&(f=P,P=null,f()))}function b(f){a(f.instance)}function c(f){return Na().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);D(g)})}var e={a:Ab};O++;d.monitorRunDependencies&&d.monitorRunDependencies(O);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+ -f),!1}(function(){if(G||"function"!==typeof WebAssembly.instantiateStreaming||Ka()||Ja("file://")||"function"!==typeof fetch)return c(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); -var Oa=d.___wasm_call_ctors=function(){return(Oa=d.___wasm_call_ctors=d.asm.D).apply(null,arguments)},Z=d._free=function(){return(Z=d._free=d.asm.E).apply(null,arguments)},zb=d._malloc=function(){return(zb=d._malloc=d.asm.F).apply(null,arguments)},mb=d.___getTypeName=function(){return(mb=d.___getTypeName=d.asm.G).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.H).apply(null,arguments)}; +f instanceof Uint8ClampedArray||f instanceof Int8Array||V("Cannot pass non-string to std::string");var l=(c&&g?function(){for(var m=0,n=0;n=q&&(q=65536+((q&1023)<<10)|f.charCodeAt(++n)&1023);127>=q?++m:m=2047>=q?m+2:65535>=q?m+3:m+4}return m}:function(){return f.length})(),k=yb(4+l+1);N[k>>2]=l;if(c&&g)oa(f,k+4,l+1);else if(g)for(g=0;g>2],n=l(),q,y=h+4,z=0;z<=m;++z){var p=h+4+z*b;if(0==n[p>>k]||z==m)y=e(y,p-y),void 0===q?q=y:(q+=String.fromCharCode(0),q+=y),y=p+b}Z(h);return q},toWireType:function(h, +m){"string"!==typeof m&&V("Cannot pass non-string to C++ string type "+c);var n=g(m),q=yb(4+n+b);N[q>>2]=n>>k;f(m,q+4,n+b);null!==h&&h.push(Z,q);return q},argPackAdvance:8,readValueFromPointer:Ra,Z:function(h){Z(h)}})},m:function(a,b,c,e,f,g){Pa[a]={name:U(b),la:Y(c,e),ma:Y(f,g),da:[]}},f:function(a,b,c,e,f,g,l,k,h,m){Pa[a].da.push({fa:U(b),ja:c,ha:Y(e,f),ia:g,oa:l,na:Y(k,h),pa:m})},y:function(a,b){b=U(b);T(a,{qa:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},v:bb, +B:function(a){if(0===a)return cb(pb());var b=ob[a];a=void 0===b?U(a):b;return cb(pb()[a])},k:function(a){4>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+ +g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(qb,d,cb);rb[b]=f}return f(a,c,e)},r:function(){D()},q:function(a,b,c){I.copyWithin(a,b,b+c)},c:function(a){a>>>=0;var b=I.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>>16);za(H.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},s:function(a,b){var c=0;tb().forEach(function(e,f){var g=b+c;f=K[a+4*f>>2]=g;for(g=0;g>0]=e.charCodeAt(g);M[f>>0]=0;c+=e.length+1});return 0},t:function(a,b){var c=tb();K[a>>2]=c.length;var e=0;c.forEach(function(f){e+=f.length+1});K[b>>2]=e;return 0},z:function(a){if(!noExitRuntime&&(la=!0,d.onExit))d.onExit(a);u(a,new ha(a))},u:function(){return 0},o:function(){},g:function(a, +b,c,e){for(var f=0,g=0;g>2],k=K[b+(8*g+4)>>2],h=0;h>2]=f;return 0},memory:H,p:function(){},table:ja}; +(function(){function a(f){d.asm=f.exports;O--;d.monitorRunDependencies&&d.monitorRunDependencies(O);0==O&&(null!==Ha&&(clearInterval(Ha),Ha=null),P&&(f=P,P=null,f()))}function b(f){a(f.instance)}function c(f){return Ma().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){E("failed to asynchronously prepare wasm: "+g);D(g)})}var e={a:zb};O++;d.monitorRunDependencies&&d.monitorRunDependencies(O);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return E("Module.instantiateWasm callback failed with error: "+ +f),!1}(function(){if(G||"function"!==typeof WebAssembly.instantiateStreaming||Ja()||Ia("file://")||"function"!==typeof fetch)return c(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){E("wasm streaming compile failed: "+g);E("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); +var Na=d.___wasm_call_ctors=function(){return(Na=d.___wasm_call_ctors=d.asm.D).apply(null,arguments)},Z=d._free=function(){return(Z=d._free=d.asm.E).apply(null,arguments)},yb=d._malloc=function(){return(yb=d._malloc=d.asm.F).apply(null,arguments)},lb=d.___getTypeName=function(){return(lb=d.___getTypeName=d.asm.G).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.H).apply(null,arguments)}; d.dynCall_i=function(){return(d.dynCall_i=d.asm.I).apply(null,arguments)};d.dynCall_vi=function(){return(d.dynCall_vi=d.asm.J).apply(null,arguments)};d.dynCall_iii=function(){return(d.dynCall_iii=d.asm.K).apply(null,arguments)};d.dynCall_viii=function(){return(d.dynCall_viii=d.asm.L).apply(null,arguments)};d.dynCall_ii=function(){return(d.dynCall_ii=d.asm.M).apply(null,arguments)};d.dynCall_iiiiii=function(){return(d.dynCall_iiiiii=d.asm.N).apply(null,arguments)}; d.dynCall_viiiii=function(){return(d.dynCall_viiiii=d.asm.O).apply(null,arguments)};d.dynCall_vii=function(){return(d.dynCall_vii=d.asm.P).apply(null,arguments)};d.dynCall_iiiiiii=function(){return(d.dynCall_iiiiiii=d.asm.Q).apply(null,arguments)};d.dynCall_iiiii=function(){return(d.dynCall_iiiii=d.asm.R).apply(null,arguments)};d.dynCall_iiii=function(){return(d.dynCall_iiii=d.asm.S).apply(null,arguments)};d.dynCall_viiiiiiii=function(){return(d.dynCall_viiiiiiii=d.asm.T).apply(null,arguments)}; -d.dynCall_viiii=function(){return(d.dynCall_viiii=d.asm.U).apply(null,arguments)};d.dynCall_viiiiiii=function(){return(d.dynCall_viiiiiii=d.asm.V).apply(null,arguments)};d.dynCall_jiji=function(){return(d.dynCall_jiji=d.asm.W).apply(null,arguments)};d.dynCall_viiiiii=function(){return(d.dynCall_viiiiii=d.asm.X).apply(null,arguments)};var Bb;function ha(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}P=function Cb(){Bb||Db();Bb||(P=Cb)}; -function Db(){function a(){if(!Bb&&(Bb=!0,d.calledRun=!0,!la)){Ba(Da);Ba(Ea);aa(d);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();Ga.unshift(b)}Ba(Ga)}}if(!(0n94x?YcfoC=D(h^U~5K!bxT zx~wOP3K}8a#tRS?an%)Xbk+3+6@B2q<`l{}(uCA`G>h8xaKZJJQ z6$)xI=FcKc)97wdx;9vrsAGK|MuiI*C*gDMZ;>dM;5=GXg~9*M-m0bxJiTG0_mD>6)Hcg23pL<6JZd5lB;WF9a#q8k`w7>qEqaDIY6 ziDEHw*1Ynf2qavXP6M?YbsD7EG*~O7A=+OA4b}caG)!AgG+g_PXoU7D(MatdM5DA% zh(>E46OGXh5{=b9A{wWCNOYR^KGEsgdqihw?-GsI-XWTx9Uz*h{her%_BJK`lSp$Y zu=sQOfZmGHoAd_#jh55vw1@W7)8Z-dq=2KLyXa1u(`&>N z^f*06k5UWmq#g7yJw!L?tMu#j>-3fS3jJFB8vSa0xqg-2q@NJS#c$%6_*wiUj)=uS ziVwv5;ytljjMyb!6fcP9#dG4>bH&SIuh=90CcY70i7&+$;-BJk@tOEkd@V+_if6>@ zV!wDz>=UnwSHv2zT1auLSSMn`{zX62PjrN0!$yqwo(|D>^eqkhfrkB)zNBwx*cbE_ zeND+5KTh~j$e?kZG!lzweREmj7D1il8_AQXQ*%XNu;|#yG8`*v35zVh$q6%Rg)EjSP> zU?(VC@bJd;N4l-YxB*OFEY2w{q&ZLSH6psM=18+OCoviU|3X>-xN>1eoxq$tm{DJU zC#Yd6h%q$LU=h!$Zu!()+HDN5{206N#!dmSNaknu;^{j(^XjUTZE#hV6vazD&bzj% zwx1d2RZh*Cn56hXm>)SeD}%{dnN^d?vz5TJiJ4N<77PVgSl-OKka^oTdlqy0f$X&c znGHEBklDO9#~?0zJ@*Wzs5md5afakAHofV#$uh<$Ns#;V(gWPG@B~I4&Z`WdOHY7M zx1>X7+mkx3Gy;{7vJjnV6IX$F0%Yg%vdMvfqhVPXPM4_d!)(5?m!|+V-c%7D=z+aP z|5zQW?MI|(a})l2oCK;BaDq{1&RplfeQ(`o%;&Zb?v2y2eXl&;p`hV@)sC&B$veGh zB37cEWF?NWk}Q41ybws(zSpSKG{-kLWI#&1b)>31vR6*YuM&s%$~F1v_7=!~S9B8e z2b{y`od;u)6B`@?FCu;rD0k=A7RS5fQN+8{Ek9O;rH`@_EDc?%`m(5?N0^)8mC6I% zvP;e^sN~N6T+p3^*9*EtPWDLw7AtfHW_68P{!#N-(%;-GBUU~mJ62uzB(h)v5BtC2Ik5-@`e_jX-T-ZGB>j&at&f!T#!%zK z<-sadqd8j?%UJ>tQv_fXYAOCFlYfa6$Ku*jbHGze8K&e@2FCp(;KjSB%5t_Fn)<-m&z8rEA&@o*J!TP-ANM>h`_1PJ zXKRIn3g$S66L(iQeon}dz4mq*Y(ZgTF0>L+Z|P=D0BaO0sou*%Nr~ufE|9%@Z=mt= zZ@mZLo6+amV7EX3by$Izk>-2*bknmpJ+HdaRX3bKH$K(Pk%m5HksOPlW>`&NOijY< z55_eujY46Zpb=08=$DN;v%fsssmrfYd^Km=KBqnOxpU?Euiw|PC$a)DtK{0LrSctT zM8Sb&hO>W}VHvreO#q&V5xF)jov58?7RmwrBOx@EV3CcT2szDj`%i$yF82(`qeA)F zfXir+oIbDyoZ2w3yF4+do+7e-a23s$(ZN&dYXa>cFN!^A*z5=sOA91n+@7ZNBWBug za4f9?+Dsc7&@~ElCz4}EWl1sgI2xm2FH)p=_psrVHk=!RaG^>dl_=);%zm=th^eJb zPZ`lJr1jF!kRzgjY=qEapK7yh%{(1>n_`U?Ma|RYh*9Ii)j~BB3<1l$M?N^J3#R15 zQC;y(89kMz$l0SWDe4Gzv#|T3PHNP_dV^^=)8t7&F3<0J5s=5nNSQR|)6}LHc`=f? z9)nauEZ2;kLFMv?u_aU_bH{z19VgufQ&p?PT-9NHfUZ}bkp-ufk=;D}v>rsiH7`H? zYBF}gQ`F>Nr*zCMMXN@suGQ&0AjA^u^hC@))`<*_AIfWe;&_+(%R}QcsI&A>cnsgx z33rey|1_}{@mnTdjd)~|BMv<*|1_zQZj!H0$`eg3^3bH!9K_Ci00@<5Rc1A{!1xS1 zB9asg2P}W7-e9L$DdtUb-dX)>QOFxZg41Nq#g;&kB*h)eT&FKm; zR!B`gAgPR0E7{RFZUt1c*g@NnR7)5hZ`=lk?(ElC4;g_B5W+jVmZA)v@25ppMP$&WBTbnf&E~g*gyE-C2X3TyvHuvM}mc z`zqSJ^1{<~d1PiWZI*eB1<8E|fs4?3=4v^pu_Ds~J0LzL7B+$`8*&P9T`E^L4lC{B zXd^)>S;?pnF#B*k;$wfua1Lux)(HKz{+emYUmLrUB`apt;(P9_W%zzRYZbopXJ3c! z@!1X3)ZFjlXIO2Xm@^dLp>s#1Rj{_AXn!TY8|ezrR3Yz~o8O)b4x)XZSG4E~IsnFY+| zDf0#x?fbKl-qdvP#0kwx1zYsxW95!ZtLTm9e_lG3sJk4zxVzrnyjLz=JR7NR7Z1R< z>aqc`?$9vsp)eQ1?1p%f)9+-Q5QmMS@;OeBy>2;J{9rqf$n+}1{Et`m|6eO>aon~> z0&)GRo4=9#`Ld_;euFYfgIu#>O4YOgs~AM#-yPTF{>v+=r#y~tXIZht#&^t;A%n09 z1LJqkH^L6K=is9%JNP;~`1qXS;G-mH^WNX);J>$o9sG4oC;j^;u2BAcx24^)J(HP{ z**0Xuk}VdtSDTh*_lWoZzx3r*ZTN6(H8w5Hl3y(iu)FuKr4?-kq|d^5f_9t#$)^v! zV}Bqnujvn-`Rz?{&zwz_xM$Ax0K9FX3?H=eYtti<-|eC{>ydqOSdVQ!dGr1&bqXg! zt3zM#axqVk{CHU&^_9n$4Jtne7JDQS$}eE{i(nVQ`Vw&GeC81BhK5Q()%h*M93p35 zm3t;Pox0$ zFV=8m7OEB-*x|;8w0LTf<(RXO zC=b;`^yGsPG3EDOeHDA`ZAUt??wX-(^A2tHN5^5~HUGnL;2tcT%(giWi>}?39H$Ay z%b_bO{n+hcRmjU%TmeP)?-f1qtywt`-^DBI@qJi*zh1eV3gn#Ydg8nFItSlxuR9mt zao3N+_b=B+(>4mWciQ$0#jC5EJFMzYSa;KJD93lz4SzQdJZLzET(i1JG;NbNtS&aT zY%?5PW$fQ3KUzIT9Ni|n-k1^F15PqG$+BV zX)bq161^!GZS0x)7LQ zsc~T1nTy!=IhhF9EW+MWn4Kg0-#jN=j>U5oInQHx=9)#a_2wLElJDK@#BL&;0iw9ZRgDh*%ym^D*I2kCgBXakBMX_vk zo@ZHJ5K#f2L7~MwSVA!Df>t{09CU?6v>;-tP9mxBrh=+BE5+IDi$<+fG}(b!o8lbS zaaiud<^v@!g&<=SJ$S9_C!D-l|5?lKvZ>*n9_% ztj9p^Q`1UXH=A<}AD0y&r(mHSj9S6@a7S3QKsDHe0bmC%nr&4^BYBwK3=BGh zSyli}VV>a4#(22xdE~ZfWmtI_Z!glE6A6(pONL{DzfM!ru>vf0=gOlxJQrl5GpA|M zaJU+lX@yb23P*w*4_f(+w#ulnid1zVH(F^kF-yV5hu24{&}s#n-C*H2U}5Ye50O`8 zb+c-$T#QZ)ai$eU|7gI_-1{ntvei!E$Xx-simB&?2TatZ{5In~kXR*w$C+-54~1~VV9BA$#{=`3O_ zE2j)X(Grrht!GRPN*#;_FoTfF46jDOljd$#J2fu96|~`sS^Yj89okE6~l;?GD%@C$x4el!U`@x1vn!?%N&|(GdHailt75OD>1b4+JtUB zvpocYJ28`)#ZVWZ%Pu%c8MIA!xXp(hh(O_D$>plS*hMT#F;szQ85+)0>af$!hc{Mm|7K| zs&I_Qv5r&VLzolN?rzntQ&XLV>92t@2TZZUx#*-jRvseVz}pZJ zH#m}JWr3nlBn)amIJ^QxJc>@CCl;4zNFt9tjMJBZrBq%Jdz8{JEFWt5U@lZgkY-FR z5Mf$C!A4oZTXqH}CdbNFId&dTA^h+vm4SE|62c>8rkhrT@1e7XLa1Y&e4~AqHPf=N zQo!Y6XtcOIo)nCT$IUdJNZ1Dg))2U%TE&@Dw&EQkmd8~nDK@bn@cbi! z`A5aU5tve*fD&ebeJ#u;wuI3j?{|AcfFdkcWFq3JRXv8yBth+`V!Kaw;qd*(=??ERDEL$%n1_T)n^(%+uh$3u#SMMOpKoRI z-#&$RbLemTsadwZ(J^69+|l~xjZsssCmir-<}_QMX$ig(5YXnx=!ma^YWWFtutPr2&!^6 zMgqs=U^#F@ILm-PhZBoHPxwYoqM2mlZo$@^&CeLT1o==r9`QxZW$?9>r?MoBL1qbdKhH z$py08yK}6CwthXzv@ugKANm&HVlg%~Eee=_=LvmFKKJfExUy^CtDr08)9-$3ooWQN+0^n_a8&_^~yb3rf4D2*Kx3twa(>CCj zlG!(c11NBzVW#;Sn%l!1*@GLCeR9MHHr*#@f6%e=)p(}mQ->~Q9Y;)CcVeu%6~6P( zTX)_LDKf8;tsnFl@~3!i)1mjD!NG5(mTtCXefh%Hl}kA*<7C!j$A5X~a&9xryo$Rj z!5s0*S|%GlEC}PcnF++?2h#B^iJE=63!hEq zD{}XT{W7jpvtabcjS8wg^MVw1H&ivObh89ohrSHnfrs+;e-7*MWGfVq3C60!B69X{8VCJ2A|eMCy5^Mg`Eo_hA+o;n63^T0|}r7=QDvs zgywVzf*+UY&&XfD%ohirmbqVbGLPc2U3sJ$>ojQlabI<>KSc@pJSAwHRDy<5f<7og zYo!LMJ3dSD6No}eO;Nog3tCaA-tUtZ)aT2 z+nH?rI@gEI%aT)$m*J*u#qs_W>kLfi#(i4bsrL=>Q*UR@K6RaZ1A1}}Kjd8~pAi_0 zS#wT2`*s(`N0HeiAlHo3^xWHBW~0N^=+J3;ddt{GSPIzZR6Aszfn3#$7B$ZZ^yBO7 zY)qh>{!LE)t4|xHnpUUbP~6!QkE0*&()?Pv@tgeEVZ3RB*sxuWlQNu0spE4NI%W^^ z4mXg{VZc*%1pGCQtJ4|Yi9n%O8=T;67d$cBq4r56EKYBmZe#_ZPAWCrgSIX+B0guY z{P(y0#O`IX=XX`&&0TWVckl9L^sqz4;+tJ^-l5YtbJw9VvHc18!=cmD`LS0vx^ZG) z4vYqlE^V2ZMMDYiQh9c8iFy>`jkg%?wrm_fo_)BA_Q@L#FAo(&1TG`ljwG`{=6~OZ z3YsT>A0(W)U-UyYNqOrJ!@2V>e<-3ZGW=t8avAP$aVbdV06F5voJNapv$Nn2Au#z~ zvpsrSI_rV)U=I`af?|MQT}B!vSH=Y}BTwhgh5cjwPpH3Va773Q#m~2sC>YD1Nq;Dn zum70W{?ta-@J?iwtviyBdxQe@?R(_%6z*j^iu@&_$qzdB94SEg7e^whqzUrdR+9Bo zK{j`K5WWE}foAfAZ+=3ZfS6@+>`w)>RL=dWXMkJWk9s`noj(<1aGmW)Cvt@YkGEC$ z8Wk)V_<4cY{6zDWKRbj_zVNRFS*j1bGV?o4I6_E>+w*8_?9l=$m2-}E%H}S%1EoE@ zER4MsPkT!BJ%(vDZ#!B6Xo{ZioHf-b!cuR#j_{&n%T)f9;`4*$R)B zHmTATT)OPnPO5ax?{zn;(k)#2?5|xbuTbsbX&Hv0t4r=a*rw5&*B)}%2y1F;J<$&} z3XWNzuHjfFD4leyXTahIw-_7wz#fm`@OAl;KhRAS!SR z1a;1+1j<1y24743oLAFsH@mp!3Ucx!+2J^Uz@pe`A;Q?;l=j!mO1D)|J#}&aEvWpI z<$&uf$h^-ibL(_g!|o(6Sgcdu)KaFhtwAt+i@QgsQYv+S&}j;lxnq4)9%328izTp? zTUp_wLR#nE@1xQZJYyIFb!iQqJJ*KcIsj-a{_Wt?V_>c7;lm#6>h5no%EZeW&?2J! zae4+f8bK-oMg~F`gCOzl7=tp;!s3OTVx$}%CEN7oo2|oBCK^n_xWecv6A)ynlfz zgr$Z(-RFGzxciBpdhY-TldwLzV7*$&@Faebn8P45zaad~m-@rg5m;5TNrB z+!LUQD8DI4gA;h9XvA#@QKtK+AdPn7IjUJ(9~I(L61;}yS08u_H5P{pYAbUx8y({k ze(3rv^c;?=!9b57_s2gpJhclG3}z%xfXQ$Q)wb@vp*tlD&n)!@H#I~h>ELI4bc_W{ z(9c6j4pWbomOLuvO-#ooW;j>k6$##nIqr8IDCQ0b(};qe>bQmAC*kl2Mo6VbW>2(Y z@uQkb-5r-q#lC_7=J-IE{sf-&NujP_&FmB!mf0CwG8=BfDZ-Hxc1oW!HfpYL_oYx3 zb-u}@PSm-j*re_hTtmFK{kKMYx%*Nn2`wK;#d;}lkEPNzbiI33I~qX|_qBG^mm)3U z_LM=i%I%m&^?7IuZ+#Q7D%zPh2poy=YhEvTt-Cml22!E>befVkkxoT)ja!^fXV8uA zl62~UvYqKvjgG!bhoIc(R%9Tvz&$^MCL(w`gMQA%Yh`}hpw=iH&=lne@qCzT-PbZH zCubucQV^dp_;T^%1Xy#Hz_~i!5W0F64M^o1dp2RxEWQd&vxM67k95Q1lhT? zlK$-8kxM^|%`NUNd6ehQ$_Kk5?s^Vpx=-YToSAO>0ve8BY5`48+>Xa=YY1KJDxkr% z-i2;x=^J4Ww^oeg8Lkx-u=YPdXnDyq5HQs@iU_P1ROXjsTHpr0_Z1DWmRu2`?VzVQ zLM78D@mU4l9H_Tp4$LWK`k=!=DeOP*o|xDlk9!`l(D1DFHg21gF@~ngPGWjD$~Qd# z=OpMn`hejixNB`H2>$DSm2(g|ewCB7a;wT&@u0gJhb_Uc?^DU`c!%JNSJ|R+HsdLP z=2cnYrk(oI0sFypZhRP9as-emM zk*abhbceR9a<_D+vk>UD^c3CUK3faTf2Vt}mX@}q?&4I1dtV)`qTAiNda6TkaXsBn zweHhBsk1x02VGBp^-BKAC9Zo{Ps;L&d)3dwrl8IQAt-$OYR-dZgf@U<$p@}%uq;2z*u0nW-2w_7i|A>rRAu-448++Dr!d%3&aKli472;S`twNmJseW;7skwp;K zxa?Cv+--MEA6iWV-4FZF2@d+w0UFrS(vLa{BtLNIuB`dILQ2Fp5N1?VwQ;Lv4s`$A z9~xs|%QOAyL83%=_CR`%2D!rrQ3Zla2hr^aat2d31fvGiOVqI?a|jJ1n(xlQqfzAk zYbe+~sHJcig~_M}<@dO?!+~GzUNoGpr77K)8?iwS&;0f;X5oo!|eP{%^>D5?q z@GNU^A7u_koS$(oaHou4NyfT_%V4 zkC=t?PFq?y@4DHiQ77Mfn)ALp;52#$s!%_jE)b&v?l_-l-x52W((vH1W&IhjS?J!D zzmBIBR9?r&G>&fmXXuNkjd-YWC`Z4R>CT);9ciMwb|U2!PK3M(xTntcw|vgCZ~08l zz|973IgoLfGu-_Xu^7&D4^5=px-$bS2)d)~5so(0$IB0|U)Zc@d;P-hEWBv-%7q`t ztbfsUCQC%!j_JDkfVWJ<^wHq620N0V)ue6G$f;#S;(})lq^;e zfr$IU6so8$h7AH4T2agr0fQs}45Zf-^ZB`V&Bp#LmZ8tl8y%f17EYyZql#hcQ`Bo2 zg2yhFv(#(f&n>JfR#`DGt1SaRxIqV}B2W}vy0=fI9?2eU26yqSstm*J3A}tf9Q#*fE?^<4$yfTAULZh7wQA3u6tR(oXh?Xz|Y6U;1 zPR6S5?cRJomQrtb*ZDNWxD@*161Uw2bRZr*bOFtZM`v7!-(cV8-g_b4nxdX5x0>)? zouj%LX&HYJR4pB7c`J$)kXjDrLO&cqM+Rf%APx9h*(#DQ6dp1y6$+ z$M4OYO$568&|DgxT;#QqhqN(|=3tDr6S(DZVGk1vs!DK-4}wt3{7|S@!_GUP zGq6NmMJbx0by&#N-5nMiC(QfZZI@E_V)OFryAjn?Yi?i>l_jHp zEOac9qLzM(AR_dJ+qjs@t6l*|@ZQUL6(KGjoP7vQgs&mQK8=GG9IPUI9ib25-`qWm zVNSp79$rj0(_Z(w%iu+9clRxZ^=4cSQGKbU)8%xgpm*J-E6ApI+&iwIUs5AEfxzQ_ zYR4wjX1vJpyJiz*#!{IF2k=V-4AYObw=o%uem%q-aT8Id0DQ9I7lLr_64;>hJL{99 z<|q_u7BaGs5madlzkuMEbi8gGX0kznWDu)9fDN?~OI|S@cNSJ^vKC2Uf&IM(c=`WC z58^tB+rb%TDnHcYrdd@WwBi-#;HRKIi+^O1#5svLIY*Ee!HD=-%57;VO}2b<_+k%t zb1_H5BeO(-cf<~j#vxuJE;7|S6zqFwJ<^VY^~sU;N(|b={Y~Ln#Ba9LeKnpM<7Ea9 zGZ`a6Po~XJ^N@q*$oyar=6e#J%kbS9qL0GO^gFku@x2)T_Q8q8A}}X;4BRZ#VZ1h6 zAKZ_7EotT>1OgNBHVmS!>40c#D^l0V@?rb^!4+O3ODJ&Y)sua5TGDm_fjZTwLI@ z0*4FF1Vv1Almaed@NiL=Fi#@*X)fm=!odNSVyrho$xq+iy;GZ(2#6{v*?e%$HZv zLO1m{SVm3mb-&U3^qK2iM^_|SAxH=2Gu*QKI_f(Irk(LC;UTKq{a3Wy?a9mDa&NcZ())Zm_foEC~-h5NyAsu#ZqH}eGDApR{{?mj`6 zk~k{d0uoD5brXrt)2G<@A?+mQ2)mUDn9Pyp<*qA4H?QczQ;Q~>m$!U~e@cU}rF^1` z9_5i7wSTjqaD5gDr=m?;VE@NlaaM0+wG8$N-1|4VKELRXV2EFgMsSl~*a(sngyp{D z7bfCg`9*=3wTz~^HzbH^q@GO>Sv0lf-2^emKypM#^hU5EB>ExP6H<+Q9TJ_9$_cCb zNaeee!lDX|To)E&5WE`}CDhb{e*onU!yTV3hK8>a;G?-6o6+l!8&=EKY*CP!v1tZr z3A4sBGeM?5A zeyn}$^~rZulJ+>@bATT&Hp&5m0Dl5p3Ah)q2k;T#CqNPw_+Y>#fOUW!fNubWT}kT+ zI18{G@H*fdKxP$b)qqKWrGPsCc$uNS4EQjH&-Z|gZs-`$4=^2Y3E(cktAOtSDb=L) z1&jgA1l$YQ5BL`#P(xY|z<9uA0JwG9F2MJIlkl$%myq2+zhxIun(a3 z#J~Wv0ILBz0Q&$x_oSGX4FysK7!SA%&;)o4@FSpIZ_*-wzJSSq#ej8yt$=R<#eGPd z0$2;U3-Bc16F^a4a1pQ;umkW9z;QrrKhkCZRssGBc&ML`wB7w$at7#nJGXJXJ~=`2 z{#sr`g4`b`={@~k&ON;=^>!^aGxaPzfkm!$0=c)Ai#+$@*}9=}zKG`p&mT0%6H9Yq z9Os!focef9u(1tidK*s4#qoAlwBcOThO@m5XIdN1fp|{x{5BlT9XDIgceeq@^inr4N3ZmA#*->zf{JII$%Q5Eb93}El`$utkuz7HC9ZtLT{&0p z)cJ`=i~!+oe>cMPAhSh%lGK;uDEo-9AbKXQY&Cr}*5gO_m4F6=oqb;rTaF!vOo@hBbUw@bUpFV8_ely%- z^L5KTx=_!G-9L@AbI{khfIk74gO4EZ^aVZ6TXgPua~525@oZ$PzXQlO5jziXK49{6 z(mq8Vw{iM{s;b6|FSzL3Y3I$Gckw)hpNMkCzu*-7G~{tR!0*<0-fZ{AOZ4nP+-XM? zaD%S{YU1%F2zvwgZ!^LR5ncp{0%igl0kZ&1;l=K^m*~aG+{FEWq0`;`OZCyViKe;Q z96(#Oxrj4f9?E)8cUNDkca9xHdLYuw3y$Mw!HOpwpB!(4;};@6BaX8G@%iz16XFZv z@l}X3nT)>?aqgGncOuRtb9_7EOghJ(oB?&f4CTZg6!1iF{7uC9Zz$qC2xe>BAh;p! zoI70z;J>brZpOO=a4O!VNG}2`224g0Fq2PjU(Fh~dh|rSAU#^ddje delta 29334 zcmbV#31AgP(*IP?JCeNjl1WI&Nz!i!A%Q>+APILS+&3b(peP>rK#^12RbCWOR77OZ zQ5O}^U2)Z2G-`A`Kt)kOj5oR-(ZypuaaUbbl>e`K=7qre?YH0mLC^H`QC(eKRb5@( zGuiX|$nX9U32Ub>Igd0=qX$H{>%!fVd~y7=IofrDPLXsmT|6h56Vy+elah#Xkx=}) zKU^9V7su&hvCr;BU8tiygGNx2y_IIiFC~4AzDlRCUr!U7P9)Mvq!H!k>79tenmx7y zUyQuC5T!!T$S5lD`*mS-(DkGfe_YGwBcmW3)>2Z?0sPZ7K<5S`S_Gq_3UJ?mzWV7J z;Zgnk6!a3cAj6>)-3OvE9NkZGzdscu@oTA?CX)im6env}%QGSroR>vIwcB(Wrgf&_ zS}~2#?hrImyMt(yb|ukh?e9cmv`>k~Y9AAg(>@{^uN@?sp#6<#qV^%tN!kZQleAW% zlePDWCTs5zP0`*ZnyS4+G);S(XnI`xDJX6cupe=6dih>yi9V#3R!MZ6^TixzlxL&NLu}A19`jLJhL?=x6p1!4j&^I*pUo`eJ`hpJ8*w5)J`kDeMo9{|m zrQ7fLu8M!@BY#|KrQ!==>QXNihNK>vW(KUI+9FFVwRWxY$4Z4}1}$Tm>7Q@S z9?^ci9sznIEs|nMKQIX(7DPz_Mn%Rl>eIPJvf?q5YD59z!lI?7K&y!RIL@d_8V1ya z)nQrG$4Fa^jg7lBpo<5N432wPe|!()$9FM=+@r*`+LIyEBSWSlL;GHG9ALv3*`h@W+9RRB zN=gii8Y>?B#zp};heDyJNa%4|shG%K?9ZVao38e67gTEZPMS`oP1ht17hOuF-;yyf z85qIf2O}mUV40vX1Y^L-h&3HfSuL_3*z0Eo^^F2+X;Q?Z7)`wi0IZmD9G8Iq#|h{pzr20M8sT(ToB<`Aljd$_3y{1 zn?cBz<#sSHgl_we^?)l{DVvW@yJyC2onLzq<%ow()Pr8CEaXgzrDjl-1q}~n zJdnE^{X$^$Ae@R)8bsua{r2M>vc>Mb_8T2)1>mM-*44d+wz*9L!vKeRNu?qQipXcF z?kBnnWw25Tx2KRl^evv*p9kx)%r#YQFt{p@y{f8vluA@J1575j^5U#%QPpem#wChL z5d}&5pfwWx{w%9^HV;;i2lF0p)WVSv^GctN^O&@^bv%y=otk}}K;qWywMcC0p5rIZ ztj?XxD6Y*d1oWJ2==w5-3Eq2mIluETNN?Whrv9upW8x>)h}^`d%pH1e?z<$)fy3L z+yYJ5=;OyD`|bMt%+Q9HyoOu%+o$Ch)xV=4m^xs*=0=ksU1qXO8Yh#bK4x(QZMN?B zW4f?>iz0q-g)29z%EA5i6ZutQ%S-k*`B~NUw|drj&x04b3AI2n{0npE}eH3fZB84OD%_w2w6_P&B1+}KYAefU=0sRD^! zn@X*6W1voDOa{g+X3lo$0*3L)!2B5NyZMVu-TLL|(WAjJ5g*XBw{@ybZG$2hbNiD{ zCc_UE))p`V%-t>mZd-~VAc}ozVK$e$u(0p2Un^(DqZAsff$!>>9?TU`U6!$Q9Ht`8 z5RjJ>8vd@Z+W^qSqYG2Tl`QLk8XM*f#1ul9MU;#lKN_bLb&Y$fQbTV^Y7_FA4oFkO zq4>x86fjs)tb>Rs9%FHibINmwxLn0ghky%Xpw~;y(lPN`EQja=3zo?PgZKeXQgLX? zn3CpTx^GAu>k89mymF53wA|CBw&sid{xYG}!Up1gyYVEbVMrXP z3aox*un+CGdzYO1U*Olv{<`F{U&T*bY6cS1!G^ByCiE9n6L?$cFGNq&Uscg|?2c(5 zX;?(V%?DG$)YuG#KK-CHhqdfarF;Gh{2t6xw1a#BOb}!PTK)uDJG$*DP@{y|25idX z1l7;uIa71%V!R(_!<*c=~R1PMHQ~UR8;Dx8XwwKm7S@pJ*9G>xRmTol{I+STRA$o zSdy{WINVfFmBqGKb+4(oUfFALDqCAnlbD3r#=tY=BcFst1I-cQ5ZvQYfv@~wPy^fE$pR6%~)dktPYrN ztV=h2{*I108V!)q%Wj!gX1_UTOwq%uU<0o5OMkv=wD8D`$;UtjV`h?3Y+Hk)5r7Ix zGBHsirD@^dsZ=ZFnl`-`maz67 zt1p>0HB`}scCUunAWR0hLy-#28eQ!z4Vm%Ip%lO?hf38(hOju+y|o-xNt*Eo@{D2<1o<*`^yn}&rKsnBjP5~l(S8hW3x3{>I~$ph$xPHh`LR}9 zvvz3)NQ*@obRLgeZ!idM#V&|pTnCkR2^CYdbKKhNu$Fk#pNBj|T7_${eLf)ou` z!#ug57Arf^040`*8yhUVdaK3463&KDA8OjukWHY{`$L`~v+4IkM^k2k*hc42D4i&7 z`3%d}ho2hX@uWXiL0W$e1hYgel#4qWKB%2rUZqaqMK)IMn!T+T8 zxan)qW`H2R2D$c5n5##R4j#jO^EJR;aDUpWiN5-wn))5u3E}_pe85G0zV7?kz-`=*MBDXSZioImme4wQ+cq-*t>E8=bX<^y(ziXkq9ys} zrw4Bv`sWqvJ3X^#-{39VhK}+5=-hPEO>ZHN3U0xnlLoz?@y$~x_@2J^hBJrn;es=4 zb5rrCS2$`<;onDyZoz*U*t%s4D^|_EYWS4YKBAr(Caesmd+jfWS3om#8c~Vs_z|bl z8TP#+mKS%0)I;*%jj+;Tz5+VDoksqb+c%G3W<0b+DS#R4TM%s4E zs5w+_SB);E5_{(8&vQNI^6?n-z*@EznjM^TR2yqz}N2Pf7bo`2FB#J8SgiQAg(gC{MZ-`OWk zDiAv!wHHoW&$pwK?nTC;- zG!{X=DVl8Er;@DuABEz26vmE4i_GNwP&8F?wVOl~I6iiAuH87fQ}{0^K>21!CKXOum>*F@|EY^TncA=t{yeJOt(r zp%5_Hr7bb~+fPneiVoCFy=hW^R7#b}sG(Vv5;H0nYV@IyN=TO}md0@zQea^)CJHG? z=pWmue)QdH(Rh0G+vCP}>E0bR{AIdUt20)JCDrOl(DOW!p^ivnOBV{5R|=KWrqdSt z%4ucC)V`n9zOTL7*Ol5Y4;PyPRe_ri2}#o@*z0C|MV;;6&K!d4&Y2CEOvNdKsHVv} zC6#E9J#khS8q~CW*5x`qVE=sDTI$+#`J7LPR@&#Eu`Caar&}9f(rVV~BxXY$8d^o0 zem>)5Jv&>o21xBZs3$lUFwG~U;pCC|_Jp%bX{){B?4p#xFpPL=Hg2`Io?V_3W#KE+ z4a`BfEQ)K{8=*Hn=V?99%Z9SU)`WhvQrmV(R)qxi%%u0wQpO} zN3S*hY`?kWd^`HuU% zAu`;`SQ>d10{>%W%`2M#5(*_V?~-m@D(nf%o}i<4>hfICNOsxs9yGw7hHIt0X1R&$ z_T?iIejM;MybC`qmx)ygY(`#{uvN<*9rob#zR+8hVD46{5{wU-O07VBd`!&MucS!-&+tV%?7C#5pOf(64G-O!p=Y|Xlcuai8XqY;F^#rYn zc~d1onCF{;L@L(HKADVMl}A{zI z?>er^0H=kvB~b`7Agf3+iWS6q_H9AUzOu4}hw;ai4Py06_MrImtg8VVMc8G??l+D9wh}*) z=U=|`*%S{aAa8HItVaO$f@XBKU%TuQsKQCB`r&%bs-d{PvZ@Z(&}zO8UA>y5{ru{F zxcb(BHSFPQ=HmLtHREtSye5`;i(q3tG3h8;UD>q!@&lg5+o@O2kAH_fS8u68 zQfZtwg5VJJ7F7)J_>CZ>WJ2^YEbc-bQNZ;!a=0-iF)C3l|JDA^e~&?&TVxEtt=Qn< z*4QrKHrnm*{0iGDoKMD?%VfHw5kP&NxFBXGkT5P7VNfEJH^_c7slW|T;cawIwNvTN5 za8nxH6fV<&Q#uTjX~Sgtu*HjqfweN&sm+LKW(TW=c^W0~#9lHq3}YiKGua8v>j*|B z!gejzFK}rL)zt4$d@zIyy;{l+1C$RhXukcSIyA)+kM8cmMxVxF;`7?tC!*Or%*mEE zf>$sj7DdZsp3LGfIzL(pLaaP5+6`^(N{Y!mZY$bdX0eyA1JfeJIe}O#TCR%3fln;j zgL}b{WuzO-z-VtEoB{czXlMxI8La^J6|e*{tl&~JKV}xWIQIn3n$#BDzcE^IJjOD+ zn>Z*Rjn;{aIr^zID;1K{8>rt z@KCf)_F&zn$#VBr_fWK2X7jM4uQZZ(SY&Tmy(wD7&lr`c1fKC&G#!>uek>Z5DSR_! zkwVuhTn1}0+8KkTSw-<>W(Xu$Viqf|!$JrILk3K+obzS3ShNdBk%r!kP4uTB56JVF&~8&+`may+M6~;D??}+xa0yCFg3P_flVx0kf;_d zK?XA}61yVGjE-ne^us_ulA>YeMud(s!&e`d#)%zE=Z;0gZBV$g=}Z$5yTfW!)aWKvlH}Z{w%~u0m7OeFW_Ds3JO)gQ z_TqXxV>HGym!bswD3jp9MMp-$Edj4OoC02v)v5$Ut78Zl^>TXwpds$0W~HJtz@rUU zR4l}HQi2|yV4%3d0b|W6AUtaD_(A@702D_lB7=q~5dwV-Rj2?7vzb#M7zMI|RYOl6 zkzB4A2e-3iboEj?;vs}|bl#9^{|kJJhcr(Qxx!o}vy?i5;xXg!@PMza)<$=CoCn_w zvoeaN0YTOwSVmWap^IV|Yp9P9bE2!s5(t}>n`D*QYol4EG#98}w9M=nlO30s=}K@I zoivuIwDY6fwKQp97ZK)CKKdWVqJpJH=_Ryg-Sp*K-|{{f>w<_3)u2KIQc?}lrY(@^ z^8w5N5}VK%_#_w2@ub5=nTt?<=n3Urq){HzLNwRYfN04qwBm`zpg~hd^C)oyb4*k+ zdNDH!{GdAsyup%K0L1}BmE1*(hupOMhLzDu*+KDuRC_O&12A98D0l;#NgiEUq(D=} zF%;vD5%K{r4t?tbN1!JdCNM1cALL0L$;K6UB#c5>wssS1Sp;MVx$ev$Q`O9ZBH)m3 z^^MU!vX^So)$mC%mPR{TXHWP9I@&l_{#n}K2pF1Rum2!xM!xdvsHXD^3V^#rp zbT4G4W2=judF{kFos~;Bv0C-FO?=T$Pwz0n7@P30h~Rq5P(2+MNfe%XR}RAr0nCzf zOb*>Dpqwj++`9_dxtll~2jwc5%}SVFaIyA5Kg^1&SyCpR@a_9=JJ5aw2-N$^bi;dU611~OI1#H z05+>6xqYu>Aq8WF(J94w=2c245Ad*3G;jr zf?)z!uGDZJ)I`F3j5!+pSI{w=#>@=qQF{Pg1JCP|dcr~D_7Bp|^i*j)LvKQIUbx?Hyptu=Ij^YUu%auSFkgixM z`vT(1+oMs&gkW3WoD|qZlM1dj8v8klq}Z7O?co#hXrs2GNK?j= zA}XOV)d&!cE5jHXz+k=R+6sv$wuhB z@@X*T1JHVG%6Eija83Dq&y?rsHJm@%?9k4ZH^W$LLZnze;U8FPM&Ro=VUS02Bwq_< z1XokV3#2(r<_wdCo;6-zciUWyLxxK33f)_Qy77zyz`RVrK!#;Ucc}np#?ok!YA2cs zlBlIZ1oPAuUMjS$0@AEQ=y}9V$z-8Uvv#>DMOYU^I3;74j11#7fsmQ@OPf362>3rY zm+P=_Z1a}R@l5st7~Cl~*fC13)t)aqNCaiIcXX}xG^+)&o6n3B?Jhg8QZ8aTU{0`F zT&vwJf=MZ1v}1dvo7hFs8n9+pbkH^2!>qxyXcamZuaZ93a?g#Kot3Ut!UFWza)-6b z!x{G08Zz^k<&Nm5(yUgX5|(?lXSplGy$V_XtKlARXSw&5AOfk;2gIVl%dHHIT~@`U3p-X#9Ezp0;%*J4GZH47 zthOX(J(rcUyez00M!?L%dJ%-qipi`cX4X0LEf_^ubW4(1@OUM~;1r16zY(0nqyt`6 zGLIFUXQk#zWd^1KJ*a2};b|PAFX9=-ARPt~#a8fVEAVs)n}= z?d45~0U3sBfLs`f3CL82Yqm06dDK~qaE`Y(MyIo4c5exV4r2+Ppn_SwN%k`PY&3hZ z;To24#b9|@H}is!P2(6W*i_~&d44pE?n;@?maES8ceZD^D$zu1#~H3Ts2oJ6j|NBO zn_aAyp0OU9W~QTRI?pJ~r988%0g3`&m|=K`Lk?426~mr_Xv~6%vlJC%7hu;3Ym>0b zMGly#H_~LgWhNWMG8MWa-JQb{c$u;dGiaR1Xp=Xx5rO)JkY%gRnAx#tv5cb%<}w4u zqHEe#%Oci|=y<9u;{AbaMU@2Ay@^R3xJYN0NCesOB{26bAB;dL%C$quW;lN_8U+3e zqMaa@zNOY79MmsSkdA4#EKniN!v@vX(3K?M8sVK&@Ycex0% z5r&Z)j#U!uI++@cFw=ntlnv)%)D9mwwAE4!oXCBTC?hVyDld$AD$0vF<`3=%6Hqk- zZU&Xm5R7NG;#k2;)4;&w$sCp9ifWiymJ=|X>6nMOr>@i$K%t{|pi$iAeh41(T38mw zfOxtz;mh&(v5hebTxu$XVP;!`*Id1%f(mFkigt(;x)c>MLx!PQV+l!21sf)~2wLcV zmr1Z1SpqoeP+AbBT$d}_b3<2e{6oW1G^3EzUk1!#2R!@)UwF+YB%x@c1Kw@khns zQK(18Ei3~V1-7Ixnh}d%MPYlxvpEQy0C7bkBJMf^`y3Hvg7N^jV+)TfV6TmU_t}Fj z7&HKkMiSPMF)#xsg|HlA)vWjfT*++<&a>joO<0w|nk+;x5eg7o&tqnY`Nm%V2RL`w zwWP7Rj+Su36VfBvnfS2D*~AaDGx16CJ0R||09EZT|4`CdnHd;M?z}SKBd|F<172xf z8L?~bjMgS_g-wm2fRXMB54hi*c-TmHZFH`s11Gl8Blh|`t0-dcy0gnrHf3DP5(Siq zvx&$?B*qyXbZ6y+A??n%i6^EdH`P?O{m*&h?;&-_$2cmODm&DhIhye#VH4vQBpE+r z4?{DW33?Iv52#af#u4?#6Q12ubjDBavvI9m`*dAsjgA^Wa^)ZF-#mQ~+YG1eZlTBR z%4fO+x39t;3U<6^Ju`0h2Es`S%{bH4=S$^H;Zt--s7Er4UF=+Amso0GO`N{djBAm{ zC!MexoCcgQB%FcmWl#vig&o@UI6jk%liV-(jWu@Q*(vm#J?mLH`FV<>DkplhwTj(#%d@iY zJglO0HY|Xn!Q0{{PUD%n+Q;^(eQaTz%!k%gSG=8UY+;{om+g^}eK;OuK|}ehavXP@ zx~C#}4X4z_jLA*w_Y5a`+J61H_bF&U`20z<+YY`khMuxde&NF4TI?F?ylePER@#>5 z{V`|(y&E>P0>(x5puPFFv9~zIOLvoc(nI!nd$S9#xx#P!o*3Z(2ka0iyJa|n}k<928e*IZ7k-EXY5yA z1TF3FUhIc!<^GXFE~Q$r6y>(OiNnMfxD~K-5o-2>^t=g!GXj3B+{mbhBEiBLwu$i? zz&*zlc@D=GU$r0IZ_*C?z5QK!yy7MDSjE&-B+&Uq>gP#kNooEeZOUxImTLUsuW|yVs(YR3+8SpX&vMxujGoFhCbJR*>bRE1jCyXu2V`HiYg-0)yj+cf zA4fm+Ll7{xk1h7PmfrM|{bWnN+)viN7x>*1tV}s(Q9n(wuyu90k#CH#kF<2peZeDy zaVa8vj<~bi*kpU~%YEoHd)dpibd`PY%O!}v_Ht*$55H{LBVL&arrP#Oo&E7Ev)C+y zaG-n89CrPyIkkCUefG2Ae3{V=^aSsMgMG$%I7=refNkkt&9yhbT1zqewO22}b<%4S z^V;ef3(|Nop{hY@jc)d1uPx{kLNkC4Wfcl-@nKIq0T%@lt^Rw>lU`p0@K3+~I8C)L zePcMT&%IHD>(Mv*zOyfRy9cE4?zf9D_PH7C>MKg1`k^si7p?jkAytz_F*N?bu%n z#fGQttNvPI{ESx!)S^^leP*n-cm1_bT{{Kna}}V!O#%9q0`x%vVu}LgST<1;ENwK{ zJ>JRoLyJQbj(Vp;{6co$cjbgeXc%Z&ECI2>nq=TjO<_q^(7*HMs57HFda4SLI%vA4h5BljBKyXKL@6hb_Oa6V5V_E+!b$1!0*3-v_4b?tsF zaR6wecL2!RuwR{?-bi4eL-)Dor>BR8gGScTC*Q2#^2jn)39ty4X?*I*qzz%=Sg+s=4q$)64%$Ob;jPsOnD;M-4)}Kj|8rJc74X8@SCk%Y8pP%xVXcKRWR*&!51PAN{1R$E(2EkAB| zms$bbnoDsEq1xJ0ipjN~^>V2d#_iowoMz}}{k_!6MBY!ORu*pS%B+sK-CAblAn%?s zOXBu;nN@(qePvcLZU@V(QY7x~W`wMNmSGm(TyEV^ZsBEX!wUK8?d*4R`Nj9Z?944HD%KoGm-Dr>bWHdM6d{RtR_G6#) ziub_DT^!;hV;CZE2H*^HC12|JBKcBkMERBz&E%WG2jDxv23UFCy;CqujL~i$2vl$7 z!=wg7hhl?DIc0aD*%VX+ekfkT&o%Wc0BA^l2e- zUsTsGKK*SP!`^|s0Cpt<#xQ&N-;0oc!{4JSrxB8r$a(hfMY-HmD}hgB(tKvOmYr(< z4sd_@dy&AY+``ZL)hl#S(WSsH22rNB;%)je{Zn;qQP%@_$DJETeiFl4+Xm~#&lrb? zKU*qVb~g3=+#=lVMPDq%VPG_m1B7^;66@BWXYT{+pT8)g?slgyOLA3zP^1ISf1|-& zc$=wAf6i}2n`V7kO!FmRSvWv=yOBPG*t?B9LWwZP5afPAEJnL~JavP?hh zGcF_h-LLX%Q}KUzN)~UoW>&<*w!2o`*_Q?uKJ^x2W9hoO|A(%FN4%8``CsdroiA z8Z;b+-f<`wM0w$m%)Zk30$cy4Unt5=dUZyAQ%HZZ&-rFdP8;*^ zN%TV)Bqm7MxS{EVZ;FX3?63ckZ>POiisRpP@8S4z%0Fu%5)J>H2Z;%^lbGgzLSpRi z{(1eV9Tz=vA5}bLXx<2y#p!DvHKmyd!!N#BLq<@ux z=+*z4O+D-l|LPuLhQet^(2wgs_pi?6*kAmstQ04%M?j^^k&70YFm8vT5KBS^yu|3r zF094DwvZ5e;Nk52?#SIDVh!x+qI}%aapSVcUwD{V|JuXZGcVvehtM~^A12dq$CS;- zc7qA3pfjmxC+$w-23UahnZS%(gJTyO!6u0cO@A`2F9=`l>Y996_ zPFsXiX*e_n3kLcU%W4_K@!<9L?4Rmjq}_n4v|swEC$7KzG)cX$T)^s4jhB7uk>2!# zZ67%+(ef`xm<5LZY=s$>1aN!n>aN+?$QG6nWvk+w$NcOYwTw{_-8O#714n=MbAkBg zF+1rO)5q^t+dY3d34j`ZIUCncewoI3^+$&X71VDYyS|aK?K_T+x4dTs&eX?Yd)SW? zKuP>E0N&D=2=4<=vSej1u>8yUrQdHrG5E4UJr|Mddr^C+r}BQg01;BAM#wAT0Ux7W z8ST)=3#WSh^(Rqj7Rcyzi3`C<44@0nXrjJOU!BGj4Nwjj!V(EC8rVWTG%^ODq-0%D zp)+}WIH)$j*{{=?A>Q`ZtuDi3QQdxdO-UGiRCP3%aG+L}v)V^x*~$$Hb52;r@I}Fn z@L3aM#?{VlA5~GM^SzHssIs|}pZZYvdg5vBR~qY|f@GO|kC|aqIQs+CnWXcN09`Jw z6;5F?b#yiasW+LFO zik%0N39RNEPNrhI%ITCslWCK)IEDHm@17Lug}l}j>@03_%n%Z#Gb=>XaC;y`-}^g* z4?8=54pUaaCJ~y%eiCA9X)^nLz(trJvDm-GX$?~jb#;CS(~xvNVa;VSrTXTH6ipR> z8%g-Yhd?@B!8r``ncptG;^1Y@_z0ati=2ld_(ISkrzREO=ef<mPeh3)2N_% z6;W5N42KHj@zSFJfy&Nb1jU`#(m-I-`H61}9n%2b3!UE>G#a;O44RYFinpRRkkQrY zkxs+uCTD3nHJ6yYOs)}Q8Dxzp$2cFvUAm8xaYM(9jm}9K)Dh;Cb8ZIh0B(65s5JL9 zc5vV%xq4;D(qJ)hpSXcjI#9m8*tp%fr~`FMe)c}BRKnJ$_c^z9ATxZY`?%qLzZG!C zXHrr4kw2>f4X!Vu`?z_Jb0mwpCcp1KZr|g~?npV#(2fBAwwty=rIn_>_yWUIW_6x% zhhul7XuRbLf6RhU1|~QtHXGJ7Gf>M-NWG&iHS}JPBHpoYxIw^0&#}7=CfHE#H7$;h zG{(bit1|hMG(+*gsTdrnml`n=Gd4iSaTt3jWUEwc5EiK&|A4g*(vO`Lu8x1am5&#B zOYxE*$J|$B&1CQ{JBqOj6}I*%pCPyc-(&EZeycaT7oiqJJ@W}am=WyWnL&1t;OL?I zG8vdkGkB95oYkAvAC_e}TUCrUp@5L1?pUS4iD?u;TLn?pXW{ICrHwXyI9@-%U$5PfU)B~7K>w?N=V}KdOj>+&|MARAyVz) z%6VvaDReB3?E<7ys*Dg&MoaKcVrVpYdre;tZH0SKFRl{typ}j&EHpDlvNwD{IOu`1 zU%ep;3=IBDhJ?*fT{VlQWD*|;ilftR3Dq2EoP)O)2SPa0W7i+IE`dkf8PQ@T#i`$1?>bQyV zz*qy6a7Q!=#W12UdW0HLK5G1HBMM-=%i?hkPJIcfdgh%7!`4F&?M52Sd;*9#1;(FN zaEae;$khPym;((IX+P%PxG4MMxPkNWz#Tts@WOFB7z>b{y>^2R?9mDAPl(3^6RQIWc0N?a_5eGQ;#K3XTce~Ji$Dku6f>}IZfmZki z79x;#Je|m?Q3`7s7UpO)ptKy$>4O3I#RR`nbIG6`FDzYgh_{ml3=J3oDs40hgC5N3 zSo}wcC6P&kX8EL2d)Z*J=q_0>Zz{5wI{TfVQHI0jV=!Q4JS{ScV3mMca8Dg8h!fYy zV-MJgB~=1cw<|Kqd}lL;i}6Yu{Kw~>KxtP9LEyH`L=}aq{Iyp7u4Hv(-KZ=QJIg&T@)x>&mm>1FbZMnhREAJ32=Yl0yGgC`zlBz!Xm zXAB@WiXKrP#!R>p3Uqnu;dulUmcHeReyZzm@F@@pk+~dSko^A_8SF88bK{9JqXfm3 znIN~QWF{aOYfoGPI`c#l^W?wr#D66!`0!SoWrcYe)4C@s0p$}{FPJbdLNZ;(<>3vo zI%kc~{F|(3g()MU&X4JGFfAhoyADos!VgE&yEJsYXrB zDXgYbJT(o5X;Z^sCm+wRK1CGhHmU!+nr@SYz(|%&3~C(n#(xwmRwk@ZJb3{jJn|n$ zcBRrmsc-cEqyCO7L+w8)aK-FOUeGhBef(qf1(PRXpRu{cjGC~{V9vSL8J3)wmGM~@ z&pHzrEa-uRRPoTqL2!K2OxbAeOFbB9rfRUwM$=`oYodYik>PRzt9jQ%OGZ&P(J&aJ zOE`0fssc#xbPds2W(GVy z&>3UF>KVBJ2NNxDf{BLbV!3|Owf)5(69sOp zAwgT7FY)O&eh-T$;dHQ(dnEtZ=a4kKPk_IoC# zID>aoRIk*F$b7KmXU(~^hVtT2Pm15%838N`AN(%WCEgrO2O%&ijD-YYYigJG)f}9H z#-nS`<5tWc3WI`UHH+C(wVJ~QVq2@2!}&c_9j&@FWn2_loeeeklq=gS40D}2jSK@H z=wf04Dve6g6Q}^nI))Ei8vj4P!NX`iM^P38;4%`bMyrWpO|=4OSX);4jnksU=0e-f z3I^EN>g>v6=5{ar-KVs+=3#__3tRsF$-S zmu9-ReCLx~+D3OdSLIP5{n5EA574})yZNcyS&~odX!{KXR7=~Px&pd~>YOVIsi)JS z6J1Srs*F21!*R|pgp)$$_V2q~2j}rXW7dFuMaFX1uD}i;ACBSv`rHo)x#Uj*S7V>+ zQgVJQq-%mLjo6PePIcB7(W`WibB3hBxNVd0^b|V>Bvlw)K{iN3fho|6fD=(Dc5N%p#Z8~ zQ9^$r3OY5V^j8|`WRy`kZiCA}tC7x!WmJt@RyTT{x;DSxjYbh&=#-Vy^+?@W4&sk& z{=A%0$=?TkxYzlm2g>(xs(R8DS!bxdGoFB9mte_TDrOmR=f$2N`zg-Y3N+K|TvS0$ zRv%=;^y!T=g~li@3Q#MYE|oO2Zz2nDI_7?=ua4%;_~wVISJu^(`J{cFPItZ54&Q_*tHW_1DC+u-q#wYEG74*_O>V|HjQ5k8LPy|AodK>|U=tHnLEwpWX>n9{H}>%NK1Zyw`4 zWMJ)ntq!Gd-U1ucP1p-oQhs9PlK-_fWXfo2K4k#C3U{ef0sFsW8PZgD;Pfw35rK%a z&Z6=TW$+uLCu?!UZz=o=$suIywWtVnKexc7WlmuOb*$lPaPYt`>B_ng@~a>v62P{2 zZeM_63@O$?eN)^f{oLfe4P*jjO9ORQ$v#UZ|J(ps?(7U40%0Nbo5ed?k`^_{0I<;A-NV2MjZi zTBrc>F2ODgHA@E|UCeoEeS-N@7jT@pb2z>g2Wtj1COFl=!C*d{1L0xWL2?{lLhzD+ zC)BI=evgI2Vh9Ad1m{_~1{eweT*Y|6>(N-hsS1|Cr#syb2VymAaQAfXGPtG01Hmn$ zA{ZLY0#EggLfm6!9Pa(KkeH?H=U)*sI`QEIajYaNwiRaQi7L>pUDgQd*u}F18B(x4 zx(|Ri2~IDgM4(BWxWyOVbY5~JUVs-Fu=Hg1b|y}y9w{ZL$mvFjbH!x30NiwVGQK5W z?leuo-!>?5DyPzEP-z>c(tI91D-{LBG%AarA`Ct6>eNjmQ{@}TKYbdF3Ms%9^fn>k z!D&=fSq`c}VHI$5EoxdbzJ^-E(>w0dSMZm$Fi$Yr#+Qz7I`yRcntM&BEGqdzg#MCP z{k|i3O6Qv1ImgevbB&)lXV0L1G{@OGgF4{$;0)?IjeJ z7wVHoSOOX4p^MciOX~pQ?fHs5B|LcdIb}1cPx>6tzEsR}6QRfEI16V2$#Q4SOzM`x zqriR!F#01iAzJjh^YJOvy>>r(p95rG!X0)fP7A2xc-G6fhw=Oh?l5JoS8>N0&w34a zygB6*&8C6?w&Tfq(TUBXn@aX^25-~UiplN`%9o$c#JdpOPuN*4 zE3tLR))u~3$tME8(fVoo$muj2`!=sN&zem$1byT@bQ+m-(0S`L`Z10VBZgW9e=GeG zCL3&OtPGhL@K=IwYeZuvo)KLOg0AK`dJitX5szy#C7e#KXpW6y_@f%AiV`px_@Ea< z>7o7mXa3=eY#w?xez$Ike_Vh2LuPP@hF4Ez(8f{&-{a3WgO3_BhJM}mNB*YZPWP(_ z{zRD*vzV5^md#xyuUL+{DB*KsC*lO_(ZdO!(C0rr5O4e21MQGH0VjOg;#YBML`(k@ zQmfmrY7~rBXj70nvNqgOiob3EbqHFs{&ZggEER{?1jNa5Bp<*#wICy}4Jg%v9f)K{Z!ap!$%Q12x>}9*MP}bO32nVazxQgu;qiWn1eq zk${&#HJB+#QWiZn^D!IqBRI=XTm4KU;r%x zUrSbHdG19E(ybT|T!1Ap9JlyfASN)B#Tp8?f+%}M@kYX}rO1T`@&Z1djCHQ1;ib70 zfzMU(Y!Sz6b-|_4EU=zh#;nW4w+(>nrow18XxPEsU5Q`~iH=2487syR5J|Ew=7o7w z@Jpy{yKtL^nPw$}aZ{~_@fu8$OvNE!yvGrdnRtVPOGl*P)iXc_{wxH5jEtrMn_~mO z;)9I@yqW^fJNj@d&aDcZ5_njhHN|%zaERkriFo@WkMM_B&?DvY;(Z02HwWpmj5=_D zuo~n1j+2?Bhyo`%zr}_Lkt+;Wt9N$%@ey^-K@>uPOvQbm1D^2d5G5fzB=ErDYZ4>) zPh$jm4G%-&d=N*CL3lh;dEgPo%C_rA!0iY7qVdkJ&U-NEF8h$Z zt|hqzz!v=VcnoJ)IV~YANJw|(%}s#{FfNJ0RDm!yN6y5CGgf3H&cfQH&UyDN+DMl) zUvM_zldpBoTA0|ly?qY;T+2#l$2=_FRyIFBkLoDxbhg2yGQ@D?`*g>MQOR+MJ|qr{ z(K2XSV*y?Wmpg|WnufIe1G>+qcm+);Ir~F;4A-g({xKFL`(sX*z>H8im z&WX-~_ptju(b@VQ)jNNQ(F#o1z2+0v1n}Fv&mYWPeB>V_5~qz;v)XxR1Xj4F3<7RT+PyYBy_M`z)-unrHltbb`S!`ylo0 zZssYQS!okCm)PblPpA}Tc~^l9KvMIQ2k|#+fMfh)YQXKOk7+z^>7QWIX?50of_?qT zpOAt0S)ahJR!Nu9Tqo&M90X`}27C%4&uyOaDP7>lsgzoqSAI>m`I zIcGY%17fPcy&x!t2f6$gS(hN-cvIOu zJxF^B;VXnx_}zOUj6+y}a3#Wh2rUSoApDGw4hb5MuoB^BgvSxSMd)5hS_8rv2K91w^143an8b%m_Fb`oR!o3KuBYcmL-HWv02-6Uj zAl!#=0O2S?hu)A~gxLs}A>4tmAK?dt>^`IoLpTp%6T*`S-yr1IkTwz_z7!V+;X#B~ z5t3_x2*M;lz!lei|BQzm=hfpz) zw6hRyLbw-UH^OHK<%2*)gqsi^NBA5eFqpJK2p1 zGg7R@=PsRh-dRh}o$GAwq8BjMDT5>p`r9^Zs93k!6 zwD`Wc6cPaTjpiy-Lt+9_vpAaxo37ourgy@YLz4Plu zO~HLs*J&vAE&NXFU(~D(kXOaELD6~IU~{}CJNMV3$>rMbyL>RSzGUo3t81j+kkW5@ z4lOGx8P=^=(eUoub4QlvWR2=^VfyHvOH;>G{1h5jc{q7|)#*tSssq8wUN8Eqd%x$a z?vv*0RWn!bUHh8oQ#VW0^gT?q{qCT;{&T4BfG*T;;P+bpL3_1TCyQ~%U+_OzP;qhpr?GcK5N z+RVGg&N=0+p{LI>2hE*bTsQaB2dZaJ&F=aBm^s_0o^|^031^@2(TH>AzGTfibKrov zvrnx(_w1@kv2)VK&Y#zJ_&IY=wf-LKI(5PPPbQvs&YCgjpXW?jIDf*#uNE3JFF4Pf za%kb_GZroCG}GBqt@jIBIHnSMxw5&nTF=P}utqsF-T7sNZmM|B432jSojq)rtDfp- zIO9ipne)8N1&PcJGn`u!nGbuJ=O!{+XE z)2zF3_p5KM<81@PcL?X3v3gbW*0Gok#g3iLcZ}2DCb8*hr*VQlApXwjkZrUSLzs`i z!*vj8Cok=L){41jU9j}rh36w#{gTcg%|L7c!g&bm@SKUjFiu`tRkdK@Ip@wj?X1O% z7cN%i>%8&|AW?oO(ijfPS1&m0e5e0JJ$D#4It7UgkT7$d>BaBCeE|ahT5w;8`vnM# z5V(mY2ul%`AuM-pny7b8VG!>itT@AYVWK|XtOq!*b|FHd+6u(E+*sr-IK%08lHN03 zj`&i9GmyveMufRud>!KRy!efXpYFx)K%7zF@;eY16^=iKz%=Ffa|ldZj=zS$wBvXy z0@H-!U(AI6+WAWS_A R^XC_wgV!D4*YvpV{{hnN5LN&H diff --git a/codecs/mozjpeg_enc/package.json b/codecs/mozjpeg_enc/package.json index 67ab47dc..34dfd4b7 100644 --- a/codecs/mozjpeg_enc/package.json +++ b/codecs/mozjpeg_enc/package.json @@ -2,7 +2,7 @@ "name": "mozjpeg_enc", "scripts": { "install": "napa", - "build": "docker run --rm -v $(pwd):/src trzeci/emscripten-upstream ./build.sh" + "build": "../build-cpp.sh" }, "napa": { "mozjpeg": "mozilla/mozjpeg#v3.3.1" diff --git a/codecs/webp/Makefile b/codecs/webp/Makefile new file mode 100644 index 00000000..00fcbd2f --- /dev/null +++ b/codecs/webp/Makefile @@ -0,0 +1,49 @@ +CODEC_DIR = node_modules/libwebp +CODEC_OUT_RELATIVE = src/.libs/libwebp.a +CODEC_OUT := $(addprefix $(CODEC_DIR)/, $(CODEC_OUT_RELATIVE)) +OUT_JS = enc/webp_enc.js dec/webp_dec.js +OUT_WASM = $(OUT_JS:.js=.wasm) + +.PHONY: all clean + +all: $(OUT_JS) + +%.js: %.cpp $(CODEC_OUT) + $(CXX) \ + -I $(CODEC_DIR) \ + ${CXXFLAGS} \ + ${LDFLAGS} \ + --bind \ + --closure 1 \ + -s ALLOW_MEMORY_GROWTH=1 \ + -s MODULARIZE=1 \ + -s 'EXPORT_NAME="$(basename $(@F))"' \ + -o $@ \ + $+ + +$(CODEC_OUT): $(CODEC_DIR)/src/Makefile + $(MAKE) -C $(CODEC_DIR)/src + +$(CODEC_DIR)/src/Makefile: $(CODEC_DIR)/configure + cd $(CODEC_DIR) && ./configure \ + --disable-shared \ + --disable-libwebpdemux \ + --disable-wic \ + --disable-gif \ + --disable-tiff \ + --disable-jpeg \ + --disable-png \ + --disable-sdl \ + --disable-gl \ + --disable-threading \ + --disable-neon-rtcd \ + --disable-neon \ + --disable-sse2 \ + --disable-sse4.1 + +$(CODEC_DIR)/configure: + cd $(CODEC_DIR) && autoreconf -iv + +clean: + $(RM) $(OUT_JS) $(OUT_WASM) + $(MAKE) -C $(CODEC_DIR) clean diff --git a/codecs/webp/build.sh b/codecs/webp/build.sh deleted file mode 100644 index c6544a41..00000000 --- a/codecs/webp/build.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/bash - -set -e - -export EM_CACHE="${PWD}/node_modules/.em_cache" -export OPTIMIZE="-Os -flto --llvm-lto 1" -export LDFLAGS="${OPTIMIZE}" -export CFLAGS="${OPTIMIZE}" -export CPPFLAGS="${OPTIMIZE}" -apt-get update -apt-get install -qqy autoconf libtool pkg-config - -echo "=============================================" -echo "Compiling libwebp" -echo "=============================================" -test -n "$SKIP_LIBWEBP" || ( - cd node_modules/libwebp - autoreconf -iv - emconfigure ./configure -C \ - --disable-libwebpdemux \ - --disable-wic \ - --disable-gif \ - --disable-tiff \ - --disable-jpeg \ - --disable-png \ - --disable-sdl \ - --disable-gl \ - --disable-threading \ - --disable-neon-rtcd \ - --disable-neon \ - --disable-sse2 \ - --disable-sse4.1 - emmake make -j`nproc` -) -echo "=============================================" -echo "Compiling wasm bindings" -echo "=============================================" -( - emcc \ - ${OPTIMIZE} \ - --closure 1 \ - --bind \ - -s ALLOW_MEMORY_GROWTH=1 \ - -s MODULARIZE=1 \ - -s 'EXPORT_NAME="webp_dec"' \ - -I node_modules/libwebp \ - -o dec/webp_dec.js \ - dec/webp_dec.cpp \ - node_modules/libwebp/src/.libs/libwebp.a -) -( - emcc \ - ${OPTIMIZE} \ - --closure 1 \ - --bind \ - -s ALLOW_MEMORY_GROWTH=1 \ - -s MODULARIZE=1 \ - -s 'EXPORT_NAME="webp_enc"' \ - -I node_modules/libwebp \ - -o enc/webp_enc.js \ - enc/webp_enc.cpp \ - node_modules/libwebp/src/.libs/libwebp.a -) -echo "=============================================" -echo "Compiling wasm bindings done" -echo "=============================================" - -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" -echo "Did you update your docker image?" -echo "Run \`docker pull trzeci/emscripten-upstream\`" -echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" diff --git a/codecs/webp/dec/webp_dec.js b/codecs/webp/dec/webp_dec.js index 93739ca1..4127e655 100644 --- a/codecs/webp/dec/webp_dec.js +++ b/codecs/webp/dec/webp_dec.js @@ -11,47 +11,47 @@ var d;d||(d=typeof webp_dec !== 'undefined' ? webp_dec : {});var aa;d.ready=new if(ba)x=w?require("path").dirname(x)+"/":__dirname+"/",z=function(a,b){da||(da=require("fs"));ea||(ea=require("path"));a=ea.normalize(a);return da.readFileSync(a,b?null:"utf8")},A=function(a){a=z(a,!0);a.buffer||(a=new Uint8Array(a));a.buffer||B("Assertion failed: undefined");return a},1=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}if(127>=g){if(b>=c)break;e[b++]=g}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var la="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; function ma(a,b){var c=a>>1;for(var e=c+b/2;!(c>=e)&&G[c];)++c;c<<=1;if(32>1];if(0==f||c==b/2)return e;++c;e+=String.fromCharCode(f)}}function na(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;H[b>>1]=0;return b-e}function oa(a){return 2*a.length} function pa(a,b){for(var c=0,e="";!(c>=b/4);){var f=I[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023)):e+=String.fromCharCode(f)}return e}function qa(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f=g){var n=a.charCodeAt(++f);g=65536+((g&1023)<<10)|n&1023}I[b>>2]=g;b+=4;if(b+4>c)break}I[b>>2]=0;return b-e} -function ra(a){for(var b=0,c=0;c=e&&++c;b+=4}return b}var K,sa,F,H,G,I,L,ta,ua;function va(a){K=a;d.HEAP8=sa=new Int8Array(a);d.HEAP16=H=new Int16Array(a);d.HEAP32=I=new Int32Array(a);d.HEAPU8=F=new Uint8Array(a);d.HEAPU16=G=new Uint16Array(a);d.HEAPU32=L=new Uint32Array(a);d.HEAPF32=ta=new Float32Array(a);d.HEAPF64=ua=new Float64Array(a)}var wa=d.INITIAL_MEMORY||16777216;d.wasmMemory?E=d.wasmMemory:E=new WebAssembly.Memory({initial:wa/65536,maximum:32768}); -E&&(K=E.buffer);wa=K.byteLength;va(K);I[3260]=5256080;function M(a){for(;0=b?"_"+a:a} -function Na(a,b){a=Ma(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Oa(a){var b=Error,c=Na(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} -var Pa=void 0;function W(a){throw new Pa(a);}var Qa=void 0;function Ra(a,b){function c(k){k=b(k);if(k.length!==e.length)throw new Qa("Mismatched type converter count");for(var h=0;h>2])}function Ya(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a} -function Za(a,b){switch(b){case 2:return function(c){return this.fromWireType(ta[c>>2])};case 3:return function(c){return this.fromWireType(ua[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function $a(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Na(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} -function ab(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function bb(a,b){var c=d;if(void 0===c[a].J){var e=c[a];c[a]=function(){c[a].J.hasOwnProperty(arguments.length)||W("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].J+")!");return c[a].J[arguments.length].apply(this,arguments)};c[a].J=[];c[a].J[e.P]=e}} -function cb(a,b,c){d.hasOwnProperty(a)?((void 0===c||void 0!==d[a].J&&void 0!==d[a].J[c])&&W("Cannot register public name '"+a+"' twice"),bb(a,a),d.hasOwnProperty(c)&&W("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),d[a].J[c]=b):(d[a]=b,void 0!==c&&(d[a].T=c))}function db(a,b){for(var c=[],e=0;e>2)+e]);return c} -function eb(a,b){a=S(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return G[e>>1]};case 2:return c?function(e){return I[e>>2]}:function(e){return L[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var kb={}; -function lb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function mb(a,b){var c=U[a];void 0===c&&W(b+" has unknown type "+gb(a));return c}for(var nb={},ob=Array(256),pb=0;256>pb;++pb)ob[pb]=String.fromCharCode(pb);La=ob;Pa=d.BindingError=Oa("BindingError");Qa=d.InternalError=Oa("InternalError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},K:null})},r:function(a,b){b=S(b);X(a,{name:b, -fromWireType:function(c){var e=Y[c].value;Va(c);return e},toWireType:function(c,e){return Wa(e)},argPackAdvance:8,readValueFromPointer:Xa,K:null})},g:function(a,b,c){c=Ka(c);b=S(b);X(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Ya(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Za(b,c),K:null})},e:function(a,b,c,e,f,g){var n=db(b,c);a=S(a);f=eb(e,f);cb(a,function(){ib("Cannot call "+ -a+" due to unbound types",n)},b-1);Ra(n,function(k){var h=[k[0],null].concat(k.slice(1)),p=k=a,q=f,m=h.length;2>m&&W("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==h[1]&&!1,y=!1,l=1;l>>k}}var h=-1!=b.indexOf("unsigned");X(a,{name:b,fromWireType:g,toWireType:function(p,q){if("number"!==typeof q&&"boolean"!==typeof q)throw new TypeError('Cannot convert "'+Ya(q)+'" to '+this.name);if(qf)throw new TypeError('Passing a number "'+Ya(q)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+ -e+", "+f+"]!");return h?q>>>0:q|0},argPackAdvance:8,readValueFromPointer:jb(b,n,0!==e),K:null})},a:function(a,b,c){function e(g){g>>=2;var n=L;return new f(K,n[g+1],n[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=S(c);X(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{R:!0})},h:function(a,b){b=S(b);var c="std::string"===b;X(a,{name:b,fromWireType:function(e){var f=L[e>>2];if(c)for(var g=e+4,n=0;n<=f;++n){var k=e+4+n; -if(0==F[k]||n==f){if(g){var h=g;var p=F,q=h+(k-g);for(g=h;p[g]&&!(g>=q);)++g;if(16m?q+=String.fromCharCode(m):(m-=65536,q+=String.fromCharCode(55296|m>>10,56320|m&1023))}}else q+=String.fromCharCode(m)}h=q}}else h="";if(void 0===l)var l=h;else l+=String.fromCharCode(0), -l+=h;g=k+1}}else{l=Array(f);for(n=0;n=m&&(m=65536+((m&1023)<<10)|f.charCodeAt(++q)&1023);127>=m?++p:p=2047>=m?p+ -2:65535>=m?p+3:p+4}return p}:function(){return f.length})(),k=qb(4+n+1);L[k>>2]=n;if(c&&g)ka(f,k+4,n+1);else if(g)for(g=0;g>2],q=n(),m,r=h+4,y=0;y<=p;++y){var l=h+4+y*b;if(0==q[l>>k]||y==p)r=e(r,l-r),void 0===m?m=r:(m+=String.fromCharCode(0),m+=r),r=l+b}Z(h);return m},toWireType:function(h,p){"string"!==typeof p&&W("Cannot pass non-string to C++ string type "+c);var q=g(p),m=qb(4+q+b);L[m>>2]=q>>k;f(p,m+4,q+b);null!==h&&h.push(Z,m);return m},argPackAdvance:8,readValueFromPointer:Xa,K:function(h){Z(h)}})},k:function(a,b){b=S(b);X(a,{S:!0,name:b,argPackAdvance:0,fromWireType:function(){}, -toWireType:function(){}})},o:Va,s:function(a){if(0===a)return Wa(lb());var b=kb[a];a=void 0===b?S(a):b;return Wa(lb()[a])},n:function(a){4>> 2) + "+g+'], "parameter '+g+ -'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",n+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(mb,d,Wa);nb[b]=f}return f(a,c,e)},q:function(){B()},p:function(a,b,c){F.copyWithin(a,b,b+c)},c:function(a){a>>>=0;var b=F.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>>16);va(E.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},memory:E,table:ha}; -(function(){function a(f){d.asm=f.exports;N--;d.monitorRunDependencies&&d.monitorRunDependencies(N);0==N&&(null!==Da&&(clearInterval(Da),Da=null),O&&(f=O,O=null,f()))}function b(f){a(f.instance)}function c(f){return Ia().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){C("failed to asynchronously prepare wasm: "+g);B(g)})}var e={a:rb};N++;d.monitorRunDependencies&&d.monitorRunDependencies(N);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return C("Module.instantiateWasm callback failed with error: "+ -f),!1}(function(){if(D||"function"!==typeof WebAssembly.instantiateStreaming||Fa()||Ea("file://")||"function"!==typeof fetch)return c(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){C("wasm streaming compile failed: "+g);C("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); -var Ja=d.___wasm_call_ctors=function(){return(Ja=d.___wasm_call_ctors=d.asm.t).apply(null,arguments)},qb=d._malloc=function(){return(qb=d._malloc=d.asm.u).apply(null,arguments)},Z=d._free=function(){return(Z=d._free=d.asm.v).apply(null,arguments)},hb=d.___getTypeName=function(){return(hb=d.___getTypeName=d.asm.w).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.x).apply(null,arguments)}; +function ra(a){for(var b=0,c=0;c=e&&++c;b+=4}return b}var J,sa,F,H,G,I,L,ta,ua;function va(a){J=a;d.HEAP8=sa=new Int8Array(a);d.HEAP16=H=new Int16Array(a);d.HEAP32=I=new Int32Array(a);d.HEAPU8=F=new Uint8Array(a);d.HEAPU16=G=new Uint16Array(a);d.HEAPU32=L=new Uint32Array(a);d.HEAPF32=ta=new Float32Array(a);d.HEAPF64=ua=new Float64Array(a)}var wa=d.INITIAL_MEMORY||16777216;d.wasmMemory?E=d.wasmMemory:E=new WebAssembly.Memory({initial:wa/65536,maximum:32768}); +E&&(J=E.buffer);wa=J.byteLength;va(J);I[3260]=5256080;function M(a){for(;0=b?"_"+a:a} +function Ma(a,b){a=La(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)}function Na(a){var b=Error,c=Ma(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c} +var Oa=void 0;function W(a){throw new Oa(a);}var Pa=void 0;function Qa(a,b){function c(k){k=b(k);if(k.length!==e.length)throw new Pa("Mismatched type converter count");for(var h=0;h>2])}function Xa(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a} +function Ya(a,b){switch(b){case 2:return function(c){return this.fromWireType(ta[c>>2])};case 3:return function(c){return this.fromWireType(ua[c>>3])};default:throw new TypeError("Unknown float type: "+a);}}function Za(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ma(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c} +function $a(a){for(;a.length;){var b=a.pop();a.pop()(b)}}function ab(a,b){var c=d;if(void 0===c[a].J){var e=c[a];c[a]=function(){c[a].J.hasOwnProperty(arguments.length)||W("Function '"+b+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+c[a].J+")!");return c[a].J[arguments.length].apply(this,arguments)};c[a].J=[];c[a].J[e.O]=e}} +function bb(a,b,c){d.hasOwnProperty(a)?((void 0===c||void 0!==d[a].J&&void 0!==d[a].J[c])&&W("Cannot register public name '"+a+"' twice"),ab(a,a),d.hasOwnProperty(c)&&W("Cannot register multiple overloads of a function with the same number of arguments ("+c+")!"),d[a].J[c]=b):(d[a]=b,void 0!==c&&(d[a].T=c))}function cb(a,b){for(var c=[],e=0;e>2)+e]);return c} +function db(a,b){a=S(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return G[e>>1]};case 2:return c?function(e){return I[e>>2]}:function(e){return L[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var jb={}; +function kb(){return"object"===typeof globalThis?globalThis:Function("return this")()}function lb(a,b){var c=U[a];void 0===c&&W(b+" has unknown type "+fb(a));return c}for(var mb={},nb=Array(256),ob=0;256>ob;++ob)nb[ob]=String.fromCharCode(ob);Ka=nb;Oa=d.BindingError=Na("BindingError");Pa=d.InternalError=Na("InternalError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},K:null})},r:function(a,b){b=S(b);X(a,{name:b,fromWireType:function(c){var e= +Y[c].value;Sa(c);return e},toWireType:function(c,e){return Va(e)},argPackAdvance:8,readValueFromPointer:Wa,K:null})},g:function(a,b,c){c=Ja(c);b=S(b);X(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+Xa(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:Ya(b,c),K:null})},e:function(a,b,c,e,f,g){var n=cb(b,c);a=S(a);f=db(e,f);bb(a,function(){hb("Cannot call "+a+" due to unbound types", +n)},b-1);Qa(n,function(k){var h=[k[0],null].concat(k.slice(1)),p=k=a,q=f,m=h.length;2>m&&W("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var r=null!==h[1]&&!1,y=!1,l=1;l>>k}}var h=-1!=b.indexOf("unsigned");X(a,{name:b,fromWireType:g,toWireType:function(p,q){if("number"!==typeof q&&"boolean"!==typeof q)throw new TypeError('Cannot convert "'+Xa(q)+'" to '+this.name);if(qf)throw new TypeError('Passing a number "'+Xa(q)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return h?q>>>0:q|0},argPackAdvance:8,readValueFromPointer:ib(b, +n,0!==e),K:null})},a:function(a,b,c){function e(g){g>>=2;var n=L;return new f(J,n[g+1],n[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=S(c);X(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{R:!0})},h:function(a,b){b=S(b);var c="std::string"===b;X(a,{name:b,fromWireType:function(e){var f=L[e>>2];if(c)for(var g=e+4,n=0;n<=f;++n){var k=e+4+n;if(0==F[k]||n==f){if(g){var h=g;var p=F,q=h+(k-g);for(g=h;p[g]&&!(g>=q);)++g; +if(16m?q+=String.fromCharCode(m):(m-=65536,q+=String.fromCharCode(55296|m>>10,56320|m&1023))}}else q+=String.fromCharCode(m)}h=q}}else h="";if(void 0===l)var l=h;else l+=String.fromCharCode(0),l+=h;g=k+1}}else{l=Array(f);for(n=0;n=m&&(m=65536+((m&1023)<<10)|f.charCodeAt(++q)&1023);127>=m?++p:p=2047>=m?p+2:65535>=m?p+3:p+4}return p}:function(){return f.length})(),k=pb(4+n+1);L[k>> +2]=n;if(c&&g)ka(f,k+4,n+1);else if(g)for(g=0;g>2],q= +n(),m,r=h+4,y=0;y<=p;++y){var l=h+4+y*b;if(0==q[l>>k]||y==p)r=e(r,l-r),void 0===m?m=r:(m+=String.fromCharCode(0),m+=r),r=l+b}Z(h);return m},toWireType:function(h,p){"string"!==typeof p&&W("Cannot pass non-string to C++ string type "+c);var q=g(p),m=pb(4+q+b);L[m>>2]=q>>k;f(p,m+4,q+b);null!==h&&h.push(Z,m);return m},argPackAdvance:8,readValueFromPointer:Wa,K:function(h){Z(h)}})},k:function(a,b){b=S(b);X(a,{S:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},o:Sa,s:function(a){if(0=== +a)return Va(kb());var b=jb[a];a=void 0===b?S(a):b;return Va(kb()[a])},n:function(a){4>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+ +g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",n+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(lb,d,Va);mb[b]=f}return f(a,c,e)},q:function(){B()},p:function(a,b,c){F.copyWithin(a,b,b+c)},c:function(a){a>>>=0;var b=F.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>> +16);va(E.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},memory:E,table:ha}; +(function(){function a(f){d.asm=f.exports;N--;d.monitorRunDependencies&&d.monitorRunDependencies(N);0==N&&(null!==Ca&&(clearInterval(Ca),Ca=null),P&&(f=P,P=null,f()))}function b(f){a(f.instance)}function c(f){return Ha().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){C("failed to asynchronously prepare wasm: "+g);B(g)})}var e={a:qb};N++;d.monitorRunDependencies&&d.monitorRunDependencies(N);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return C("Module.instantiateWasm callback failed with error: "+ +f),!1}(function(){if(D||"function"!==typeof WebAssembly.instantiateStreaming||Ea()||Da("file://")||"function"!==typeof fetch)return c(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){C("wasm streaming compile failed: "+g);C("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); +var Ia=d.___wasm_call_ctors=function(){return(Ia=d.___wasm_call_ctors=d.asm.t).apply(null,arguments)},pb=d._malloc=function(){return(pb=d._malloc=d.asm.u).apply(null,arguments)},Z=d._free=function(){return(Z=d._free=d.asm.v).apply(null,arguments)},gb=d.___getTypeName=function(){return(gb=d.___getTypeName=d.asm.w).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.x).apply(null,arguments)}; d.dynCall_iii=function(){return(d.dynCall_iii=d.asm.y).apply(null,arguments)};d.dynCall_vii=function(){return(d.dynCall_vii=d.asm.z).apply(null,arguments)};d.dynCall_ii=function(){return(d.dynCall_ii=d.asm.A).apply(null,arguments)};d.dynCall_i=function(){return(d.dynCall_i=d.asm.B).apply(null,arguments)};d.dynCall_vi=function(){return(d.dynCall_vi=d.asm.C).apply(null,arguments)};d.dynCall_iiii=function(){return(d.dynCall_iiii=d.asm.D).apply(null,arguments)}; -d.dynCall_iiiiiii=function(){return(d.dynCall_iiiiiii=d.asm.E).apply(null,arguments)};d.dynCall_viiii=function(){return(d.dynCall_viiii=d.asm.F).apply(null,arguments)};d.dynCall_viiiii=function(){return(d.dynCall_viiiii=d.asm.G).apply(null,arguments)};d.dynCall_viiiiiiiii=function(){return(d.dynCall_viiiiiiiii=d.asm.H).apply(null,arguments)};d.dynCall_viiiiii=function(){return(d.dynCall_viiiiii=d.asm.I).apply(null,arguments)};var sb;O=function tb(){sb||ub();sb||(O=tb)}; -function ub(){function a(){if(!sb&&(sb=!0,d.calledRun=!0,!ia)){M(ya);M(za);aa(d);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();Ba.unshift(b)}M(Ba)}}if(!(0dQGrTvCd0)TZH%hX-SOKmQsrHE!V+a&*?VN1<$u=qUX6-VClpjpKKg?A}UjpRJsW-n8E?z-H8Y zkOf$e9{2Y-Y}$K+Hf-3JgUhgPe+}-!Ms(xRrJ(u^AT?|Of`NXR!3>JTa1FQ5?FH90 z&sQb*)#ot_WqN}ZtybjL=hAoQpr6@fZu9+xP` zdd}{~4;yob-n`F_I9ZKf^tl0a`nqVC79=UBdC1W09ilc2i}va7fy86R?dmjPEZO{I zR+Z3~no|Oy)Hwrod2*^&L1tt4r+E^qky5I@8a+n4N}?;QL{azxBsBA$vtJY4YfTAV;G=z>B)g(z^`5DX@V5CxoV+7vJck=WI&c6R2Q$2a>n7Efc*?}5Q>5xs*t3{uT5U;!o69h`eG>N6 zH+Ab!#pLcJ(Lim}lrlFH0{A>*q3`G?Ll262bGX+oUa*;zD9~;AuKqDRFz!@%KH&x( zy=SyI?W**}3P*HRs!kEo?mI)GO~0U^AB|3Vr6k2aZX{;iU6>=WNJ^pJ9?d{0n))>x F{s9=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}if(127>=g){if(b>=c)break;e[b++]=g}else{if(2047>=g){if(b+1>=c)break;e[b++]=192|g>>6}else{if(65535>=g){if(b+2>=c)break;e[b++]=224|g>>12}else{if(b+3>=c)break;e[b++]=240|g>>18;e[b++]=128|g>>12&63}e[b++]=128|g>>6&63}e[b++]=128|g&63}}e[b]=0}}var ma="undefined"!==typeof TextDecoder?new TextDecoder("utf-16le"):void 0; function na(a,b){var c=a>>1;for(var e=c+b/2;!(c>=e)&&I[c];)++c;c<<=1;if(32>1];if(0==f||c==b/2)return e;++c;e+=String.fromCharCode(f)}}function oa(a,b,c){void 0===c&&(c=2147483647);if(2>c)return 0;c-=2;var e=b;c=c<2*a.length?c/2:a.length;for(var f=0;f>1]=a.charCodeAt(f),b+=2;J[b>>1]=0;return b-e}function pa(a){return 2*a.length} function qa(a,b){for(var c=0,e="";!(c>=b/4);){var f=K[a+4*c>>2];if(0==f)break;++c;65536<=f?(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023)):e+=String.fromCharCode(f)}return e}function ra(a,b,c){void 0===c&&(c=2147483647);if(4>c)return 0;var e=b;c=e+c-4;for(var f=0;f=g){var l=a.charCodeAt(++f);g=65536+((g&1023)<<10)|l&1023}K[b>>2]=g;b+=4;if(b+4>c)break}K[b>>2]=0;return b-e} function sa(a){for(var b=0,c=0;c=e&&++c;b+=4}return b}var L,M,H,J,I,K,N,ta,ua;function va(a){L=a;d.HEAP8=M=new Int8Array(a);d.HEAP16=J=new Int16Array(a);d.HEAP32=K=new Int32Array(a);d.HEAPU8=H=new Uint8Array(a);d.HEAPU16=I=new Uint16Array(a);d.HEAPU32=N=new Uint32Array(a);d.HEAPF32=ta=new Float32Array(a);d.HEAPF64=ua=new Float64Array(a)}var wa=d.INITIAL_MEMORY||16777216;d.wasmMemory?G=d.wasmMemory:G=new WebAssembly.Memory({initial:wa/65536,maximum:32768}); -G&&(L=G.buffer);wa=L.byteLength;va(L);K[8668]=5277712;function xa(a){for(;0>2])}var R={},S={},Pa={};function Qa(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Ra(a,b){a=Qa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} -function Sa(a){var b=Error,c=Ra(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Ta=void 0; -function Ua(a,b,c){function e(k){k=c(k);if(k.length!==a.length)throw new Ta("Mismatched type converter count");for(var h=0;h>1])};case 2:return function(e){return this.fromWireType((c?K:N)[e>>2])};default:throw new TypeError("Unknown integer type: "+a);}}function db(a){a=eb(a);var b=U(a);Y(a);return b}function fb(a,b){var c=S[a];void 0===c&&V(b+" has unknown type "+db(a));return c} -function gb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}function hb(a,b){switch(b){case 2:return function(c){return this.fromWireType(ta[c>>2])};case 3:return function(c){return this.fromWireType(ua[c>>3])};default:throw new TypeError("Unknown float type: "+a);}} -function ib(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Ra(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}function jb(a,b){for(var c=[],e=0;e>2)+e]);return c} -function Z(a,b){a=U(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return I[e>>1]};case 2:return c?function(e){return K[e>>2]}:function(e){return N[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var nb={}; -function ob(){return"object"===typeof globalThis?globalThis:Function("return this")()}var pb={};Ta=d.InternalError=Sa("InternalError");for(var qb=Array(256),rb=0;256>rb;++rb)qb[rb]=String.fromCharCode(rb);Wa=qb;Xa=d.BindingError=Sa("BindingError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},R:null})},t:function(a,b){b=U(b);T(a,{name:b,fromWireType:function(c){var e=X[c].value;Za(c);return e},toWireType:function(c,e){return $a(e)},argPackAdvance:8,readValueFromPointer:Oa,R:null})},n:function(a,b,c,e){function f(){}c=Va(c);b=U(b);f.values={};T(a,{name:b,constructor:f,fromWireType:function(g){return this.constructor.values[g]},toWireType:function(g, -l){return l.value},argPackAdvance:8,readValueFromPointer:cb(b,c,e),R:null});bb(b,f)},m:function(a,b,c){var e=fb(a,"enum");b=U(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:Ra(e.name+"_"+b,function(){})}});a.values[c]=e;a[b]=e},g:function(a,b,c){c=Va(c);b=U(b);T(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+gb(f)+'" to '+this.name);return f},argPackAdvance:8, -readValueFromPointer:hb(b,c),R:null})},i:function(a,b,c,e,f,g){var l=jb(b,c);a=U(a);f=Z(e,f);bb(a,function(){lb("Cannot call "+a+" due to unbound types",l)},b-1);Ua([],l,function(k){var h=[k[0],null].concat(k.slice(1)),m=k=a,q=f,n=h.length;2>n&&V("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var t=null!==h[1]&&!1,v=!1,p=1;p>>k}}var h=-1!=b.indexOf("unsigned");T(a,{name:b,fromWireType:g,toWireType:function(m,q){if("number"!==typeof q&&"boolean"!==typeof q)throw new TypeError('Cannot convert "'+gb(q)+'" to '+this.name);if(qf)throw new TypeError('Passing a number "'+ -gb(q)+'" from JS side to C/C++ side to an argument of type "'+b+'", which is outside the valid range ['+e+", "+f+"]!");return h?q>>>0:q|0},argPackAdvance:8,readValueFromPointer:mb(b,l,0!==e),R:null})},a:function(a,b,c){function e(g){g>>=2;var l=N;return new f(L,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=U(c);T(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{da:!0})},h:function(a,b){b=U(b);var c="std::string"=== -b;T(a,{name:b,fromWireType:function(e){var f=N[e>>2];if(c)for(var g=e+4,l=0;l<=f;++l){var k=e+4+l;if(0==H[k]||l==f){if(g){var h=g;var m=H,q=h+(k-g);for(g=h;m[g]&&!(g>=q);)++g;if(16n?q+=String.fromCharCode(n):(n-=65536,q+=String.fromCharCode(55296|n>> -10,56320|n&1023))}}else q+=String.fromCharCode(n)}h=q}}else h="";if(void 0===p)var p=h;else p+=String.fromCharCode(0),p+=h;g=k+1}}else{p=Array(f);for(l=0;l=n&&(n=65536+((n&1023)<<10)|f.charCodeAt(++q)&1023);127>=n?++m:m=2047>=n?m+2:65535>=n?m+3:m+4}return m}:function(){return f.length})(),k=sb(4+l+1);N[k>>2]=l;if(c&&g)la(f,k+4,l+1);else if(g)for(g=0;g>2],q=l(),n,t=h+4,v=0;v<=m;++v){var p=h+4+v*b;if(0==q[p>>k]||v==m)t=e(t,p-t),void 0===n?n=t:(n+=String.fromCharCode(0),n+=t),t=p+b}Y(h);return n},toWireType:function(h,m){"string"!==typeof m&&V("Cannot pass non-string to C++ string type "+c);var q=g(m),n=sb(4+q+b);N[n>>2]=q>>k;f(m,n+4,q+b);null!==h&&h.push(Y,n);return n}, -argPackAdvance:8,readValueFromPointer:Oa,R:function(h){Y(h)}})},l:function(a,b,c,e,f,g){Ma[a]={name:U(b),ea:Z(c,e),fa:Z(f,g),W:[]}},e:function(a,b,c,e,f,g,l,k,h,m){Ma[a].W.push({Z:U(b),ba:c,$:Z(e,f),aa:g,ha:l,ga:Z(k,h),ia:m})},v:function(a,b){b=U(b);T(a,{ja:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},p:Za,q:function(a){if(0===a)return $a(ob());var b=nb[a];a=void 0===b?U(a):b;return $a(ob()[a])},w:function(a){4>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(fb, -d,$a);pb[b]=f}return f(a,c,e)},s:function(){C()},r:function(a,b,c){H.copyWithin(a,b,b+c)},c:function(a){a>>>=0;var b=H.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>>16);va(G.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},memory:G,table:ha}; -(function(){function a(f){d.asm=f.exports;O--;d.monitorRunDependencies&&d.monitorRunDependencies(O);0==O&&(null!==Ea&&(clearInterval(Ea),Ea=null),P&&(f=P,P=null,f()))}function b(f){a(f.instance)}function c(f){return Ja().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){D("failed to asynchronously prepare wasm: "+g);C(g)})}var e={a:tb};O++;d.monitorRunDependencies&&d.monitorRunDependencies(O);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return D("Module.instantiateWasm callback failed with error: "+ -f),!1}(function(){if(E||"function"!==typeof WebAssembly.instantiateStreaming||Ga()||Fa("file://")||"function"!==typeof fetch)return c(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){D("wasm streaming compile failed: "+g);D("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); -var Ka=d.___wasm_call_ctors=function(){return(Ka=d.___wasm_call_ctors=d.asm.y).apply(null,arguments)},sb=d._malloc=function(){return(sb=d._malloc=d.asm.z).apply(null,arguments)},Y=d._free=function(){return(Y=d._free=d.asm.A).apply(null,arguments)},eb=d.___getTypeName=function(){return(eb=d.___getTypeName=d.asm.B).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.C).apply(null,arguments)}; +G&&(L=G.buffer);wa=L.byteLength;va(L);K[8668]=5277712;function xa(a){for(;0>2])}var R={},S={},Oa={};function Pa(a){if(void 0===a)return"_unknown";a=a.replace(/[^a-zA-Z0-9_]/g,"$");var b=a.charCodeAt(0);return 48<=b&&57>=b?"_"+a:a}function Qa(a,b){a=Pa(a);return(new Function("body","return function "+a+'() {\n "use strict"; return body.apply(this, arguments);\n};\n'))(b)} +function Ra(a){var b=Error,c=Qa(a,function(e){this.name=a;this.message=e;e=Error(e).stack;void 0!==e&&(this.stack=this.toString()+"\n"+e.replace(/^Error(:[^\n]*)?\n/,""))});c.prototype=Object.create(b.prototype);c.prototype.constructor=c;c.prototype.toString=function(){return void 0===this.message?this.name:this.name+": "+this.message};return c}var Sa=void 0; +function Ta(a,b,c){function e(k){k=c(k);if(k.length!==a.length)throw new Sa("Mismatched type converter count");for(var h=0;h>1])};case 2:return function(e){return this.fromWireType((c?K:N)[e>>2])};default:throw new TypeError("Unknown integer type: "+a);}}function cb(a){a=db(a);var b=U(a);Y(a);return b}function eb(a,b){var c=S[a];void 0===c&&V(b+" has unknown type "+cb(a));return c} +function fb(a){if(null===a)return"null";var b=typeof a;return"object"===b||"array"===b||"function"===b?a.toString():""+a}function gb(a,b){switch(b){case 2:return function(c){return this.fromWireType(ta[c>>2])};case 3:return function(c){return this.fromWireType(ua[c>>3])};default:throw new TypeError("Unknown float type: "+a);}} +function hb(a){var b=Function;if(!(b instanceof Function))throw new TypeError("new_ called with constructor type "+typeof b+" which is not a function");var c=Qa(b.name||"unknownFunctionName",function(){});c.prototype=b.prototype;c=new c;a=b.apply(c,a);return a instanceof Object?a:c}function ib(a,b){for(var c=[],e=0;e>2)+e]);return c} +function Z(a,b){a=U(a);var c=d["dynCall_"+a];for(var e=[],f=1;f>1]}:function(e){return I[e>>1]};case 2:return c?function(e){return K[e>>2]}:function(e){return N[e>>2]};default:throw new TypeError("Unknown integer type: "+a);}}var mb={}; +function nb(){return"object"===typeof globalThis?globalThis:Function("return this")()}var ob={};Sa=d.InternalError=Ra("InternalError");for(var pb=Array(256),qb=0;256>qb;++qb)pb[qb]=String.fromCharCode(qb);Va=pb;Wa=d.BindingError=Ra("BindingError");d.count_emval_handles=function(){for(var a=0,b=5;b>g])},R:null})},t:function(a,b){b=U(b);T(a,{name:b,fromWireType:function(c){var e=X[c].value;Ya(c);return e},toWireType:function(c,e){return Za(e)},argPackAdvance:8,readValueFromPointer:Na,R:null})},n:function(a,b,c,e){function f(){}c=Ua(c);b=U(b);f.values={};T(a,{name:b,constructor:f,fromWireType:function(g){return this.constructor.values[g]},toWireType:function(g,l){return l.value},argPackAdvance:8, +readValueFromPointer:bb(b,c,e),R:null});ab(b,f)},m:function(a,b,c){var e=eb(a,"enum");b=U(b);a=e.constructor;e=Object.create(e.constructor.prototype,{value:{value:c},constructor:{value:Qa(e.name+"_"+b,function(){})}});a.values[c]=e;a[b]=e},g:function(a,b,c){c=Ua(c);b=U(b);T(a,{name:b,fromWireType:function(e){return e},toWireType:function(e,f){if("number"!==typeof f&&"boolean"!==typeof f)throw new TypeError('Cannot convert "'+fb(f)+'" to '+this.name);return f},argPackAdvance:8,readValueFromPointer:gb(b, +c),R:null})},i:function(a,b,c,e,f,g){var l=ib(b,c);a=U(a);f=Z(e,f);ab(a,function(){kb("Cannot call "+a+" due to unbound types",l)},b-1);Ta([],l,function(k){var h=[k[0],null].concat(k.slice(1)),m=k=a,q=f,n=h.length;2>n&&V("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var t=null!==h[1]&&!1,v=!1,p=1;p>>k}}var h=-1!=b.indexOf("unsigned");T(a,{name:b,fromWireType:g,toWireType:function(m,q){if("number"!==typeof q&&"boolean"!==typeof q)throw new TypeError('Cannot convert "'+fb(q)+'" to '+this.name);if(qf)throw new TypeError('Passing a number "'+fb(q)+'" from JS side to C/C++ side to an argument of type "'+ +b+'", which is outside the valid range ['+e+", "+f+"]!");return h?q>>>0:q|0},argPackAdvance:8,readValueFromPointer:lb(b,l,0!==e),R:null})},a:function(a,b,c){function e(g){g>>=2;var l=N;return new f(L,l[g+1],l[g])}var f=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array][b];c=U(c);T(a,{name:c,fromWireType:e,argPackAdvance:8,readValueFromPointer:e},{da:!0})},h:function(a,b){b=U(b);var c="std::string"===b;T(a,{name:b,fromWireType:function(e){var f=N[e>>2];if(c)for(var g= +e+4,l=0;l<=f;++l){var k=e+4+l;if(0==H[k]||l==f){if(g){var h=g;var m=H,q=h+(k-g);for(g=h;m[g]&&!(g>=q);)++g;if(16n?q+=String.fromCharCode(n):(n-=65536,q+=String.fromCharCode(55296|n>>10,56320|n&1023))}}else q+=String.fromCharCode(n)}h=q}}else h="";if(void 0=== +p)var p=h;else p+=String.fromCharCode(0),p+=h;g=k+1}}else{p=Array(f);for(l=0;l=n&&(n=65536+((n&1023)<<10)|f.charCodeAt(++q)& +1023);127>=n?++m:m=2047>=n?m+2:65535>=n?m+3:m+4}return m}:function(){return f.length})(),k=rb(4+l+1);N[k>>2]=l;if(c&&g)la(f,k+4,l+1);else if(g)for(g=0;g>2],q=l(),n,t=h+4,v=0;v<=m;++v){var p=h+4+v*b;if(0==q[p>>k]||v==m)t=e(t,p-t),void 0===n?n=t:(n+=String.fromCharCode(0),n+=t),t=p+b}Y(h);return n},toWireType:function(h,m){"string"!==typeof m&&V("Cannot pass non-string to C++ string type "+c);var q=g(m),n=rb(4+q+b);N[n>>2]=q>>k;f(m,n+4,q+b);null!==h&&h.push(Y,n);return n},argPackAdvance:8,readValueFromPointer:Na,R:function(h){Y(h)}})},l:function(a,b,c, +e,f,g){La[a]={name:U(b),ea:Z(c,e),fa:Z(f,g),W:[]}},e:function(a,b,c,e,f,g,l,k,h,m){La[a].W.push({Y:U(b),ba:c,$:Z(e,f),aa:g,ha:l,ga:Z(k,h),ia:m})},v:function(a,b){b=U(b);T(a,{ja:!0,name:b,argPackAdvance:0,fromWireType:function(){},toWireType:function(){}})},p:Ya,q:function(a){if(0===a)return Za(nb());var b=mb[a];a=void 0===b?U(a):b;return Za(nb()[a])},w:function(a){4>> 2) + "+g+'], "parameter '+g+'");\nvar arg'+g+" = argType"+g+".readValueFromPointer(args);\nargs += argType"+g+"['argPackAdvance'];\n";f=(new Function("requireRegisteredType","Module","__emval_register",l+("var obj = new constructor("+f+");\nreturn __emval_register(obj);\n}\n")))(eb,d,Za);ob[b]=f}return f(a, +c,e)},s:function(){C()},r:function(a,b,c){H.copyWithin(a,b,b+c)},c:function(a){a>>>=0;var b=H.length;if(2147483648=c;c*=2){var e=b*(1+.2/c);e=Math.min(e,a+100663296);e=Math.max(16777216,a,e);0>>16);va(G.buffer);var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},memory:G,table:ha}; +(function(){function a(f){d.asm=f.exports;O--;d.monitorRunDependencies&&d.monitorRunDependencies(O);0==O&&(null!==Da&&(clearInterval(Da),Da=null),P&&(f=P,P=null,f()))}function b(f){a(f.instance)}function c(f){return Ia().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){D("failed to asynchronously prepare wasm: "+g);C(g)})}var e={a:sb};O++;d.monitorRunDependencies&&d.monitorRunDependencies(O);if(d.instantiateWasm)try{return d.instantiateWasm(e,a)}catch(f){return D("Module.instantiateWasm callback failed with error: "+ +f),!1}(function(){if(E||"function"!==typeof WebAssembly.instantiateStreaming||Fa()||Ea("file://")||"function"!==typeof fetch)return c(b);fetch(Q,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(b,function(g){D("wasm streaming compile failed: "+g);D("falling back to ArrayBuffer instantiation");return c(b)})})})();return{}})(); +var Ja=d.___wasm_call_ctors=function(){return(Ja=d.___wasm_call_ctors=d.asm.y).apply(null,arguments)},rb=d._malloc=function(){return(rb=d._malloc=d.asm.z).apply(null,arguments)},Y=d._free=function(){return(Y=d._free=d.asm.A).apply(null,arguments)},db=d.___getTypeName=function(){return(db=d.___getTypeName=d.asm.B).apply(null,arguments)};d.___embind_register_native_and_builtin_types=function(){return(d.___embind_register_native_and_builtin_types=d.asm.C).apply(null,arguments)}; d.dynCall_i=function(){return(d.dynCall_i=d.asm.D).apply(null,arguments)};d.dynCall_vi=function(){return(d.dynCall_vi=d.asm.E).apply(null,arguments)};d.dynCall_iii=function(){return(d.dynCall_iii=d.asm.F).apply(null,arguments)};d.dynCall_viii=function(){return(d.dynCall_viii=d.asm.G).apply(null,arguments)};d.dynCall_fii=function(){return(d.dynCall_fii=d.asm.H).apply(null,arguments)};d.dynCall_viif=function(){return(d.dynCall_viif=d.asm.I).apply(null,arguments)}; d.dynCall_ii=function(){return(d.dynCall_ii=d.asm.J).apply(null,arguments)};d.dynCall_iiiiii=function(){return(d.dynCall_iiiiii=d.asm.K).apply(null,arguments)};d.dynCall_viiiii=function(){return(d.dynCall_viiiii=d.asm.L).apply(null,arguments)};d.dynCall_iiii=function(){return(d.dynCall_iiii=d.asm.M).apply(null,arguments)};d.dynCall_viiiiiiiii=function(){return(d.dynCall_viiiiiiiii=d.asm.N).apply(null,arguments)};d.dynCall_viiii=function(){return(d.dynCall_viiii=d.asm.O).apply(null,arguments)}; -d.dynCall_viiiiii=function(){return(d.dynCall_viiiiii=d.asm.P).apply(null,arguments)};var ub;P=function vb(){ub||wb();ub||(P=vb)}; -function wb(){function a(){if(!ub&&(ub=!0,d.calledRun=!0,!ia)){xa(za);xa(Aa);aa(d);if(d.onRuntimeInitialized)d.onRuntimeInitialized();if(d.postRun)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;){var b=d.postRun.shift();Ca.unshift(b)}xa(Ca)}}if(!(0R0L3yKb=8ZF@#*NU_s>~!&NC8WhgF-cg zSh{59(E2J1Q+dcVAA~%03g;K)HA~A++|(QGRI=ElZH9DFj<=@wpM9@u#^zG(u*a^E z3+bQ~x&UbDjI+bigmbBEvYb@oTo{yx`r}cUGlM|HOSQ2cB&s0=2doZ1uHlEFG?B)g zibMcFY+Uy9P0;#$ziwJ+70Q5p!c5&2!7sSeXkw|tM z(nq9)hExbw3aA|GJL0N<& zv(nH*4= zi=ne#{4Y%b0(Sx~#C&v&3`m;dYt#@9zsTo+euQRj- zhXW(;M^F&?j*Iu{GU8I^8%lwo7Sg1I-J-&d%W1A~*Ghkb9N-dTB{s+&o0By0xtOPp z6&D-webh{$%*FeXQbYdja49zkY}8aOpv=k~m#O`11>QyJJHSY32e@E?3!Rz(4^Zzq zhK%GQ%25B05S#0|!k#%MQXN}dC)Hh$%aGlW-#}I&e}fEoR+%rbC`0iJB*Gh%Cmr2` zk`_*fo;$~3J&CxdA@AXcora7d$dV~yVM$ErF71NuVe6^`^%4i#=MtFI-Maa}y|b}d z^y69$UW0%?5?ArIjJI8Z?uG47oD|RR@eJ$n*We3B7SlI5bg%g?m!VBS$d$Y$imk4L zTSuLh&*G;kFE_kD;Y@0=0%^655iIJq1C==@t(Es-#c92G@CtI4zB>5uI#rouu{879 z&@BC)ZP#=sx!Dhz&bt)N1s>#C;MDTY_Qr)m*iKK-JC@*-T0c9LakI-38j9UKbvU1p zX`*7;BMI$FT#ZSCG@)bRR5(4Kpmy;9=8`js7LwY{&RI>h^PKoG&=AFR;sKm@EW;O! zOtB;FS_t%V`;OK0QH8$G^m-Z?>#-cZOM6zt8ub{Ip(ZO-Qnu>?L-@!vR3a%|AeF9h z$*L;ZBkO6V8K9S>b;Y0+MSKH1lH=HWE3KgN7x58_C`5yKhNdDLjp<4CDy~eTm}H(R zrur<%6Mm{~(;b8Cf?NmQA&ILv%p0a3E@%loO1ciC!4AUg_F*cIqESY3#kP4PH#X$3 zJ;X)ssY6ui4S6wl#h()Q;Q@YP2IoGOvIE0(>9xJ+`}Ziq97YR+j3F>0!DSogtyba3 zU#iIn83a`tGPJ6(NgIYjH>fN@V0yVFqW} z2%YV&ERT#(ZQ?9OxTjyEFZ#LLD$eB?`5Oc4%xD@PvG6w6q2**e#MQ026Y-F)W~&;eg!r%FLQejLG4rdeJW=u?RIXm?%jV1PSr3s-c z;A)PitiVWP0cI^a+RJX+Lu2G+`}QDPUiQ--TH{wZwvgqlx|cRnA-iKQT?VmlFV#mq zbK(zSjhmBVF2A=t^W2jicXp%I7Sh8QsR4e`^@&%ZDJ1(;6-i2Asr8Tu6`%);#UK_Z! zNR&B-_JO3XO!b1LQVJt75H=V}Q39br2ni$qQ1A~U|B$c<@(;s)cV^ONc<-Eh-o5AZ zch3D_U;5L1=@ZYV=+M-*)S`8Cp<3NAR5C)79AMEYA2-gJafZ}@Gr+_$jvRIt3$;=R zCPQ&VMy<(-K#Hu$R_jSD1>aTN6vM~3F4^bb6}2}-VMDaVg;VpJ zvi7^%mOxbZ;QuMhA_b12fEtX*YQb*U&JvHZsdvDT5pcVIG@MS9u&JqzJvmSAVfrwc~Pekr7{;OMnGyjjTP*UdC~hZYpx)$Ze`fGdQtAw%H`d5i(n^3e-W< z*9g-{&KO!-jG)u%9WH9bZO)2V2T*sxiS>pYnCoC#Sar&qj?UXs;qmVTQg?v;B3#Iq zZ6TF8 zE3L6pFea+Ujy_0Y>gv%~x|Aq$eroHF-J9t5WJ1$c@{&I^-Mj2g-j(6lg3=;>u@JUb z?HsURrMTfIvW=!l)<)DFdfG**upiT*0(tUwMDIXp*g^LsOFO8rzztsmP@I@U8mFZr>a1$q{A8faInr*o>T+X0%C1rM@;vvsh~ zh8G$E+Jbf=PHEIoN%nKHrH3*-*^=z53wMth33(3|S#BTW8Dk~6gr|k)h-cvirCB*( z{~RPoduZ8)R`$bhD2K)apaH!A=W~MdHq@uAzz=^`<(!L;3@d>Z^_OjEiZe{%85PN# z1LkytX-Vey(h~)LG@P_&I%OXaM3!OpfzeFzVK2>f8|=wmDugo`vETX3Ey=IFG_TdO zzze%MwZ3jE?AEDdR*4Q$Dmhl7`wGppI~HLoJdM@|>g+sEC%=`bi@vC}t)L$Af!hiu z*>LT#KHA?(duvyQ>3uod&Mg2uEayZ4qa96y{=@922@clYAc_nzn50_dNNh< zc3W(<;|>6sgZ_wIjddM+#kH%_^sA?rkuFD z4A5{;(ga|qY-@lWz%>=^+I=Z|a9AKgZ zn<5Mq1?X}<`STF