diff options
Diffstat (limited to 'docs/demo')
-rw-r--r-- | docs/demo/custom.css | 161 | ||||
-rw-r--r-- | docs/demo/index.html | 45 | ||||
-rw-r--r-- | docs/demo/libwabt.js | 43 | ||||
-rw-r--r-- | docs/demo/third_party/codemirror/LICENSE | 21 | ||||
-rw-r--r-- | docs/demo/third_party/codemirror/codemirror.css | 340 | ||||
-rw-r--r-- | docs/demo/third_party/codemirror/codemirror.js | 9331 | ||||
-rw-r--r-- | docs/demo/third_party/codemirror/javascript.js | 847 | ||||
-rw-r--r-- | docs/demo/third_party/codemirror/simple-mode.js | 213 | ||||
-rw-r--r-- | docs/demo/third_party/split/horizontal.png | bin | 0 -> 104 bytes | |||
-rw-r--r-- | docs/demo/third_party/split/split.min.js | 5 | ||||
-rw-r--r-- | docs/demo/third_party/split/vertical.png | bin | 0 -> 91 bytes | |||
-rw-r--r-- | docs/demo/wasm2wat/demo.js | 109 | ||||
-rw-r--r-- | docs/demo/wasm2wat/examples.js | 55 | ||||
-rw-r--r-- | docs/demo/wasm2wat/index.html | 73 | ||||
-rw-r--r-- | docs/demo/wast-mode.js | 37 | ||||
-rw-r--r-- | docs/demo/wat2wasm/demo.js | 180 | ||||
-rw-r--r-- | docs/demo/wat2wasm/examples.js | 183 | ||||
-rw-r--r-- | docs/demo/wat2wasm/index.html | 94 |
18 files changed, 11737 insertions, 0 deletions
diff --git a/docs/demo/custom.css b/docs/demo/custom.css new file mode 100644 index 00000000..88fc0a2b --- /dev/null +++ b/docs/demo/custom.css @@ -0,0 +1,161 @@ +html { + font-size: 80%; + line-height: 1.3; +} + +* { + box-sizing: border-box; +} + +body { + font-family: sans-serif; + font-size: 1rem; + line-height: 1.3125rem; + margin: 0; +} + +h1 { + font-size: 2.375rem; + line-height: 2.625rem; + margin-top: 1.3125rem; + margin-bottom: 1.3125rem; +} + +h2 { + font-size: 1.75rem; + line-height: 2.625rem; + margin-top: 1.3125rem; + margin-bottom: 1.3125rem; +} + +h3 { + font-size: 1.3125rem; + line-height: 1.3125rem; + margin-top: 1.3125rem; + margin-bottom: 0rem; +} + +h4 { + font-size: 1rem; + line-height: 1.3125rem; + margin-top: 1.3125rem; + margin-bottom: 0rem; +} + +h5 { + font-size: 1rem; + line-height: 1.3125rem; + margin-top: 1.3125rem; + margin-bottom: 0rem; +} + +p, ul { + padding-left: 0; + margin-top: 0rem; + margin-bottom: 1.3125rem; +} + +ul ul, ol ol, ul ol, ol ul { + margin-top: 0rem; + margin-bottom: 0rem; +} + +pre { + margin: 0; +} + +.right { + float: right; + white-space: nowrap; +} + +.hidden { + display: none; +} + +#split-grid { + position: absolute; + height: 100%; + left: 0; + right: 0; + top: 0; +} + +.CodeMirror, .output { + position: absolute; + height: calc(100% - 2.625rem); + top: 2.625rem; + left: 0; + right: 0; +} + +.output { + padding: 0.3125rem; + overflow: auto; +} + +.toolbar { + position: absolute; + top: 0; + right: 0; + left: 0; + color: #555; + background-color: #eee; + z-index: 9; + height: 2.625rem; + line-height: 2rem; + padding: 0.3125rem 0.3125rem 0; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3); +} + +.split-horizontal, .gutter-horizontal { + height: 100%; + float: left; +} + +.gutter-horizontal { + cursor: ew-resize; + background-image: url('third_party/split/vertical.png'); +} + +.gutter-vertical { + cursor: ns-resize; + background-image: url('third_party/split/horizontal.png'); +} + +.gutter { + touch-action: none; + user-select: none; + background-color: #ddd; + background-repeat: no-repeat; + background-position: 50%; + z-index: 0; +} + +.split { + position: relative; + overflow: hidden; +} + + +body { + display: flex; + min-height: 100vh; + flex-direction: column; +} + +main { + flex: 1; + position: relative; +} + +header { + padding: 0 1em; + z-index: 10; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.3); +} + +ul { + margin: 1em; + list-style: none; +} diff --git a/docs/demo/index.html b/docs/demo/index.html new file mode 100644 index 00000000..fea01a2c --- /dev/null +++ b/docs/demo/index.html @@ -0,0 +1,45 @@ +<!-- + Copyright 2017 WebAssembly Community Group participants + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> + <title>wabt demos</title> + <link href="custom.css" rel="stylesheet"> +</head> +<body> + <header> + <h1>wabt demos</h1> + </header> + <main> + <ul> + <li> + <a href="wat2wasm/index.html">wat2wasm demo</a> + <p> + Example showing converting text to binary. + </p> + </li> + <li> + <a href="wasm2wat/index.html">wasm2wat demo</a> + <p> + Example showing converting binary to text. + </p> + </li> + </ul> + </main> +</body> +</html> diff --git a/docs/demo/libwabt.js b/docs/demo/libwabt.js new file mode 100644 index 00000000..4a767810 --- /dev/null +++ b/docs/demo/libwabt.js @@ -0,0 +1,43 @@ + +var WabtModule = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + return ( +function(WabtModule) { + WabtModule = WabtModule || {}; + +var Module=typeof WabtModule!=="undefined"?WabtModule:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=function(status,toThrow){throw toThrow};Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);Module["quit"]=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){Module["read"]=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}Module["readBinary"]=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=function(status){quit(status)}}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}Module["read"]=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)};Module["setWindowTitle"]=function(title){document.title=title}}else{}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var STACK_ALIGN=16;function dynamicAlloc(size){var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;if(end<=_emscripten_get_heap_size()){HEAP32[DYNAMICTOP_PTR>>2]=end}else{var success=_emscripten_resize_heap(end);if(!success)return 0}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0,"getNativeTypeSize invalid bits "+bits+", type "+type);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var jsCallStartIndex=1;var functionPointers=new Array(10);var funcWrappers={};function dynCall(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var GLOBAL_BASE=8;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}function ccall(ident,returnType,argTypes,args,opts){var toC={"string":function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret},"array":function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string")return UTF8ToString(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func.apply(null,cArgs);ret=convertReturnValue(ret);if(stack!==0)stackRestore(stack);return ret}function setValue(ptr,value,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}var ALLOC_NONE=3;function getMemory(size){if(!runtimeInitialized)return dynamicAlloc(size);return _malloc(size)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(u8Array[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var str="";while(idx<endPtr){var u0=u8Array[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|u8Array[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function allocateUTF8(str){var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8Array(str,HEAP8,ret,size);return ret}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i<str.length;++i){HEAP8[buffer++>>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}function demangle(func){return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STACK_BASE=354992,DYNAMIC_BASE=5597872,DYNAMICTOP_PTR=354736;var TOTAL_STACK=5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY<TOTAL_STACK)err("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+TOTAL_MEMORY+"! (TOTAL_STACK="+TOTAL_STACK+")");if(Module["buffer"]){buffer=Module["buffer"]}else{{buffer=new ArrayBuffer(TOTAL_MEMORY)}Module["buffer"]=buffer}updateGlobalBufferViews();HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return String.prototype.startsWith?filename.startsWith(dataURIPrefix):filename.indexOf(dataURIPrefix)===0}__ATINIT__.push({func:function(){___emscripten_environ_constructor()}});memoryInitializer="data:application/octet-stream;base64,AAAAAAAAAAAyCgUAwZkEAFAKBQB1CQUAZgkFANkJBQBEkAQAhgkFALEJBQCUCQUAzQkFAFQJBQDGDAUAbwoFACsKBQAOCgUA/QkFAAAAAAAAAAAAAAAAAEGSBABbkgQAc5IEAIqSBAChkgQAuZIEANCSBADmkgQA/pIEABmTBAAzkwQASpMEAGaTBAAAAAAAAAAAAAAAAAD3kwQAApQEAAyUBAAdlAQAKZQEADaUBABBlAQASJQEAE6UBABRlAQAVpQEAF6UBABmlAQAa5QEAHiUBACAlAQAhpQEAI6UBACTlAQAnZQEAKeUBACqlAQAr5QEALiUBADBlAQAypQEAM+UBADalAQA45QEAO6UBAD5lAQABJUEAA+VBAATlQQAHZUEACWVBAAtlQQANJUEAD+VBABSlQQAWZUEAGSVBABylQQAfJUEAIKVBACMlQQAlZUEAJ+VBAColQQAspUEALyVBADFlQQAzZUEANOVBADXlQQA3ZUEAAoMBQDA////wP///8D////A////AAAAAAAAAAAAAAAAAAAAAJgLBQDA////wP///8D////A////AAAAAAAAAAABAAAAAQAAACoNBQDA////wP///8D////A////AAAAAAAAAAACAAAAAgAAABoOBQDA////wP///8D////A////AAAAAAAAAAADAAAAAwAAAB8OBQDA////wP///8D////A////AAAAAAAAAAAEAAAABAAAADkLBQDA////wP///8D////A////AAAAAAAAAAAFAAAABQAAADIOBQDA////wP///8D////A////AAAAAAAAAAAGAAAABgAAAAkLBQDA////wP///8D////A////AAAAAAAAAAAHAAAABwAAAJIOBQDA////wP///8D////A////AAAAAAAAAAAIAAAACAAAAIoOBQDA////wP///8D////A////AAAAAAAAAAAJAAAACQAAADkNBQDA////wP///8D////A////AAAAAAAAAAAKAAAACgAAAD4LBQDA////wP///8D////A////AAAAAAAAAAALAAAACwAAADANBQDA////wP///8D////A////AAAAAAAAAAAMAAAADAAAADMNBQDA////wP///8D////A////AAAAAAAAAAANAAAADQAAAHkNBQDA////wP///8D////A////AAAAAAAAAAAOAAAADgAAAJgOBQDA////wP///8D////A////AAAAAAAAAAAPAAAADwAAAL8NBQDA////wP///8D////A////AAAAAAAAAAAQAAAAEAAAAMQNBQDA////wP///8D////A////AAAAAAAAAAARAAAAEQAAANINBQDA////wP///8D////A////AAAAAAAAAAASAAAAEgAAAN4NBQDA////wP///8D////A////AAAAAAAAAAATAAAAEwAAAP0NBQDA////wP///8D////A////AAAAAAAAAAAaAAAAGgAAAJ8OBQDA////wP///8D////A////AAAAAAAAAAAbAAAAGwAAAFILBQDA////wP///8D////A////AAAAAAAAAAAgAAAAIAAAAEsOBQDA////wP///8D////A////AAAAAAAAAAAhAAAAIQAAAFUOBQDA////wP///8D////A////AAAAAAAAAAAiAAAAIgAAAEILBQDA////wP///8D////A////AAAAAAAAAAAjAAAAIwAAAEAOBQDA////wP///8D////A////AAAAAAAAAAAkAAAAJAAAAH6lBAD//////////8D////A////BAAAAAAAAAAoAAAAKAAAAHWlBAD+/////////8D////A////CAAAAAAAAAApAAAAKQAAAGylBAD9/////////8D////A////BAAAAAAAAAAqAAAAKgAAAGOlBAD8/////////8D////A////CAAAAAAAAAArAAAAKwAAAN2qBAD//////////8D////A////AQAAAAAAAAAsAAAALAAAAPWqBAD//////////8D////A////AQAAAAAAAAAtAAAALQAAALilBAD//////////8D////A////AgAAAAAAAAAuAAAALgAAANulBAD//////////8D////A////AgAAAAAAAAAvAAAALwAAANGqBAD+/////////8D////A////AQAAAAAAAAAwAAAAMAAAAOmqBAD+/////////8D////A////AQAAAAAAAAAxAAAAMQAAAKulBAD+/////////8D////A////AgAAAAAAAAAyAAAAMgAAAM6lBAD+/////////8D////A////AgAAAAAAAAAzAAAAMwAAAEKoBAD+/////////8D////A////BAAAAAAAAAA0AAAANAAAAFmoBAD+/////////8D////A////BAAAAAAAAAA1AAAANQAAACmlBADA///////////////A////BAAAAAAAAAA2AAAANgAAAB+lBADA//////////7////A////CAAAAAAAAAA3AAAANwAAABWlBADA//////////3////A////BAAAAAAAAAA4AAAAOAAAAAulBADA//////////z////A////CAAAAAAAAAA5AAAAOQAAAJ6qBADA///////////////A////AQAAAAAAAAA6AAAAOgAAAIesBADA///////////////A////AgAAAAAAAAA7AAAAOwAAAJOqBADA//////////7////A////AQAAAAAAAAA8AAAAPAAAAHusBADA//////////7////A////AgAAAAAAAAA9AAAAPQAAADOlBADA//////////7////A////BAAAAAAAAAA+AAAAPgAAAIwLBQD/////wP///8D////A////AAAAAAAAAAA/AAAAPwAAAHQLBQD//////////8D////A////AAAAAAAAAABAAAAAQAAAANmkBAD/////wP///8D////A////AAAAAAAAAABBAAAAQQAAAM+kBAD+////wP///8D////A////AAAAAAAAAABCAAAAQgAAAMWkBAD9////wP///8D////A////AAAAAAAAAABDAAAAQwAAALukBAD8////wP///8D////A////AAAAAAAAAABEAAAARAAAAO+rBAD//////////8D////A////AAAAAAAAAABFAAAARQAAAPe0BAD////////////////A////AAAAAAAAAABGAAAARgAAAF6kBAD////////////////A////AAAAAAAAAABHAAAARwAAAJKjBAD////////////////A////AAAAAAAAAABIAAAASAAAAKSjBAD////////////////A////AAAAAAAAAABJAAAASQAAAPGtBAD////////////////A////AAAAAAAAAABKAAAASgAAAA2uBAD////////////////A////AAAAAAAAAABLAAAASwAAALajBAD////////////////A////AAAAAAAAAABMAAAATAAAAMijBAD////////////////A////AAAAAAAAAABNAAAATQAAAB+uBAD////////////////A////AAAAAAAAAABOAAAATgAAADGuBAD////////////////A////AAAAAAAAAABPAAAATwAAAOerBAD//////v///8D////A////AAAAAAAAAABQAAAAUAAAAPC0BAD//////v////7////A////AAAAAAAAAABRAAAAUQAAAFekBAD//////v////7////A////AAAAAAAAAABSAAAAUgAAAImjBAD//////v////7////A////AAAAAAAAAABTAAAAUwAAAJujBAD//////v////7////A////AAAAAAAAAABUAAAAVAAAAOitBAD//////v////7////A////AAAAAAAAAABVAAAAVQAAAASuBAD//////v////7////A////AAAAAAAAAABWAAAAVgAAAK2jBAD//////v////7////A////AAAAAAAAAABXAAAAVwAAAL+jBAD//////v////7////A////AAAAAAAAAABYAAAAWAAAABauBAD//////v////7////A////AAAAAAAAAABZAAAAWQAAACiuBAD//////v////7////A////AAAAAAAAAABaAAAAWgAAANq0BAD//////f////3////A////AAAAAAAAAABbAAAAWwAAAFCkBAD//////f////3////A////AAAAAAAAAABcAAAAXAAAAESjBAD//////f////3////A////AAAAAAAAAABdAAAAXQAAAA6tBAD//////f////3////A////AAAAAAAAAABeAAAAXgAAAFKjBAD//////f////3////A////AAAAAAAAAABfAAAAXwAAAG2tBAD//////f////3////A////AAAAAAAAAABgAAAAYAAAANO0BAD//////P////z////A////AAAAAAAAAABhAAAAYQAAAEmkBAD//////P////z////A////AAAAAAAAAABiAAAAYgAAAD2jBAD//////P////z////A////AAAAAAAAAABjAAAAYwAAAAetBAD//////P////z////A////AAAAAAAAAABkAAAAZAAAAEujBAD//////P////z////A////AAAAAAAAAABlAAAAZQAAAGatBAD//////P////z////A////AAAAAAAAAABmAAAAZgAAAG2kBAD//////////8D////A////AAAAAAAAAABnAAAAZwAAAO2jBAD//////////8D////A////AAAAAAAAAABoAAAAaAAAAMG1BAD//////////8D////A////AAAAAAAAAABpAAAAaQAAACGkBAD////////////////A////AAAAAAAAAABqAAAAagAAAIGjBAD////////////////A////AAAAAAAAAABrAAAAawAAAKGkBAD////////////////A////AAAAAAAAAABsAAAAbAAAAO2kBAD////////////////A////AAAAAAAAAABtAAAAbQAAAAGlBAD////////////////A////AAAAAAAAAABuAAAAbgAAANujBAD////////////////A////AAAAAAAAAABvAAAAbwAAAP+jBAD////////////////A////AAAAAAAAAABwAAAAcAAAADGkBAD////////////////A////AAAAAAAAAABxAAAAcQAAAP6rBAD////////////////A////AAAAAAAAAAByAAAAcgAAADiwBAD////////////////A////AAAAAAAAAABzAAAAcwAAACavBAD////////////////A////AAAAAAAAAAB0AAAAdAAAANmuBAD////////////////A////AAAAAAAAAAB1AAAAdQAAAO2uBAD////////////////A////AAAAAAAAAAB2AAAAdgAAAEilBAD////////////////A////AAAAAAAAAAB3AAAAdwAAAFqlBAD////////////////A////AAAAAAAAAAB4AAAAeAAAAGWkBAD+/////v///8D////A////AAAAAAAAAAB5AAAAeQAAAOWjBAD+/////v///8D////A////AAAAAAAAAAB6AAAAegAAALa1BAD+/////v///8D////A////AAAAAAAAAAB7AAAAewAAABmkBAD+/////v////7////A////AAAAAAAAAAB8AAAAfAAAAHmjBAD+/////v////7////A////AAAAAAAAAAB9AAAAfQAAAJmkBAD+/////v////7////A////AAAAAAAAAAB+AAAAfgAAAOOkBAD+/////v////7////A////AAAAAAAAAAB/AAAAfwAAAPekBAD+/////v////7////A////AAAAAAAAAACAAAAAgAAAANGjBAD+/////v////7////A////AAAAAAAAAACBAAAAgQAAAPWjBAD+/////v////7////A////AAAAAAAAAACCAAAAggAAACmkBAD+/////v////7////A////AAAAAAAAAACDAAAAgwAAAPerBAD+/////v////7////A////AAAAAAAAAACEAAAAhAAAADCwBAD+/////v////7////A////AAAAAAAAAACFAAAAhQAAAB6vBAD+/////v////7////A////AAAAAAAAAACGAAAAhgAAAM+uBAD+/////v////7////A////AAAAAAAAAACHAAAAhwAAAOOuBAD+/////v////7////A////AAAAAAAAAACIAAAAiAAAAD+lBAD+/////v////7////A////AAAAAAAAAACJAAAAiQAAAFGlBAD+/////v////7////A////AAAAAAAAAACKAAAAigAAAGGjBAD9/////f////3////A////AAAAAAAAAACLAAAAiwAAAAqwBAD9/////f////3////A////AAAAAAAAAACMAAAAjAAAALKkBAD9/////f////3////A////AAAAAAAAAACNAAAAjQAAAFytBAD9/////f////3////A////AAAAAAAAAACOAAAAjgAAAH+kBAD9/////f////3////A////AAAAAAAAAACPAAAAjwAAAP2lBAD9/////f////3////A////AAAAAAAAAACQAAAAkAAAAGisBAD9/////f////3////A////AAAAAAAAAACRAAAAkQAAABGkBAD9/////f////3////A////AAAAAAAAAACSAAAAkgAAAHGjBAD9/////f////3////A////AAAAAAAAAACTAAAAkwAAAJGkBAD9/////f////3////A////AAAAAAAAAACUAAAAlAAAAJmlBAD9/////f////3////A////AAAAAAAAAACVAAAAlQAAAEGkBAD9/////f////3////A////AAAAAAAAAACWAAAAlgAAAOSzBAD9/////f////3////A////AAAAAAAAAACXAAAAlwAAAGe5BAD9/////f////3////A////AAAAAAAAAACYAAAAmAAAAFmjBAD8/////P////z////A////AAAAAAAAAACZAAAAmQAAAAKwBAD8/////P////z////A////AAAAAAAAAACaAAAAmgAAAKmkBAD8/////P////z////A////AAAAAAAAAACbAAAAmwAAAFKtBAD8/////P////z////A////AAAAAAAAAACcAAAAnAAAAHWkBAD8/////P////z////A////AAAAAAAAAACdAAAAnQAAAPGlBAD8/////P////z////A////AAAAAAAAAACeAAAAngAAAF+sBAD8/////P////z////A////AAAAAAAAAACfAAAAnwAAAAmkBAD8/////P////z////A////AAAAAAAAAACgAAAAoAAAAGmjBAD8/////P////z////A////AAAAAAAAAAChAAAAoQAAAImkBAD8/////P////z////A////AAAAAAAAAACiAAAAogAAAJGlBAD8/////P////z////A////AAAAAAAAAACjAAAAowAAADmkBAD8/////P////z////A////AAAAAAAAAACkAAAApAAAANyzBAD8/////P////z////A////AAAAAAAAAAClAAAApQAAAFq5BAD8/////P////z////A////AAAAAAAAAACmAAAApgAAACG3BAD//////v///8D////A////AAAAAAAAAACnAAAApwAAACinBAD//////f///8D////A////AAAAAAAAAACoAAAAqAAAAEinBAD//////f///8D////A////AAAAAAAAAACpAAAAqQAAAOaoBAD//////P///8D////A////AAAAAAAAAACqAAAAqgAAAAapBAD//////P///8D////A////AAAAAAAAAACrAAAAqwAAAEGvBAD+/////////8D////A////AAAAAAAAAACsAAAArAAAAFKvBAD+/////////8D////A////AAAAAAAAAACtAAAArQAAABinBAD+/////f///8D////A////AAAAAAAAAACuAAAArgAAADinBAD+/////f///8D////A////AAAAAAAAAACvAAAArwAAANaoBAD+/////P///8D////A////AAAAAAAAAACwAAAAsAAAAPaoBAD+/////P///8D////A////AAAAAAAAAACxAAAAsQAAAIGqBAD9/////////8D////A////AAAAAAAAAACyAAAAsgAAAHGrBAD9/////////8D////A////AAAAAAAAAACzAAAAswAAABOrBAD9/////v///8D////A////AAAAAAAAAAC0AAAAtAAAAKWsBAD9/////v///8D////A////AAAAAAAAAAC1AAAAtQAAABapBAD9/////P///8D////A////AAAAAAAAAAC2AAAAtgAAAG+qBAD8/////////8D////A////AAAAAAAAAAC3AAAAtwAAAF+rBAD8/////////8D////A////AAAAAAAAAAC4AAAAuAAAAAGrBAD8/////v///8D////A////AAAAAAAAAAC5AAAAuQAAAJOsBAD8/////v///8D////A////AAAAAAAAAAC6AAAAugAAAN+yBAD8/////f///8D////A////AAAAAAAAAAC7AAAAuwAAALi2BAD//////f///8D////A////AAAAAAAAAAC8AAAAvAAAAA23BAD+/////P///8D////A////AAAAAAAAAAC9AAAAvQAAAI+xBAD9/////////8D////A////AAAAAAAAAAC+AAAAvgAAAO+yBAD8/////v///8D////A////AAAAAAAAAAC/AAAAvwAAACaxBAD//////////8D////A////AAAAAAAAAADAAAAAwAAAACGwBAD//////////8D////A////AAAAAAAAAADBAAAAwQAAABixBAD+/////v///8D////A////AAAAAAAAAADCAAAAwgAAABKwBAD+/////v///8D////A////AAAAAAAAAADDAAAAwwAAAAOvBAD+/////v///8D////A////AAAAAAAAAADEAAAAxAAAAOyVBADA////wP///8D////A////AAAAAAAAAADgAAAA4AAAAPOVBADA////wP///8D////A////AAAAAAAAAADhAAAA4QAAAP2VBADA////wP///8D////A////AAAAAAAAAADiAAAA4gAAAO8JBQDA////wP///8D////A////AAAAAAAAAADjAAAA4wAAAAeWBADA////wP///8D////A////AAAAAAAAAADkAAAA5AAAABmsBAD//////f///8D////A////AAAAAPwAAAAAAAAAAPwAAEGsBAD//////f///8D////A////AAAAAPwAAAABAAAAAfwAAJmwBAD//////P///8D////A////AAAAAPwAAAACAAAAAvwAAMGwBAD//////P///8D////A////AAAAAPwAAAADAAAAA/wAAAWsBAD+/////f///8D////A////AAAAAPwAAAAEAAAABPwAAC2sBAD+/////f///8D////A////AAAAAPwAAAAFAAAABfwAAIWwBAD+/////P///8D////A////AAAAAPwAAAAGAAAABvwAAK2wBAD+/////P///8D////A////AAAAAPwAAAAHAAAAB/wAAIALBQDA////////////////////AAAAAPwAAAAIAAAACPwAACULBQDA////wP///8D////A////AAAAAPwAAAAJAAAACfwAAFwLBQDA////////////////////AAAAAPwAAAAKAAAACvwAAGgLBQDA////////////////////AAAAAPwAAAALAAAAC/wAAOYLBQDA////////////////////AAAAAPwAAAAMAAAADPwAAC8LBQDA////wP///8D////A////AAAAAPwAAAANAAAADfwAANsLBQDA////////////////////AAAAAPwAAAAOAAAADvwAAF8OBQDA////wP///8D////A////AAAAAAAAAAAlAAAAJQAAAGkOBQDA////wP///8D////A////AAAAAAAAAAAmAAAAJgAAAHMOBQDA////wP///8D////A////AAAAAPwAAAAPAAAAD/wAAPELBQDA////wP///8D////A////AAAAAPwAAAAQAAAAEPwAAKULBQDA////wP///8D////A////AAAAAAAAAADQAAAA0AAAAH4OBQDA////wP///8D////A////AAAAAAAAAADRAAAA0QAAAJwLBQDA////wP///8D////A////AAAAAAAAAADSAAAA0gAAAE+oBAD7/////////8D////A////EAAAAP0AAAAAAAAAAP0AAMWmBADA//////////v////A////EAAAAP0AAAABAAAAAf0AAFGmBAD7////wP///8D////A////AAAAAP0AAAACAAAAAv0AAGO2BAD7/////////8D////A////AAAAAP0AAAAEAAAABP0AAM63BAD/////+////8D////A////AAAAAP0AAAAFAAAABf0AAOO3BAD/////+////8D////A////AAAAAP0AAAAGAAAABv0AADa4BAD7////+//////////A////AAAAAP0AAAAHAAAAB/0AAEa3BAD7/////////8D////A////AAAAAP0AAAAIAAAACP0AANK4BAD/////+////8D////A////AAAAAP0AAAAJAAAACf0AAOe4BAD/////+////8D////A////AAAAAP0AAAAKAAAACv0AADi5BAD7////+//////////A////AAAAAP0AAAALAAAAC/0AAHSyBAD7/////////8D////A////AAAAAP0AAAAMAAAADP0AAPC1BAD/////+////8D////A////AAAAAP0AAAANAAAADf0AAIK2BAD7////+//////////A////AAAAAP0AAAAOAAAADv0AABKvBAD7/////v///8D////A////AAAAAP0AAAAPAAAAD/0AAMyyBAD+////+////8D////A////AAAAAP0AAAAQAAAAEP0AAEW0BAD7////+/////7////A////AAAAAP0AAAARAAAAEf0AAF6yBAD7/////f///8D////A////AAAAAP0AAAASAAAAEv0AAMy1BAD9////+////8D////A////AAAAAP0AAAATAAAAE/0AAG+2BAD7////+/////3////A////AAAAAP0AAAAUAAAAFP0AAPeuBAD7/////P///8D////A////AAAAAP0AAAAVAAAAFf0AAKiyBAD8////+////8D////A////AAAAAP0AAAAWAAAAFv0AACe0BAD7////+/////z////A////AAAAAP0AAAAXAAAAF/0AAHS5BAD7////+/////v////A////AAAAAP0AAAAYAAAAGP0AADquBAD7////+/////v////A////AAAAAP0AAAAZAAAAGf0AAH2uBAD7////+/////v////A////AAAAAP0AAAAaAAAAGv0AAIiuBAD7////+/////v////A////AAAAAP0AAAAbAAAAG/0AABy0BAD7////+/////v////A////AAAAAP0AAAAcAAAAHP0AADq0BAD7////+/////v////A////AAAAAP0AAAAdAAAAHf0AAJOuBAD7////+/////v////A////AAAAAP0AAAAeAAAAHv0AAJ6uBAD7////+/////v////A////AAAAAP0AAAAfAAAAH/0AAFi0BAD7////+/////v////A////AAAAAP0AAAAgAAAAIP0AAGO0BAD7////+/////v////A////AAAAAP0AAAAhAAAAIf0AAIm5BAD7////+/////v////A////AAAAAP0AAAAiAAAAIv0AAHywBAD7////+/////v////A////AAAAAP0AAAAjAAAAI/0AAOywBAD7////+/////v////A////AAAAAP0AAAAkAAAAJP0AAPewBAD7////+/////v////A////AAAAAP0AAAAlAAAAJf0AADe2BAD7////+/////v////A////AAAAAP0AAAAmAAAAJv0AAEK2BAD7////+/////v////A////AAAAAP0AAAAnAAAAJ/0AAAKxBAD7////+/////v////A////AAAAAP0AAAAoAAAAKP0AAA2xBAD7////+/////v////A////AAAAAP0AAAApAAAAKf0AAE22BAD7////+/////v////A////AAAAAP0AAAAqAAAAKv0AAFi2BAD7////+/////v////A////AAAAAP0AAAArAAAAK/0AAAG4BAD7////+/////v////A////AAAAAP0AAAAsAAAALP0AAHqpBAD7////+/////v////A////AAAAAP0AAAAtAAAALf0AABSqBAD7////+/////v////A////AAAAAP0AAAAuAAAALv0AADWqBAD7////+/////v////A////AAAAAP0AAAAvAAAAL/0AAGyvBAD7////+/////v////A////AAAAAP0AAAAwAAAAMP0AAHevBAD7////+/////v////A////AAAAAP0AAAAxAAAAMf0AAECqBAD7////+/////v////A////AAAAAP0AAAAyAAAAMv0AAEuqBAD7////+/////v////A////AAAAAP0AAAAzAAAAM/0AAIKvBAD7////+/////v////A////AAAAAP0AAAA0AAAANP0AAJavBAD7////+/////v////A////AAAAAP0AAAA1AAAANf0AAPi3BAD7////+/////v////A////AAAAAP0AAABAAAAAQP0AAFqpBAD7////+/////v////A////AAAAAP0AAABBAAAAQf0AAIOpBAD7////+/////v////A////AAAAAP0AAABCAAAAQv0AAC6vBAD7////+/////v////A////AAAAAP0AAABDAAAAQ/0AAAGqBAD7////+/////v////A////AAAAAP0AAABEAAAARP0AAGOvBAD7////+/////v////A////AAAAAP0AAABFAAAARf0AAK+2BAD7////+/////v////A////AAAAAP0AAABGAAAARv0AAMWlBAD7////+/////v////A////AAAAAP0AAABHAAAAR/0AAOilBAD7////+/////v////A////AAAAAP0AAABIAAAASP0AACWrBAD7////+/////v////A////AAAAAP0AAABJAAAASf0AAAmmBAD7////+/////v////A////AAAAAP0AAABKAAAASv0AAFarBAD7////+/////v////A////AAAAAP0AAABLAAAAS/0AABymBAD7////+////8D////A////AAAAAP0AAABMAAAATP0AAKOmBAD7////+/////v////A////AAAAAP0AAABNAAAATf0AANCmBAD7////+/////v////A////AAAAAP0AAABOAAAATv0AAI2vBAD7////+/////v////A////AAAAAP0AAABPAAAAT/0AAKymBAD7////+/////v////7////AAAAAP0AAABQAAAAUP0AALO3BAD7////+////8D////A////AAAAAP0AAABRAAAAUf0AAEm4BAD/////+////8D////A////AAAAAP0AAABSAAAAUv0AAK2xBAD/////+////8D////A////AAAAAP0AAABTAAAAU/0AAHC3BAD7////+//////////A////AAAAAP0AAABUAAAAVP0AAC63BAD7////+//////////A////AAAAAP0AAABVAAAAVf0AADq3BAD7////+//////////A////AAAAAP0AAABWAAAAVv0AAKGvBAD7////+/////v////A////AAAAAP0AAABXAAAAV/0AAF6zBAD7////+/////v////A////AAAAAP0AAABYAAAAWP0AAHOzBAD7////+/////v////A////AAAAAP0AAABZAAAAWf0AAPqtBAD7////+/////v////A////AAAAAP0AAABaAAAAWv0AAGWxBAD7////+/////v////A////AAAAAP0AAABbAAAAW/0AAHqxBAD7////+/////v////A////AAAAAP0AAABcAAAAXP0AADevBAD7////+/////v////A////AAAAAP0AAABdAAAAXf0AAIm4BAD7////+////8D////A////AAAAAP0AAABiAAAAYv0AAEu5BAD/////+////8D////A////AAAAAP0AAABjAAAAY/0AAOG0BAD/////+////8D////A////AAAAAP0AAABkAAAAZP0AAHC4BAD7////+//////////A////AAAAAP0AAABlAAAAZf0AAFi4BAD7////+//////////A////AAAAAP0AAABmAAAAZv0AAGS4BAD7////+//////////A////AAAAAP0AAABnAAAAZ/0AAGqyBAD7////+/////v////A////AAAAAP0AAABoAAAAaP0AAAO2BAD7////+/////v////A////AAAAAP0AAABpAAAAaf0AABi2BAD7////+/////v////A////AAAAAP0AAABqAAAAav0AAGqwBAD7////+/////v////A////AAAAAP0AAABrAAAAa/0AAKm0BAD7////+/////v////A////AAAAAP0AAABsAAAAbP0AAL60BAD7////+/////v////A////AAAAAP0AAABtAAAAbf0AAKOxBAD7////+/////v////A////AAAAAP0AAABuAAAAbv0AAKy1BAD7////+////8D////A////AAAAAP0AAABzAAAAc/0AAJW2BAD/////+////8D////A////AAAAAP0AAAB0AAAAdP0AAEOtBAD/////+////8D////A////AAAAAP0AAAB1AAAAdf0AAES1BAD7////+//////////A////AAAAAP0AAAB2AAAAdv0AACy1BAD7////+//////////A////AAAAAP0AAAB3AAAAd/0AADi1BAD7////+//////////A////AAAAAP0AAAB4AAAAeP0AAMeqBAD7////+/////v////A////AAAAAP0AAAB5AAAAef0AADmpBAD7////+/////v////A////AAAAAP0AAAB8AAAAfP0AALOqBAD7////+/////v////A////AAAAAP0AAAB/AAAAf/0AAIqyBAD7////+////8D////A////AAAAAP0AAACEAAAAhP0AAG60BAD/////+////8D////A////AAAAAP0AAACFAAAAhf0AAFaqBAD/////+////8D////A////AAAAAP0AAACGAAAAhv0AALyxBAD7////+//////////A////AAAAAP0AAACHAAAAh/0AAE2xBAD7////+//////////A////AAAAAP0AAACIAAAAiP0AAFmxBAD7////+//////////A////AAAAAP0AAACJAAAAif0AAA6nBAD7////+/////v////A////AAAAAP0AAACKAAAAiv0AAKGlBAD7////+/////v////A////AAAAAP0AAACNAAAAjf0AAGWqBAD7////+////8D////A////AAAAAP0AAACVAAAAlf0AAKK1BAD7////+////8D////A////AAAAAP0AAACWAAAAlv0AAAOzBAD7////+////8D////A////AAAAAP0AAACXAAAAl/0AAL2qBAD7////+/////v////A////AAAAAP0AAACaAAAAmv0AAC+pBAD7////+/////v////A////AAAAAP0AAACbAAAAm/0AAKmqBAD7////+/////v////A////AAAAAP0AAACcAAAAnP0AAFWsBAD7////+/////v////A////AAAAAP0AAACdAAAAnf0AAAqqBAD7////+/////v////A////AAAAAP0AAACeAAAAnv0AAGa3BAD7////+/////v////A////AAAAAP0AAACfAAAAn/0AAGamBAD7////+////8D////A////AAAAAP0AAACgAAAAoP0AAICyBAD7////+////8D////A////AAAAAP0AAAChAAAAof0AAKuvBAD7////+////8D////A////AAAAAP0AAACiAAAAov0AAASnBAD7////+/////v////A////AAAAAP0AAAClAAAApf0AAIelBAD7////+/////v////A////AAAAAP0AAACmAAAApv0AALumBAD7////+/////v////A////AAAAAP0AAACnAAAAp/0AACWpBAD7////+/////v////A////AAAAAP0AAACoAAAAqP0AABKmBAD7////+/////v////A////AAAAAP0AAACpAAAAqf0AAC22BAD7////+/////v////A////AAAAAP0AAACqAAAAqv0AAE61BAD7////+////8D////A////AAAAAP0AAACrAAAAq/0AAGa1BAD7////+////8D////A////AAAAAP0AAACsAAAArP0AAIizBAD7////+////8D////A////AAAAAP0AAACtAAAArf0AAKCzBAD7////+////8D////A////AAAAAP0AAACuAAAArv0AAIe3BAD7////+////8D////A////AAAAAP0AAACvAAAAr/0AAJ23BAD7////+////8D////A////AAAAAP0AAACwAAAAsP0AAAq4BAD7////+////8D////A////AAAAAP0AAACxAAAAsf0AACC4BAD7////+////8D////A////AAAAAP0AAACyAAAAsv0AADSxBAD7////+/////v////A////AAAAAP0AAADAAAAAwP0AAMcLBQD7////+/////v////A////AAAAAP0AAADBAAAAwf0AAL23BAD7/////////8D////A////AQAAAP0AAADCAAAAwv0AAJO4BAD7/////////8D////A////AgAAAP0AAADDAAAAw/0AAN+1BAD7/////////8D////A////BAAAAP0AAADEAAAAxP0AALuyBAD7/////////8D////A////CAAAAP0AAADFAAAAxf0AAPy4BAD////////////////A////BAAAAP4AAAAAAAAAAP4AAICmBAD////////////////+////BAAAAP4AAAABAAAAAf4AAHCmBAD///////////7////+////CAAAAP4AAAACAAAAAv4AAPKnBAD//////////8D////A////BAAAAP4AAAAQAAAAEP4AAOKnBAD+/////////8D////A////CAAAAP4AAAARAAAAEf4AAFauBAD//////////8D////A////AQAAAP4AAAASAAAAEv4AAEKrBAD//////////8D////A////AgAAAP4AAAATAAAAE/4AAEOuBAD+/////////8D////A////AQAAAP4AAAAUAAAAFP4AAC6rBAD+/////////8D////A////AgAAAP4AAAAVAAAAFf4AAGmuBAD+/////////8D////A////BAAAAP4AAAAWAAAAFv4AAECmBADA///////////////A////BAAAAP4AAAAXAAAAF/4AAC+mBADA//////////7////A////CAAAAP4AAAAYAAAAGP4AAJC1BADA///////////////A////AQAAAP4AAAAZAAAAGf4AALyuBADA///////////////A////AgAAAP4AAAAaAAAAGv4AAH61BADA//////////7////A////AQAAAP4AAAAbAAAAG/4AAKmuBADA//////////7////A////AgAAAP4AAAAcAAAAHP4AAJCmBADA//////////7////A////BAAAAP4AAAAdAAAAHf4AAMOoBAD////////////////A////BAAAAP4AAAAeAAAAHv4AALCoBAD+//////////7////A////CAAAAP4AAAAfAAAAH/4AAG6nBAD////////////////A////AQAAAP4AAAAgAAAAIP4AAPCsBAD////////////////A////AgAAAP4AAAAhAAAAIf4AAFinBAD+//////////7////A////AQAAAP4AAAAiAAAAIv4AANmsBAD+//////////7////A////AgAAAP4AAAAjAAAAI/4AAEOpBAD+//////////7////A////BAAAAP4AAAAkAAAAJP4AAJ2oBAD////////////////A////BAAAAP4AAAAlAAAAJf4AAIqoBAD+//////////7////A////CAAAAP4AAAAmAAAAJv4AAO6mBAD////////////////A////AQAAAP4AAAAnAAAAJ/4AAJqrBAD////////////////A////AgAAAP4AAAAoAAAAKP4AANimBAD+//////////7////A////AQAAAP4AAAApAAAAKf4AAIOrBAD+//////////7////A////AgAAAP4AAAAqAAAAKv4AALCnBAD+//////////7////A////BAAAAP4AAAArAAAAK/4AAO6pBAD////////////////A////BAAAAP4AAAAsAAAALP4AANupBAD+//////////7////A////CAAAAP4AAAAtAAAALf4AAJqnBAD////////////////A////AQAAAP4AAAAuAAAALv4AACytBAD////////////////A////AgAAAP4AAAAvAAAAL/4AAISnBAD+//////////7////A////AQAAAP4AAAAwAAAAMP4AABWtBAD+//////////7////A////AgAAAP4AAAAxAAAAMf4AAGOpBAD+//////////7////A////BAAAAP4AAAAyAAAAMv4AAHioBAD////////////////A////BAAAAP4AAAAzAAAAM/4AAGaoBAD+//////////7////A////CAAAAP4AAAA0AAAANP4AAFWwBAD////////////////A////AQAAAP4AAAA1AAAANf4AANKtBAD////////////////A////AgAAAP4AAAA2AAAANv4AAECwBAD+//////////7////A////AQAAAP4AAAA3AAAAN/4AALytBAD+//////////7////A////AgAAAP4AAAA4AAAAOP4AAB+qBAD+//////////7////A////BAAAAP4AAAA5AAAAOf4AAPO2BAD////////////////A////BAAAAP4AAAA6AAAAOv4AAOC2BAD+//////////7////A////CAAAAP4AAAA7AAAAO/4AAJO0BAD////////////////A////AQAAAP4AAAA8AAAAPP4AABW1BAD////////////////A////AgAAAP4AAAA9AAAAPf4AAH20BAD+//////////7////A////AQAAAP4AAAA+AAAAPv4AAP60BAD+//////////7////A////AgAAAP4AAAA/AAAAP/4AANWwBAD+//////////7////A////BAAAAP4AAABAAAAAQP4AAKa5BAD////////////////A////BAAAAP4AAABBAAAAQf4AAJK5BAD+//////////7////A////CAAAAP4AAABCAAAAQv4AALu4BAD////////////////A////AQAAAP4AAABDAAAAQ/4AAAS0BAD////////////////A////AgAAAP4AAABEAAAARP4AAKS4BAD+//////////7////A////AQAAAP4AAABFAAAARf4AAOyzBAD+//////////7////A////AgAAAP4AAABGAAAARv4AALavBAD+//////////7////A////BAAAAP4AAABHAAAAR/4AACG5BAD/////////////////////BAAAAP4AAABIAAAASP4AAAq5BAD+//////////7////+////CAAAAP4AAABJAAAASf4AAOivBAD/////////////////////AQAAAP4AAABKAAAASv4AAMyrBAD/////////////////////AgAAAP4AAABLAAAAS/4AAM6vBAD+//////////7////+////AQAAAP4AAABMAAAATP4AALGrBAD+//////////7////+////AgAAAP4AAABNAAAATf4AAMenBAD+//////////7////+////BAAAAP4AAABOAAAATv4AABGWBADA////wP///8D////A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAQEBAQAAAQEAAQEBDQ0NDQ0NDQ0NDQEAAQEBAQEFBQUFBQUBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEBAQcHBwcHBwMDAwMDAwMDAwMDAwMDAwMDAwMDAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHCQArAEgHDgAKAI8ACQA4AcoAkgAaAeUBVwBIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAcJAAkAPwAMAAkAFgAPAAkAPQEqAgwADQAJACwACgAaAD8ApwHTAS4ACQAJAAsAVgAnAJIBMwIRAEgHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAdIB0gHSAcAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEwMTIzNDU2Nzg5YWJjZGVmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQEBAQEAAAEBAAEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAVAAAAAAAAAAAAAAAAAAAAAAAAABYAAAAXAAAAGAAAABkAAAAaAAAAzAAAAM0AAAAAAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAewAAAHwAAAB9AAAAfgAAAH8AAACAAAAAgQAAAIIAAACDAAAAhAAAAIUAAACGAAAAhwAAAIgAAACJAAAAigAAAIsAAACMAAAAjQAAAI4AAACPAAAAkAAAAJEAAACSAAAAkwAAAJQAAACVAAAAlgAAAJcAAACYAAAAmQAAAJoAAACbAAAAnAAAAJ0AAACeAAAAnwAAAKAAAAChAAAAogAAAKMAAACkAAAApQAAAKYAAACnAAAAqAAAAKkAAACqAAAAqwAAAKwAAACtAAAArgAAAK8AAACwAAAAsQAAALIAAACzAAAAtAAAALUAAAC2AAAAtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAANEAAADSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAAC5AAAAugAAALsAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9AAAAvgAAAL8AAADAAAAAwQAAAMIAAADDAAAAxAAAAMUAAADGAAAAxwAAAMgAAADJAAAAygAAAMsAAADOAAAAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0wAAANQAAADVAAAAAAAAANYAAADXAAAA2AAAANkAAADaAAAA2wAAANwAAADdAAAA3gAAAN8AAADgAAAA4QAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBAAAJAQAACgEAAAsBAAAMAQAADQEAAA4BAAAPAQAAEAEAABEBAAASAQAAEwEAABQBAAAVAQAAFgEAABcBAAAYAQAAGQEAABoBAAAbAQAAHAEAAB0BAAAeAQAAHwEAACABAAAhAQAAIgEAACMBAAAkAQAAJQEAAAAAAAAAAAAAAAAAAAAAAAAmAQAAJwEAACgBAAApAQAAKgEAACsBAAAsAQAALQEAAC4BAAAvAQAAMAEAADEBAAAyAQAAAAAAAAAAAAAAAAAAAAAAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAAAAAAAAAAAADoBAAAAAAAAAAAAADsBAAAAAAAAAAAAAAAAAAAAAAAAPAEAAD0BAAA+AQAAPwEAAEABAABBAQAAQgEAAAAAAAAAAAAAQwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAQAARQEAAEYBAAAAAAAAAAAAAEcBAABIAQAASQEAAEoBAABLAQAATAEAAE0BAABOAQAATwEAAAAAAAAAAAAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABbAQAAXAEAAF0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgEAAF8BAABgAQAAYQEAAGIBAABjAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQBAABlAQAAZgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnAQAAaAEAAGkBAABqAQAAawEAAGwBAABtAQAAbgEAAG8BAABwAQAAcQEAAHIBAABzAQAAdAEAAHUBAAB2AQAAdwEAAHgBAAB5AQAAegEAAHsBAAB8AQAAfQEAAH4BAAB/AQAAgAEAAIEBAACCAQAAgwEAAIQBAACFAQAAhgEAAIcBAACIAQAAiQEAAIoBAACLAQAAjAEAAI0BAACOAQAAjwEAAJABAACRAQAAkgEAAJMBAACUAQAAlQEAAJYBAACXAQAAmAEAAJkBAACaAQAAmwEAAJwBAACdAQAAngEAAJ8BAACgAQAAoQEAAKIBAACjAQAApAEAAKUBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAkFAFQJBQBmCQUAdQkFAIYJBQCUCQUAsQkFAM0JBQDZCQUA6wkFAO8JBQD0CQUA+QkFAP0JBQADCgUAxgwFAAoKBQAOCgUAFQoFABwKBQAjCgUAKQoFACsKBQAyCgUAOQoFAD0KBQBECgUASgoFAFAKBQBZCgUAYAoFAGIKBQBpCgUAbwoFAHUKBQB6CgUAfwoFAIUKBQCLCgUAkQoFAJcKBQCdCgUAowoFAKkKBQCtCgUAsQoFAL0KBQDLCgUA1goFAOkKBQD2CgUAAgsFACoNBQAwDQUAMw0FADkNBQB5DQUAvw0FAMQNBQAJCwUADwsFABcLBQAdCwUAJQsFAP0NBQAvCwUAOQsFAD4LBQBCCwUAQA4FAB8OBQBNCwUAUgsFAEsOBQBVDgUAGg4FAFwLBQBoCwUAdAsFAIALBQCMCwUAmAsFAJwLBQB+DgUApQsFAIoOBQDeDQUA0g0FAJgOBQCfDgUArgsFALkLBQDHCwUA1QsFANsLBQBfDgUAcw4FAOYLBQBpDgUA8QsFAPwLBQCSDgUAMg4FAAQMBQAKDAUAFgwFAB0MBQAoDAUAMAwFADkMBQA+DAUAQgwFABEOBQAqDQUAGg4FAB8OBQAiDgUAMg4FADYOBQAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAMDEyMzQ1Njc4OUFCQ0RFRlQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fAAAAAAAAAAAAElsbGVnYWwgYnl0ZSBzZXF1ZW5jZQBEb21haW4gZXJyb3IAUmVzdWx0IG5vdCByZXByZXNlbnRhYmxlAE5vdCBhIHR0eQBQZXJtaXNzaW9uIGRlbmllZABPcGVyYXRpb24gbm90IHBlcm1pdHRlZABObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5AE5vIHN1Y2ggcHJvY2VzcwBGaWxlIGV4aXN0cwBWYWx1ZSB0b28gbGFyZ2UgZm9yIGRhdGEgdHlwZQBObyBzcGFjZSBsZWZ0IG9uIGRldmljZQBPdXQgb2YgbWVtb3J5AFJlc291cmNlIGJ1c3kASW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwAUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUASW52YWxpZCBzZWVrAENyb3NzLWRldmljZSBsaW5rAFJlYWQtb25seSBmaWxlIHN5c3RlbQBEaXJlY3Rvcnkgbm90IGVtcHR5AENvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcgBPcGVyYXRpb24gdGltZWQgb3V0AENvbm5lY3Rpb24gcmVmdXNlZABIb3N0IGlzIGRvd24ASG9zdCBpcyB1bnJlYWNoYWJsZQBBZGRyZXNzIGluIHVzZQBCcm9rZW4gcGlwZQBJL08gZXJyb3IATm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcwBCbG9jayBkZXZpY2UgcmVxdWlyZWQATm8gc3VjaCBkZXZpY2UATm90IGEgZGlyZWN0b3J5AElzIGEgZGlyZWN0b3J5AFRleHQgZmlsZSBidXN5AEV4ZWMgZm9ybWF0IGVycm9yAEludmFsaWQgYXJndW1lbnQAQXJndW1lbnQgbGlzdCB0b28gbG9uZwBTeW1ib2xpYyBsaW5rIGxvb3AARmlsZW5hbWUgdG9vIGxvbmcAVG9vIG1hbnkgb3BlbiBmaWxlcyBpbiBzeXN0ZW0ATm8gZmlsZSBkZXNjcmlwdG9ycyBhdmFpbGFibGUAQmFkIGZpbGUgZGVzY3JpcHRvcgBObyBjaGlsZCBwcm9jZXNzAEJhZCBhZGRyZXNzAEZpbGUgdG9vIGxhcmdlAFRvbyBtYW55IGxpbmtzAE5vIGxvY2tzIGF2YWlsYWJsZQBSZXNvdXJjZSBkZWFkbG9jayB3b3VsZCBvY2N1cgBTdGF0ZSBub3QgcmVjb3ZlcmFibGUAUHJldmlvdXMgb3duZXIgZGllZABPcGVyYXRpb24gY2FuY2VsZWQARnVuY3Rpb24gbm90IGltcGxlbWVudGVkAE5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlAElkZW50aWZpZXIgcmVtb3ZlZABEZXZpY2Ugbm90IGEgc3RyZWFtAE5vIGRhdGEgYXZhaWxhYmxlAERldmljZSB0aW1lb3V0AE91dCBvZiBzdHJlYW1zIHJlc291cmNlcwBMaW5rIGhhcyBiZWVuIHNldmVyZWQAUHJvdG9jb2wgZXJyb3IAQmFkIG1lc3NhZ2UARmlsZSBkZXNjcmlwdG9yIGluIGJhZCBzdGF0ZQBOb3QgYSBzb2NrZXQARGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZABNZXNzYWdlIHRvbyBsYXJnZQBQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQAUHJvdG9jb2wgbm90IGF2YWlsYWJsZQBQcm90b2NvbCBub3Qgc3VwcG9ydGVkAFNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQATm90IHN1cHBvcnRlZABQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZABBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sAEFkZHJlc3Mgbm90IGF2YWlsYWJsZQBOZXR3b3JrIGlzIGRvd24ATmV0d29yayB1bnJlYWNoYWJsZQBDb25uZWN0aW9uIHJlc2V0IGJ5IG5ldHdvcmsAQ29ubmVjdGlvbiBhYm9ydGVkAE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUAU29ja2V0IGlzIGNvbm5lY3RlZABTb2NrZXQgbm90IGNvbm5lY3RlZABDYW5ub3Qgc2VuZCBhZnRlciBzb2NrZXQgc2h1dGRvd24AT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MAT3BlcmF0aW9uIGluIHByb2dyZXNzAFN0YWxlIGZpbGUgaGFuZGxlAFJlbW90ZSBJL08gZXJyb3IAUXVvdGEgZXhjZWVkZWQATm8gbWVkaXVtIGZvdW5kAFdyb25nIG1lZGl1bSB0eXBlAE5vIGVycm9yIGluZm9ybWF0aW9uAAAAAAAACgAAAGQAAADoAwAAECcAAKCGAQBAQg8AgJaYAADh9QUAAAAAAgAAAAMAAAAFAAAABwAAAAsAAAANAAAAEQAAABMAAAAXAAAAHQAAAB8AAAAlAAAAKQAAACsAAAAvAAAANQAAADsAAAA9AAAAQwAAAEcAAABJAAAATwAAAFMAAABZAAAAYQAAAGUAAABnAAAAawAAAG0AAABxAAAAfwAAAIMAAACJAAAAiwAAAJUAAACXAAAAnQAAAKMAAACnAAAArQAAALMAAAC1AAAAvwAAAMEAAADFAAAAxwAAANMAAAABAAAACwAAAA0AAAARAAAAEwAAABcAAAAdAAAAHwAAACUAAAApAAAAKwAAAC8AAAA1AAAAOwAAAD0AAABDAAAARwAAAEkAAABPAAAAUwAAAFkAAABhAAAAZQAAAGcAAABrAAAAbQAAAHEAAAB5AAAAfwAAAIMAAACJAAAAiwAAAI8AAACVAAAAlwAAAJ0AAACjAAAApwAAAKkAAACtAAAAswAAALUAAAC7AAAAvwAAAMEAAADFAAAAxwAAANEAAADIdAQAGXUEAEBUBAAAAAAAyHQEADx1BABQVAQAAAAAAKB0BABedQQAyHQEAIKJBADgXAQAAAAAAMh0BAB8dQQAeFQEAAAAAADIdAQAjnUEAIhUBAAAAAAA8HQEALN1BAAAAAAAAQAAAKBUBAACBAAAoHQEAMB1BADIdAQA6HUEALhUBAAAAAAAyHQEAAt2BACIVAQAAAAAAMh0BAAwdgQA2FQEAAAAAADIdAQASnYEAOhUBAAAAAAA8HQEAH92BAAAAAAAAQAAAABVBAACBAAAoHQEAJR2BADIdAQAMXcEABhVBAAAAAAAyHQEAFF3BADoVAQAAAAAAMh0BACFdwQAOFUEAAAAAADIdAQApXcEAOhUBAAAAAAAyHQEAP93BABYVQQAAAAAAMh0BAApeAQAiFQEAAAAAADIdAQATngEAHhVBAAAAAAAyHQEAGl4BACIVAQAAAAAAMh0BACOeAQAmFUEAAAAAADIdAQApngEAIhUBAAAAAAAyHQEAOV4BACIVAQAAAAAAMh0BAAKeQQAyFUEAAAAAADIdAQAMXkEAIhUBAAAAAAAyHQEAFZ5BADoVQQAAAAAAMh0BAB9eQQAiFQEAAAAAADIdAQAonkEAAhWBAAAAAAAyHQEALJ5BACIVAQAAAAAAMh0BADXeQQAKFYEAAAAAADIdAQA+nkEAIhUBAAAAAAAyHQEAB96BABIVgQAAAAAAMh0BABJegQAiFQEAAAAAADIdAQAbnoEAIhUBAAAAAAAyHQEAJN6BAB4VgQAAAAAAMh0BACzegQAiFQEAAAAAADIdAQA2HoEAJhWBAAAAAAAyHQEAPt6BACIVAQAAAAAAMh0BAAgewQAiFQEAAAAAADIdAQARXsEAIhUBAAAAAAAyHQEAGp7BACIVAQAAAAAAMh0BACPewQAiFQEAAAAAADIdAQAtHsEAIhUBAAAAAAAyHQEANl7BAAIVwQAAAAAAMh0BAD8ewQAiFQEAAAAAADIdAQAIXwEAChXBAAAAAAAyHQEAER8BACIVAQAAAAAAMh0BABpfAQASFcEAAAAAADIdAQAjHwEAIhUBAAAAAAAyHQEALF8BABoVwQAAAAAAMh0BADUfAQAiFQEAAAAAADIdAQA+XwEAIhXBAAAAAAAyHQEABx9BACIVAQAAAAAAMh0BABBfQQAqFcEAAAAAADIdAQAZH0EAIhUBAAAAAAAyHQEAIl9BACIVAQAAAAAAMh0BACufQQAiFQEAAAAAADIdAQA030EAOhXBAAAAAAAyHQEAPZ9BACIVAQAAAAAAMh0BAAbfgQAiFQEAAAAAADIdAQAQH4EAIhUBAAAAAAAyHQEAGV+BAAoWAQAAAAAAMh0BACIfgQAiFQEAAAAAADIdAQArX4EAIhUBAAAAAAAyHQEANJ+BABYWAQAAAAAAMh0BAD8fgQAiFQEAAAAAADIdAQAIX8EAHhYBAAAAAAAyHQEAER/BACIVAQAAAAAAMh0BABpfwQAmFgEAAAAAADIdAQAjH8EAIhUBAAAAAAAyHQEALF/BAC4WAQAAAAAAMh0BADUfwQAiFQEAAAAAADIdAQA+X8EANhYBAAAAAAAyHQEACOABACIVAQAAAAAAMh0BABIgAQA+FgEAAAAAADIdAQAV4AEAIhUBAAAAAAAyHQEAHyABAAYWQQAAAAAAMh0BACfgAQAiFQEAAAAAADIdAQA6IAEAIhUBAAAAAAAyHQEAA2BBABIWQQAAAAAAMh0BAA0gQQAiFQEAAAAAADIdAQAWYEEAGhZBAAAAAAAyHQEAICBBACIVAQAAAAAAMh0BADLgQQAiFkEAAAAAADIdAQA5YEEAIhUBAAAAAAAyHQEAAqCBACoWQQAAAAAAMh0BAAtggQAiFQEAAAAAADIdAQAUoIEAMhZBAAAAAAAyHQEAGeCBACIVAQAAAAAAMh0BACMggQA6FkEAAAAAADIdAQAoYIEAIhUBAAAAAAAyHQEAMaCBAAIWgQAAAAAAMh0BADoggQAiFQEAAAAAADIdAQADIMEAChaBAAAAAAAyHQEAC6DBACIVAQAAAAAAMh0BABSgwQASFoEAAAAAADIdAQAe4MEAIhUBAAAAAAAyHQEAJ+DBABoWgQAAAAAAMh0BADFgwQAiFQEAAAAAADIdAQA6YMEAIhaBAAAAAAAyHQEABKEBACIVAQAAAAAAMh0BAA2hAQAqFoEAAAAAADIdAQAX4QEAIhUBAAAAAAAyHQEAIOEBADIWgQAAAAAAMh0BACshAQAiFQEAAAAAADIdAQA0IQEAOhaBAAAAAAAyHQEAPmEBACIVAQAAAAAAMh0BAAdhQQACFsEAAAAAADIdAQARoUEAIhUBAAAAAAAyHQEAGqFBAAoWwQAAAAAAMh0BACThQQAiFQEAAAAAADIdAQAt4UEAEhbBAAAAAAAyHQEANGFBADoVAQAAAAAAMh0BAAFhgQAaFsEAAAAAADIdAQAIIYEAOhUBAAAAAAAyHQEAFSGBACIWwQAAAAAAMh0BABvhgQA6FQEAAAAAADIdAQAo4YEAKhbBAAAAAAAyHQEAL6GBADoVAQAAAAAAMh0BADyhgQAyFsEAAAAAADIdAQADIcEAOhUBAAAAAAAyHQEAECHBADoWwQAAAAAAMh0BABZhwQA6FQEAAAAAADIdAQAjYcEAAhcBAAAAAAAyHQEAKiHBADoVAQAAAAAAMh0BADrhwQAMFwEAAAAAACgdAQA3IcEAMh0BAAAiAQAKFwEAAAAAADIdAQALIgEAFBcBAAAAAAAyHQEAEKIBAAoXAQAAAAAAMh0BABuiAQAcFwEAAAAAADIdAQAhIgEAChcBAAAAAAAyHQEALCIBACQXAQAAAAAAMh0BADFiAQAKFwEAAAAAADIdAQA8YgEALBcBAAAAAAAyHQEAAWJBAAoXAQAAAAAAMh0BAAxiQQA0FwEAAAAAADIdAQATokEAOhUBAAAAAAAyHQEAKiJBADwXAQAAAAAAKB0BADBiQQAyHQEABORBAAQXQQAAAAAAKB0BABhkAQAoHQEAPSRBADIdAQA0pMEAEBUBAAAAAAAyHQEAJaWBABAXQQAAAAAAKB0BAA2lgQAoHQEAFeXBADIdAQAKpgEAEBdBAAAAAAAoHQEANKXBADIdAQAPZkEAEBUBAAAAAAAyHQEAGGZBACAXQQAAAAAAKB0BAB3mQQAyHQEACaeBABAXQQAAAAAAKB0BAC5nQQAyHQEAF6gBAC4XQQAAAAAAKB0BADinwQAoHQEAAWhBADIdAQA+KIEAFBUBAAAAAAAyHQEADm9BABAVAQAAAAAAMh0BAAfvgQA8F0EAAAAAADIdAQANr4EAABeBAAAAAAAoHQEAGK+BADIdAQAcr4EABheBAAAAAAAyHQEAIy+BAAoXgQAAAAAAKB0BADCvgQAyHQEANi+BABAXgQAAAAAAMh0BAANvwQAKF4EAAAAAADIdAQAQ78EAGBeBAAAAAAAyHQEAHi/BAAoXgQAAAAAAMh0BAC4vwQAgF4EAAAAAADIdAQA0b8EAABeBAAAAAAAyHQEAP2/BACgXgQAAAAAAMh0BAAPwAQAsF4EAAAAAACgdAQAOcAEAMh0BABIwAQAyF4EAAAAAADIdAQAXsAEALBeBAAAAAAAyHQEAIjABADoXgQAAAAAAMh0BAC5wAQAAF4EAAAAAADIdAQA5cAEAAhfBAAAAAAAyHQEABjBBAAAXgQAAAAAAMh0BABEwQQAKF8EAAAAAADIdAQAesEEAABeBAAAAAAAyHQEAKfBBABIXwQAAAAAAMh0BADawQQAAF4EAAAAAADIdAQABsIEAGhfBAAAAAAAyHQEADfCBAAAXgQAAAAAAMh0BABjwgQAiF8EAAAAAADIdAQAlMIEAABeBAAAAAAAyHQEAMDCBACoXwQAAAAAAMh0BADdwgQAAF4EAAAAAADIdAQACcMEAMhfBAAAAAAAyHQEADzDBAAAXgQAAAAAAMh0BABowwQA6F8EAAAAAADIdAQAm8MEAABeBAAAAAAAyHQEAMfDBAAIYAQAAAAAAMh0BAD9wwQAAF4EAAAAAADIdAQAqMQEAFBUBAAAAAAAyHQEAC8JBQDwXAQAAAAAAMh0BACmDwUASGAEAAAAAADIdAQAUw8FAFhgBAAAAAAAoHQEAHQPBQDIdAQAgQ8FADhgBAAAAAAAyHQEAMgPBQA4YAQAAAAAAAAAAAAwVAQACwAAAAwAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAAAAAABYVAQADQAAAA4AAABJAAAACwAAAEoAAAALAAAACwAAAAsAAAAMAAAASwAAAEwAAAALAAAADQAAAE0AAABOAAAADAAAAAwAAAALAAAADQAAAAwAAAAOAAAADgAAAE8AAABQAAAADAAAAA8AAABRAAAAUgAAAA0AAAAQAAAAUwAAAFQAAAANAAAAEQAAAFUAAABWAAAADgAAAFcAAABYAAAAWQAAABIAAABaAAAAWwAAAAsAAAATAAAAXAAAAF0AAAAUAAAAXgAAAF8AAAAOAAAAYAAAAA8AAABhAAAAFQAAAGIAAABjAAAADwAAABAAAAARAAAAZAAAABIAAABlAAAAZgAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAAGcAAABoAAAAaQAAAGoAAAATAAAAFgAAAGsAAAAUAAAAFgAAAGwAAABtAAAAFwAAABgAAAAZAAAAGgAAAG4AAAAVAAAAbwAAAHAAAABxAAAAcgAAABYAAABzAAAAFwAAAHQAAAB1AAAAdgAAAHcAAAAbAAAAeAAAABwAAAAdAAAAeQAAAB4AAAAfAAAAegAAAHsAAAB8AAAAfQAAAH4AAAB/AAAAIAAAACEAAAAiAAAAIwAAACQAAACAAAAAFwAAACUAAAAYAAAAgQAAAIIAAACDAAAAhAAAACYAAACFAAAAJwAAABkAAAAYAAAAGgAAAIYAAACHAAAADAAAAIgAAACJAAAAGQAAAIoAAAAaAAAAiwAAACgAAACMAAAAjQAAABsAAACOAAAAjwAAABwAAACQAAAAKQAAAJEAAACSAAAAKgAAAJMAAAAdAAAAlAAAAB4AAACVAAAAGwAAAB8AAACWAAAAHAAAACAAAAArAAAAlwAAAB0AAAANAAAALAAAAJgAAAAOAAAAmQAAAJoAAAAtAAAAmwAAAJwAAAAhAAAADQAAAA8AAAAQAAAAIgAAABEAAACdAAAAEgAAAJ4AAAAeAAAAnwAAACMAAAAfAAAALgAAAKAAAAChAAAAIAAAAC8AAAAhAAAAJAAAACIAAAAjAAAAJAAAACUAAAAAAAAAaFQEAA8AAAAQAAAAAAAAAKhUBAARAAAAEgAAAAAAAADIVAQAEwAAABQAAAAAAAAACFUEABUAAAAWAAAAAAAAAChVBAAXAAAAGAAAAAAAAABIVQQADwAAABkAAAAAAAAAaFUEAA8AAAAaAAAAAAAAAIhVBAAPAAAAGwAAAAAAAACoVQQADwAAABwAAAAAAAAAuFUEAA8AAAAdAAAAAAAAANhVBAAPAAAAHgAAAAAAAAD4VQQAHwAAACAAAAAAAAAAGFYEACEAAAAiAAAAAAAAADhWBAAPAAAAIwAAAAAAAABYVgQADwAAACQAAAAAAAAAaFYEACUAAAAmAAAAAAAAAIhWBAAnAAAAKAAAAAAAAACoVgQADwAAACkAAAAAAAAAuFYEAA8AAAAqAAAAAAAAAMhWBAAPAAAAKwAAAAAAAADYVgQADwAAACwAAAAAAAAA6FYEAA8AAAAtAAAAAAAAAPhWBAAuAAAALwAAAAAAAAAYVwQAMAAAADEAAAAAAAAAOFcEADIAAAAzAAAAAAAAAFhXBAA0AAAANQAAAAAAAAB4VwQANgAAADcAAAAAAAAAmFcEADgAAAA5AAAAAAAAALhXBAAPAAAAOgAAAAAAAADIVwQADwAAADsAAAAAAAAA2FcEADwAAAA9AAAAAAAAAPhXBAAPAAAAPgAAAAAAAAAIWAQADwAAAD8AAAAAAAAAGFgEAEAAAABBAAAAAAAAADhYBAAPAAAAQgAAAAAAAABIWAQAQwAAAEQAAAAAAAAAaFgEAEUAAABGAAAAAAAAAIhYBABHAAAASAAAAAAAAACoWAQASQAAAEoAAAAAAAAAyFgEAA8AAABLAAAAAAAAAOhYBABMAAAATQAAAAAAAAAIWQQATgAAAE8AAAAAAAAAKFkEAA8AAABQAAAAAAAAADhZBAAPAAAAUQAAAAAAAABYWQQADwAAAFIAAAAAAAAAeFkEAFMAAABUAAAAAAAAAJhZBABVAAAAVgAAAAAAAAC4WQQAVwAAAFgAAAAAAAAA2FkEAFkAAABaAAAAAAAAAPhZBABbAAAAXAAAAAAAAAAYWgQAXQAAAF4AAAAAAAAAOFoEAF8AAABgAAAAAAAAAFhaBAAPAAAAYQAAAAAAAAB4WgQADwAAAGIAAAAAAAAAmFoEAA8AAABjAAAAAAAAALhaBAAPAAAAZAAAAAAAAADYWgQADwAAAGUAAAAAAAAA+FoEAA8AAABmAAAAAAAAABhbBAAPAAAAZwAAAAAAAAA4WwQAaAAAAGkAAAAAAAAAWFsEAGoAAABrAAAAAAAAAHhbBABsAAAAbQAAAAAAAACYWwQAbgAAAG8AAAAAAAAAuFsEAHAAAABxAAAAAAAAANhbBAByAAAAcwAAAAAAAAAYXAQAdAAAAHUAAAAAAAAA+FsEAHYAAAB3AAAAAAAAAChcBAB4AAAAeQAAAAAAAABAXAQAegAAAHsAAAAAAAAAYFwEAHwAAAB9AAAAAAAAAIBcBAB+AAAAfwAAAAAAAACgXAQAgAAAAIEAAAAAAAAAwFwEAIIAAACDAAAAAAAAAPhcBACEAAAAhQAAADAAAAAMAAAAhgAAAIcAAACiAAAAowAAADEAAAAAAAAAGF0EAIgAAACJAAAACwAAAKQAAAClAAAApgAAAKcAAACoAAAAqQAAAKoAAACrAAAAFAAAABUAAAAWAAAAFwAAAKwAAACtAAAArgAAABsAAACvAAAAHQAAALAAAACxAAAAsgAAALMAAAC0AAAAIwAAALUAAAAlAAAAJgAAALYAAAAoAAAAKQAAALcAAAC4AAAAuQAAALoAAAC7AAAAvAAAADAAAAAxAAAAMgAAADMAAAC9AAAAvgAAADYAAAA3AAAAOAAAADkAAAC/AAAAOwAAAMAAAADBAAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAAAAAAAAYF0EAIoAAACLAAAACwAAAMIAAADDAAAAxAAAAMUAAADGAAAAxwAAAMgAAADJAAAAFAAAABUAAAAWAAAAFwAAAMoAAADLAAAAzAAAABsAAADNAAAAHQAAAM4AAADPAAAA0AAAANEAAADSAAAAIwAAANMAAAAlAAAAJgAAANQAAAAoAAAAKQAAANUAAADWAAAA1wAAANgAAADZAAAA2gAAADAAAAAxAAAAMgAAADMAAADbAAAA3AAAADYAAAA3AAAAOAAAADkAAADdAAAAOwAAAN4AAADfAAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAAAAAAAASF0EAIwAAACNAAAAMgAAAA0AAACOAAAAjwAAAAsAAADgAAAAMwAAAAAAAAAoXQQAjAAAAJAAAAA0AAAADgAAAJEAAACSAAAADAAAAOEAAAA1AAAAAAAAAHBdBACTAAAAlAAAACYAAAAnAAAAAAAAAMBdBACVAAAAlgAAAOIAAADjAAAA5AAAAOUAAADmAAAA5wAAAOgAAADpAAAA6gAAAOsAAADsAAAA7QAAAO4AAADvAAAA8AAAAPEAAADyAAAA8wAAAPQAAAD1AAAA9gAAAPcAAAD4AAAA+QAAAPoAAAD7AAAA/AAAAP0AAAD+AAAA/wAAAAABAAABAQAAAgEAAAMBAAAEAQAABQEAAAYBAAAHAQAACAEAAAkBAAAKAQAACwEAAAwBAAANAQAADgEAAA8BAAAQAQAAEQEAABIBAAATAQAAFAEAABUBAAAWAQAAFwEAABgBAAAZAQAAGgEAABsBAAAcAQAAHQEAAB4BAAAfAQAAAAAAAKBdBACXAAAAmAAAADYAAAAPAAAAmQAAAJoAAAAQAAAAIAEAADcAAAAAAAAAiF0EAIwAAACbAAAAOAAAABEAAACcAAAAnQAAAA0AAAAhAQAAOQAAAAAAAADQXQQAngAAAJ8AAAALAAAAIgEAAKUAAACmAAAApwAAAKgAAACpAAAAqgAAACMBAAAUAAAAFQAAABYAAAAXAAAArAAAAK0AAAAkAQAAGwAAAK8AAAAdAAAAsAAAALEAAACyAAAAJQEAALQAAAAjAAAAtQAAACUAAAAmAAAAtgAAACgAAAApAAAAtwAAALgAAAC5AAAAugAAALsAAAC8AAAAMAAAADEAAAAyAAAAMwAAAL0AAAAmAQAANgAAADcAAAA4AAAAOQAAACcBAAA7AAAAwAAAAMEAAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAAAAAADgXQQAoAAAAKEAAAAAAAAAUF4EAKIAAACjAAAAOgAAAAAAAAAwXgQApAAAAKUAAAA7AAAAAAAAAAheBACmAAAApwAAADwAAAAAAAAA2F4EAKgAAACpAAAAAAAAAHBeBACqAAAAqwAAAAAAAACwXgQArAAAAK0AAAAAAAAAuF4EAK4AAACvAAAAAAAAAJBeBACsAAAAsAAAAAAAAAD4XgQAsQAAALIAAAAAAAAAOF8EALMAAAC0AAAAAAAAABhfBAC1AAAAtgAAAAAAAABYXwQAtwAAALgAAAAAAAAAeF8EALkAAAC6AAAAAAAAAJhfBAC7AAAAvAAAAAAAAAC4XwQAvQAAAL4AAAAAAAAA2F8EAL8AAADAAAAAAAAAAPhfBADBAAAAwgAAAAAAAAAYYAQAngAAAMMAAAAoAQAAKQEAACoBAAArAQAALAEAAC0BAAAuAQAALwEAADABAAAxAQAAMgEAADMBAAA0AQAANQEAADYBAAA3AQAAOAEAADkBAAA6AQAAOwEAADwBAAA9AQAAPgEAAD8BAABAAQAAQQEAAEIBAABDAQAARAEAAEUBAABGAQAARwEAAEgBAABJAQAASgEAAEsBAABMAQAATQEAAE4BAABPAQAAUAEAAFEBAABSAQAAUwEAAFQBAABVAQAAVgEAAFcBAABYAQAAWQEAAFoBAABbAQAAXAEAAF0BAABeAQAAXwEAAGABAABhAQAAYgEAAGMBAABkAQAAZQEAAAAAAAAoYAQAxAAAAMUAAABmAQAAEgAAAGcBAAA9AAAAKAAAACUAAAA+AAAAaAEAAGkBAAAPAAAAPwAAAGoBAABrAQAAKQAAABAAAAAOAAAAEQAAAA8AAAASAAAAQAAAAGwBAABtAQAAJgAAAEEAAABuAQAAbwEAACoAAABCAAAAcAEAAHEBAAAnAAAAQwAAAHIBAABzAQAAKwAAAHQBAAB1AQAAdgEAAEQAAAB3AQAAeAEAABMAAABFAAAAeQEAAHoBAABGAAAAewEAAHwBAAAoAAAAfQEAACwAAAB+AQAARwAAAH8BAACAAQAAKQAAACoAAAArAAAAgQEAACwAAACCAQAAgwEAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAAIQBAACFAQAAhgEAAIcBAAAtAAAAMwAAAIgBAAAuAAAASAAAAIkBAACKAQAASQAAAEoAAABLAAAATAAAAIsBAAAvAAAAjAEAAI0BAACOAQAAjwEAADAAAACQAQAANAAAAJEBAACSAQAAkwEAAJQBAABNAAAAlQEAAE4AAABPAAAAlgEAAFAAAABRAAAAlwEAAJgBAACZAQAAmgEAAJsBAACcAQAAUgAAAFMAAABUAAAAVQAAAFYAAACdAQAAMQAAAFcAAAA1AAAAngEAAJ8BAACgAQAAoQEAAFgAAACiAQAAWQAAADYAAAAyAAAANwAAAKMBAACkAQAAFAAAAKUBAACmAQAAMwAAAKcBAAA0AAAAqAEAAFoAAACpAQAAqgEAADgAAACrAQAArAEAADkAAACtAQAAWwAAAK4BAACvAQAAXAAAALABAAA6AAAAsQEAADsAAACyAQAANQAAADwAAACzAQAANgAAAD0AAABdAAAAtAEAADcAAAAVAAAAXgAAALUBAAAWAAAAtgEAALcBAABfAAAAuAEAALkBAAA+AAAAEAAAABcAAAAYAAAAPwAAABkAAAC6AQAAGgAAALsBAAA4AAAAvAEAAEAAAAA5AAAAYAAAAL0BAAC+AQAAOgAAAGEAAAA7AAAAQQAAADwAAAA9AAAAPgAAAEIAAAAFAAAAAAAAAAAAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAQAAAAJ1pBQAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9wiQD/CS8PAAAAADhgBADGAAAAxwAAAMgAAADJAAAAQgAAAAsAAAALAAAACwAAAAAAAABgYAQAxgAAAMoAAADIAAAAyQAAAEIAAAAMAAAADAAAAAwAAAAAAAAAcGAEAMYAAADLAAAAyAAAAMkAAABCAAAADQAAAA0AAAANAAAAPGJpbmFyeT4ATjR3YWJ0MTJfR0xPQkFMX19OXzExMU5hbWVBcHBsaWVyRQBONHdhYnQxMUV4cHJWaXNpdG9yMTFEZWxlZ2F0ZU5vcEUATjR3YWJ0MTFFeHByVmlzaXRvcjhEZWxlZ2F0ZUUATjR3YWJ0OUNvbnN0RXhwckUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTE1RUVFAE40d2FidDRFeHByRQBONHdhYnQxOWludHJ1c2l2ZV9saXN0X2Jhc2VJTlNfNEV4cHJFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUUxOEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMThFRUUATjR3YWJ0MTZFdmVudE1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTEwRUVFAE40d2FidDExTW9kdWxlRmllbGRFAE40d2FidDE5aW50cnVzaXZlX2xpc3RfYmFzZUlOU18xMU1vZHVsZUZpZWxkRUVFAGV4cGVjdGVkIGxvY2FsIG5hbWUgY291bnQgKCV1KSA8PSBsb2NhbCBjb3VudCAoJXUpAGV4cGVjdGVkIGZ1bmN0aW9uIG5hbWUgY291bnQgKCV1KSA8PSBmdW5jdGlvbiBjb3VudCAoJXpkKQBONHdhYnQyMkRhdGFTZWdtZW50TW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFOEVFRQBONHdhYnQyMkVsZW1TZWdtZW50TW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFNkVFRQBhY2Nlc3Npbmcgc3RhY2sgZGVwdGg6ICV1ID49IG1heDogJXpkAE40d2FidDEzTG9hZFN0b3JlRXhwcklMTlNfOEV4cHJUeXBlRTQyRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU0MkVFRQBONHdhYnQxN1NpbWRTaHVmZmxlT3BFeHByRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDFFRUUATjR3YWJ0MTRTaW1kTGFuZU9wRXhwckUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTQwRUVFAHBvcHBpbmcgZW1wdHkgbGFiZWwgc3RhY2sATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTU1RUVFAE40d2FidDEwT3Bjb2RlRXhwcklMTlNfOEV4cHJUeXBlRTUxRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU1MUVFRQBONHdhYnQxME9wY29kZUV4cHJJTE5TXzhFeHByVHlwZUU1NEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNTRFRUUATjR3YWJ0N1RyeUV4cHJFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU1M0VFRQBONHdhYnQ3VmFyRXhwcklMTlNfOEV4cHJUeXBlRTUyRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU1MkVFRQBONHdhYnQxM0xvYWRTdG9yZUV4cHJJTE5TXzhFeHByVHlwZUU0M0VFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDNFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTM5RUVFAE40d2FidDIyUmV0dXJuQ2FsbEluZGlyZWN0RXhwckUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTM4RUVFAE40d2FidDdWYXJFeHBySUxOU184RXhwclR5cGVFMzdFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTM3RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzNkVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMzVFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTMyRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzM0VFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMzRFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0OUVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDlFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0OEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDhFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU1MEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNTBFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0N0VFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDdFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0NkVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDZFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU0NUVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNDVFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTQ0RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzMUVFRQBONHdhYnQ3VmFyRXhwcklMTlNfOEV4cHJUeXBlRTMwRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzMEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjlFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTI4RUVFAE40d2FidDdWYXJFeHBySUxOU184RXhwclR5cGVFMjdFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTI3RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUyNkVFRQBONHdhYnQxM0Jsb2NrRXhwckJhc2VJTE5TXzhFeHByVHlwZUUyNUVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjVFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUUyNEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjRFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUUyM0VFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjNFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUUyMkVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMjJFRUUATjR3YWJ0MTNMb2FkU3RvcmVFeHBySUxOU184RXhwclR5cGVFMjFFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTIxRUVFAE40d2FidDZJZkV4cHJFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUyMEVFRQBONHdhYnQ3VmFyRXhwcklMTlNfOEV4cHJUeXBlRTE5RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUxOUVFRQBlbHNlIGV4cHJlc3Npb24gd2l0aG91dCBtYXRjaGluZyBpZgBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMTdFRUUATjR3YWJ0MTBPcGNvZGVFeHBySUxOU184RXhwclR5cGVFMTZFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTE2RUVFAE40d2FidDEwT3Bjb2RlRXhwcklMTlNfOEV4cHJUeXBlRTE0RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUxNEVFRQBjYXRjaCBleHByZXNzaW9uIHdpdGhvdXQgbWF0Y2hpbmcgdHJ5AE40d2FidDE2Q2FsbEluZGlyZWN0RXhwckUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTEzRUVFAE40d2FidDdWYXJFeHBySUxOU184RXhwclR5cGVFMTJFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTEyRUVFAE40d2FidDExQnJUYWJsZUV4cHJFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUxMUVFRQBONHdhYnQxMUJyT25FeG5FeHByRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMTBFRUUATjR3YWJ0N1ZhckV4cHJJTE5TXzhFeHByVHlwZUU5RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU5RUVFAE40d2FidDdWYXJFeHBySUxOU184RXhwclR5cGVFOEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFOEVFRQBONHdhYnQxM0Jsb2NrRXhwckJhc2VJTE5TXzhFeHByVHlwZUU3RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU3RUVFAE40d2FidDEwT3Bjb2RlRXhwcklMTlNfOEV4cHJUeXBlRTZFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTZFRUUATjR3YWJ0MTNMb2FkU3RvcmVFeHBySUxOU184RXhwclR5cGVFNEVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFNEVFRQBONHdhYnQxM0xvYWRTdG9yZUV4cHJJTE5TXzhFeHByVHlwZUU1RUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUU1RUVFAE40d2FidDEzTG9hZFN0b3JlRXhwcklMTlNfOEV4cHJUeXBlRTJFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTJFRUUATjR3YWJ0MTNMb2FkU3RvcmVFeHBySUxOU184RXhwclR5cGVFMUVFRQBONHdhYnQ5RXhwck1peGluSUxOU184RXhwclR5cGVFMUVFRQBONHdhYnQxM0xvYWRTdG9yZUV4cHJJTE5TXzhFeHByVHlwZUUzRUVFAE40d2FidDlFeHByTWl4aW5JTE5TXzhFeHByVHlwZUUzRUVFAE40d2FidDEzTG9hZFN0b3JlRXhwcklMTlNfOEV4cHJUeXBlRTBFRUUATjR3YWJ0OUV4cHJNaXhpbklMTlNfOEV4cHJUeXBlRTBFRUUATjR3YWJ0MTZTdGFydE1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTlFRUUATjR3YWJ0MTdFeHBvcnRNb2R1bGVGaWVsZEUATjR3YWJ0MTZNb2R1bGVGaWVsZE1peGluSUxOU18xNU1vZHVsZUZpZWxkVHlwZUUzRUVFAE40d2FidDE3R2xvYmFsTW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFMUVFRQBONHdhYnQxN01lbW9yeU1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTdFRUUATjR3YWJ0MTZUYWJsZU1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTVFRUUATjR3YWJ0MTVGdW5jTW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFMEVFRQBONHdhYnQxN0ltcG9ydE1vZHVsZUZpZWxkRQBONHdhYnQxNk1vZHVsZUZpZWxkTWl4aW5JTE5TXzE1TW9kdWxlRmllbGRUeXBlRTJFRUUATjR3YWJ0NkltcG9ydEUATjR3YWJ0MTFFdmVudEltcG9ydEUATjR3YWJ0MTFJbXBvcnRNaXhpbklMTlNfMTJFeHRlcm5hbEtpbmRFNEVFRQBONHdhYnQxMkdsb2JhbEltcG9ydEUATjR3YWJ0MTFJbXBvcnRNaXhpbklMTlNfMTJFeHRlcm5hbEtpbmRFM0VFRQBONHdhYnQxMk1lbW9yeUltcG9ydEUATjR3YWJ0MTFJbXBvcnRNaXhpbklMTlNfMTJFeHRlcm5hbEtpbmRFMkVFRQBONHdhYnQxMVRhYmxlSW1wb3J0RQBONHdhYnQxMUltcG9ydE1peGluSUxOU18xMkV4dGVybmFsS2luZEUxRUVFAE40d2FidDEwRnVuY0ltcG9ydEUATjR3YWJ0MTFJbXBvcnRNaXhpbklMTlNfMTJFeHRlcm5hbEtpbmRFMEVFRQBONHdhYnQxOUZ1bmNUeXBlTW9kdWxlRmllbGRFAE40d2FidDE2TW9kdWxlRmllbGRNaXhpbklMTlNfMTVNb2R1bGVGaWVsZFR5cGVFNEVFRQBONHdhYnQxMl9HTE9CQUxfX05fMTE0QmluYXJ5UmVhZGVySVJFAE40d2FidDE1QmluYXJ5UmVhZGVyTm9wRQBONHdhYnQyMEJpbmFyeVJlYWRlckRlbGVnYXRlRQBwcmVmaXgAbGltaXRzOiBmbGFncwBsaW1pdHM6IGluaXRpYWwAbGltaXRzOiBtYXgAV0FTTV9CSU5BUllfTUFHSUMAV0FTTV9CSU5BUllfVkVSU0lPTgBudW0gdHlwZXMARklYVVAgc2VjdGlvbiBzaXplADsgJXMgJWQKAG51bSBwYXJhbXMAbnVtIHJlc3VsdHMAbnVtIGltcG9ydHMAaW1wb3J0IGhlYWRlcgBudW0gZnVuY3Rpb25zAGZ1bmN0aW9uICV6ZCBzaWduYXR1cmUgaW5kZXgAbnVtIHRhYmxlcwBudW0gbWVtb3JpZXMAbnVtIGdsb2JhbHMAbnVtIGV4cG9ydHMAZXhwb3J0IG5hbWUAZXhwb3J0IGZ1bmMgaW5kZXgAZXhwb3J0IHRhYmxlIGluZGV4AGV4cG9ydCBtZW1vcnkgaW5kZXgAZXhwb3J0IGdsb2JhbCBpbmRleABleHBvcnQgZXZlbnQgaW5kZXgAc3RhcnQgZnVuYyBpbmRleABudW0gZWxlbSBzZWdtZW50cwBlbGVtIHNlZ21lbnQgaGVhZGVyAG51bSBlbGVtIGV4cHJzAGVsZW0gZXhwciBmdW5jdGlvbiBpbmRleABmdW5jdGlvbiBib2R5AGZ1bmMgYm9keSBzaXplIChndWVzcykAbG9jYWwgZGVjbCBjb3VudABGSVhVUCBmdW5jIGJvZHkgc2l6ZQBudW0gZGF0YSBzZWdtZW50cwBkYXRhIHNlZ21lbnQgaGVhZGVyAGRhdGEgc2VnbWVudCBzaXplAG1vZHVsZSBuYW1lIHR5cGUAc3Vic2VjdGlvbiBzaXplIChndWVzcykARklYVVAgc3Vic2VjdGlvbiBzaXplAGZ1bmN0aW9uIG5hbWUgdHlwZQBmdW5jIG5hbWUgJXpkAGxvY2FsIG5hbWUgdHlwZQBudW0gbG9jYWxzAGxvY2FsIG5hbWUgJXpkAGxvY2FsIGluZGV4AG1ldGFkYXRhIHZlcnNpb24Ac3ltYm9sIHRhYmxlAG51bSBzeW1ib2xzAHN5bWJvbCB0eXBlAHN5bWJvbCBmbGFncwBlbGVtZW50IGluZGV4AGdsb2JhbCBuYW1lACVzLiVzAHJlbG9jIHNlY3Rpb24gaW5kZXgAbnVtIHJlbG9jcwByZWxvYyB0eXBlAHJlbG9jIG9mZnNldAByZWxvYyBpbmRleAByZWxvYyBhZGRlbmQAc2VjdGlvbiAiJXMiADsgJXMKAHNlY3Rpb24gc2l6ZSAoZ3Vlc3MpAGN1c3RvbSBzZWN0aW9uIG5hbWUAYWxpZ25tZW50AGJyZWFrIGRlcHRoAG51bSB0YXJnZXRzAGJyZWFrIGRlcHRoIGZvciBkZWZhdWx0AHNpZ25hdHVyZSBpbmRleABpMzIgbGl0ZXJhbABpNjQgbGl0ZXJhbABmMzIgbGl0ZXJhbABmNjQgbGl0ZXJhbAB2MTI4IGxpdGVyYWwAZ2xvYmFsIGluZGV4AG1lbW9yeS5jb3B5IHJlc2VydmVkAGRhdGEuZHJvcCBzZWdtZW50AG1lbW9yeS5maWxsIHJlc2VydmVkAG1lbW9yeS5pbml0IHNlZ21lbnQAbWVtb3J5LmluaXQgcmVzZXJ2ZWQAdGFibGUuY29weSByZXNlcnZlZABlbGVtLmRyb3Agc2VnbWVudAB0YWJsZS5pbml0IHNlZ21lbnQAdGFibGUuaW5pdCByZXNlcnZlZAB0YWJsZS5nZXQgdGFibGUgaW5kZXgAdGFibGUuc2V0IHRhYmxlIGluZGV4AHRhYmxlLmdyb3cgdGFibGUgaW5kZXgAdGFibGUuc2l6ZSB0YWJsZSBpbmRleAB0aHJvdyBldmVudABTaW1kIExhbmUgbGl0ZXJhbABTaW1kIExhbmVbMTZdIGxpdGVyYWwAYmxvY2sgdHlwZSBmdW5jdGlvbiBpbmRleABzZWN0aW9uICIlcyIgKCV1KQB7InNvdXJjZV9maWxlbmFtZSI6IAAsCiAiY29tbWFuZHMiOiBbCgAKACAgewAiJXMiOiAAIiVzIgBsaW5lAGZpbGVuYW1lAGV4cGVjdGVkACIldSIAYXMAdGV4dAB9AF19CgB7AHZhbHVlACIlbGx1IgBtb2R1bGVfdHlwZQBmaWVsZABhcmdzAGFzc2VydF91bmluc3RhbnRpYWJsZQBcdSUwNHgAWk40d2FidDIxV3JpdGVCaW5hcnlTcGVjU2NyaXB0RVBOU182U3RyZWFtRVBOU182U2NyaXB0RU5TXzExc3RyaW5nX3ZpZXdFUzRfUktOU18xOFdyaXRlQmluYXJ5T3B0aW9uc0VQTlN0M19fMjZ2ZWN0b3JJTlNfMjRGaWxlbmFtZU1lbW9yeVN0cmVhbVBhaXJFTlM4XzlhbGxvY2F0b3JJU0FfRUVFRVMxX0UzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpONHdhYnQyMVdyaXRlQmluYXJ5U3BlY1NjcmlwdEVQTlMyXzZTdHJlYW1FUE5TMl82U2NyaXB0RU5TMl8xMXN0cmluZ192aWV3RVM3X1JLTlMyXzE4V3JpdGVCaW5hcnlPcHRpb25zRVBOU182dmVjdG9ySU5TMl8yNEZpbGVuYW1lTWVtb3J5U3RyZWFtUGFpckVOU185YWxsb2NhdG9ySVNDX0VFRUVTNF9FMyRfME5TRF9JU0hfRUVGUzRfUzdfRUVFAE5TdDNfXzIxMF9fZnVuY3Rpb242X19iYXNlSUZQTjR3YWJ0NlN0cmVhbUVOUzJfMTFzdHJpbmdfdmlld0VFRUUARk9SQ0VfQ09MT1IAUl9XQVNNX0ZVTkNUSU9OX0lOREVYX0xFQgBSX1dBU01fVEFCTEVfSU5ERVhfU0xFQgBSX1dBU01fVEFCTEVfSU5ERVhfSTMyAFJfV0FTTV9NRU1PUllfQUREUl9MRUIAUl9XQVNNX01FTU9SWV9BRERSX1NMRUIAUl9XQVNNX01FTU9SWV9BRERSX0kzMgBSX1dBU01fVFlQRV9JTkRFWF9MRUIAUl9XQVNNX0dMT0JBTF9JTkRFWF9MRUIAUl9XQVNNX0ZVTkNUSU9OX09GRlNFVF9JMzIAUl9XQVNNX1NFQ1RJT05fT0ZGU0VUX0kzMgBSX1dBU01fRVZFTlRfSU5ERVhfTEVCAFJfV0FTTV9NRU1PUllfQUREUl9SRUxfU0xFQgBSX1dBU01fVEFCTEVfSU5ERVhfUkVMX1NMRUIAG1sxbQAlZDolZDogABtbMzFtADogABtbMG0AG1szMm0ALndhc20ALndhdAAkZwAkdAAkZgAkVAAkTQAkZQAkZAAkcAAkbAAkTAAkSQAkQgBONHdhYnQxMl9HTE9CQUxfX05fMTEzTmFtZUdlbmVyYXRvckUAQXRvbWljTG9hZABBdG9taWNSbXcAQXRvbWljUm13Q21weGNoZwBBdG9taWNTdG9yZQBBdG9taWNOb3RpZnkAQXRvbWljV2FpdABCaW5hcnkAQmxvY2sAQnIAQnJJZgBCck9uRXhuAEJyVGFibGUAQ2FsbABDYWxsSW5kaXJlY3QAQ29tcGFyZQBDb25zdABDb252ZXJ0AERyb3AAR2xvYmFsR2V0AEdsb2JhbFNldABJZgBMb2FkAExvY2FsR2V0AExvY2FsU2V0AExvY2FsVGVlAExvb3AATWVtb3J5Q29weQBEYXRhRHJvcABNZW1vcnlGaWxsAE1lbW9yeUdyb3cATWVtb3J5SW5pdABNZW1vcnlTaXplAE5vcABSZWZJc051bGwAUmVmTnVsbABSZXRocm93AFJldHVybgBSZXR1cm5DYWxsAFJldHVybkNhbGxJbmRpcmVjdABTZWxlY3QAU2ltZExhbmVPcABTaW1kU2h1ZmZsZU9wAExvYWRTcGxhdABTdG9yZQBUYWJsZUNvcHkARWxlbURyb3AAVGFibGVJbml0AFRhYmxlR2V0AFRhYmxlR3JvdwBUYWJsZVNpemUAVGFibGVTZXQAVGVybmFyeQBUaHJvdwBUcnkAVW5hcnkAVW5yZWFjaGFibGUAKzAAYWxsb2NhAGJyX3VubGVzcwBjYWxsX2hvc3QAZHJvcF9rZWVwADxpbnZhbGlkPgB1bmRlZmluZWQgJXMgdmFyaWFibGUgIiVzIgBaTjR3YWJ0MTJfR0xPQkFMX19OXzExMk5hbWVSZXNvbHZlcjlWaXNpdEZ1bmNFUE5TXzRGdW5jRUUzJF8xAHBhcmFtZXRlcgByZWRlZmluaXRpb24gb2YgJXMgIiVzIgBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fZnVuY0laTjR3YWJ0MTJfR0xPQkFMX19OXzExMk5hbWVSZXNvbHZlcjlWaXNpdEZ1bmNFUE5TMl80RnVuY0VFMyRfMU5TXzlhbGxvY2F0b3JJUzdfRUVGdlJLTlNfNHBhaXJJS05TXzEyYmFzaWNfc3RyaW5nSWNOU18xMWNoYXJfdHJhaXRzSWNFRU5TOF9JY0VFRUVOUzJfN0JpbmRpbmdFRUVTS19FRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZSS05TXzRwYWlySUtOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFTjR3YWJ0N0JpbmRpbmdFRUVTRV9FRUUAWk40d2FidDEyX0dMT0JBTF9fTl8xMTJOYW1lUmVzb2x2ZXIyMkNoZWNrRHVwbGljYXRlQmluZGluZ3NFUEtOU18xMUJpbmRpbmdIYXNoRVBLY0UzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpONHdhYnQxMl9HTE9CQUxfX05fMTEyTmFtZVJlc29sdmVyMjJDaGVja0R1cGxpY2F0ZUJpbmRpbmdzRVBLTlMyXzExQmluZGluZ0hhc2hFUEtjRTMkXzBOU185YWxsb2NhdG9ySVNBX0VFRnZSS05TXzRwYWlySUtOU18xMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU0JfSWNFRUVFTlMyXzdCaW5kaW5nRUVFU05fRUVFAGVsZW0gc2VnbWVudABkYXRhIHNlZ21lbnQAdW5kZWZpbmVkIGxhYmVsIHZhcmlhYmxlICIlcyIATjR3YWJ0MTJfR0xPQkFMX19OXzExMk5hbWVSZXNvbHZlckUATjR3YWJ0MTJNZW1vcnlTdHJlYW1FAE40d2FidDZTdHJlYW1FACUwN3p4OiAAJTAyeAAgIDsgJXMAOyBtb3ZlIGRhdGE6IFslengsICV6eCkgLT4gWyV6eCwgJXp4KQoAYWN0aW9uAGV4cGVjdGVkIDEgcmVzdWx0LCBnb3QgJXpkAHR5cGUgbWlzbWF0Y2ggYXQgJXMuIGdvdCAlcywgZXhwZWN0ZWQgZjMyIG9yIGY2NAB0eXBlIG1pc21hdGNoIGZvciAlcyAldSBvZiAlcy4gZ290ICVzLCBleHBlY3RlZCAlcwBleHBlY3RlZCAlemQgcmVzdWx0cywgZ290ICV6ZAB1bmtub3duIG1vZHVsZQB1bmtub3duIGZ1bmN0aW9uIGV4cG9ydCAiJXMiAG1hbnkAZmV3AHRvbyAlcyBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9uLiBnb3QgJXpkLCBleHBlY3RlZCAlemQAYXJndW1lbnQAdW5rbm93biBnbG9iYWwgZXhwb3J0ICIlcyIAJXMgdmFyaWFibGUgb3V0IG9mIHJhbmdlIChtYXggJXUpAGVsZW0gc2VnbWVudCBvZmZzZXQAZGF0YSBzZWdtZW50IG9mZnNldABmdW5jdGlvbiB0eXBlAEV2ZW50IHNpZ25hdHVyZSBtdXN0IGhhdmUgMCByZXN1bHRzLgBtdWx0aXBsZSByZXN1bHQgdmFsdWVzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgBnbG9iYWwgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbgBtdXRhYmxlIGdsb2JhbHMgY2Fubm90IGJlIGltcG9ydGVkAG11dGFibGUgZ2xvYmFscyBjYW5ub3QgYmUgZXhwb3J0ZWQAb25seSBvbmUgc3RhcnQgZnVuY3Rpb24gYWxsb3dlZABzdGFydCBmdW5jdGlvbiBtdXN0IGJlIG51bGxhcnkAc3RhcnQgZnVuY3Rpb24gbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nAG9ubHkgb25lIG1lbW9yeSBibG9jayBhbGxvd2VkAHBhZ2VzAGluaXRpYWwgJXMgKCVsbHUpIG11c3QgYmUgPD0gKCVsbHUpAG1heCAlcyAoJWxsdSkgbXVzdCBiZSA8PSAoJWxsdSkAbWF4ICVzICglbGx1KSBtdXN0IGJlID49IGluaXRpYWwgJXMgKCVsbHUpAG1lbW9yaWVzIG1heSBub3QgYmUgc2hhcmVkAHNoYXJlZCBtZW1vcmllcyBtdXN0IGhhdmUgbWF4IHNpemVzAG9ubHkgb25lIHRhYmxlIGFsbG93ZWQAZWxlbXMAdGFibGVzIG11c3QgaGF2ZSBhbnlyZWYgdHlwZQB0YWJsZXMgbXVzdCBoYXZlIGFueXJlZiBvciBmdW5jcmVmIHR5cGUAZXhwZWN0ZWQgJXpkICVzcywgZ290ICV6ZABaTjR3YWJ0MTJfR0xPQkFMX19OXzE5VmFsaWRhdG9yMjhDaGVja0R1cGxpY2F0ZUV4cG9ydEJpbmRpbmdzRVBLTlNfNk1vZHVsZUVFMyRfMQByZWRlZmluaXRpb24gb2YgZXhwb3J0ICIlcyIATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk40d2FidDEyX0dMT0JBTF9fTl8xOVZhbGlkYXRvcjI4Q2hlY2tEdXBsaWNhdGVFeHBvcnRCaW5kaW5nc0VQS05TMl82TW9kdWxlRUUzJF8xTlNfOWFsbG9jYXRvcklTOF9FRUZ2UktOU180cGFpcklLTlNfMTJiYXNpY19zdHJpbmdJY05TXzExY2hhcl90cmFpdHNJY0VFTlM5X0ljRUVFRU5TMl83QmluZGluZ0VFRVNMX0VFRQBpbnZhbGlkICVzLCBtdXN0IGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbjsgZWl0aGVyICouY29uc3Qgb3IgZ2xvYmFsLmdldC4AaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBjYW4gb25seSByZWZlcmVuY2UgYW4gaW1wb3J0ZWQgZ2xvYmFsAGluaXRpYWxpemVyIGV4cHJlc3Npb24gY2Fubm90IHJlZmVyZW5jZSBhIG11dGFibGUgZ2xvYmFsAHR5cGUgbWlzbWF0Y2ggYXQgJXMuIGdvdCAlcywgZXhwZWN0ZWQgJXMAWk40d2FidDEyX0dMT0JBTF9fTl8xOVZhbGlkYXRvckMxRVBOU3QzX18yNnZlY3RvcklOU181RXJyb3JFTlMyXzlhbGxvY2F0b3JJUzRfRUVFRVBLTlNfNlNjcmlwdEVSS05TXzE1VmFsaWRhdGVPcHRpb25zRUUzJF8wAE5TdDNfXzIxMF9fZnVuY3Rpb242X19mdW5jSVpONHdhYnQxMl9HTE9CQUxfX05fMTlWYWxpZGF0b3JDMUVQTlNfNnZlY3RvcklOUzJfNUVycm9yRU5TXzlhbGxvY2F0b3JJUzZfRUVFRVBLTlMyXzZTY3JpcHRFUktOUzJfMTVWYWxpZGF0ZU9wdGlvbnNFRTMkXzBOUzdfSVNIX0VFRnZQS2NFRUUATlN0M19fMjEwX19mdW5jdGlvbjZfX2Jhc2VJRnZQS2NFRUUAJXMgcmVxdWlyZXMgYW4gaW1wb3J0ZWQgb3IgZGVmaW5lZCBtZW1vcnkuAGFsaWdubWVudCBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiBuYXR1cmFsIGFsaWdubWVudCAoJXUpACVzIHJlcXVpcmVzIG1lbW9yeSB0byBiZSBzaGFyZWQuAGFsaWdubWVudCBtdXN0IGJlIGVxdWFsIHRvIG5hdHVyYWwgYWxpZ25tZW50ICgldSkAJXMgcGFyYW1zIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgBtdWx0aXBsZSAlcyByZXN1bHRzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLgAlcyByZXF1aXJlcyB0YWJsZSAlZCB0byBiZSBhbiBpbXBvcnRlZCBvciBkZWZpbmVkIHRhYmxlLgBlbGVtX3NlZ21lbnQAZGF0YV9zZWdtZW50AHVuZGVmaW5lZCBsb2NhbCB2YXJpYWJsZSAiJXMiAGxvY2FsIHZhcmlhYmxlIG91dCBvZiByYW5nZSAobWF4ICV1KQBjYW4ndCBnbG9iYWwuc2V0IG9uIGltbXV0YWJsZSBnbG9iYWwgYXQgaW5kZXggJXUuAE40d2FidDEyX0dMT0JBTF9fTl8xOVZhbGlkYXRvckUAdW5leHBlY3RlZCBjaGFyAEVPRiBpbiBibG9jayBjb21tZW50AGY2NC5sdABmMzIubHQAZjY0LmxlAGYzMi5sZQBmNjQuYWJzAGYzMi5hYnMAZjY0LnN1YgBmMzIuc3ViAGk2NC5zdWIAaTMyLnN1YgBpNjQubHRfcwBpMzIubHRfcwBpNjQubHRfdQBpMzIubHRfdQBpNjQubGVfcwBpMzIubGVfcwBpNjQubGVfdQBpMzIubGVfdQBpNjQucmVtX3MAaTMyLnJlbV9zAGk2NC5jdHoAaTMyLmN0egBpNjQucmVtX3UAaTMyLnJlbV91AGY2NC5hZGQAZjMyLmFkZABpNjQuYWRkAGkzMi5hZGQAaTY0LmFuZABpMzIuYW5kAGY2NC5taW4AZjMyLm1pbgBmNjQubmUAZjMyLm5lAGk2NC5uZQBpMzIubmUAaTY0LmNsegBpMzIuY2x6AGY2NC50cnVuYwBmMzIudHJ1bmMAZjY0Lm11bABmMzIubXVsAGk2NC5tdWwAaTMyLm11bABmNjQuY2VpbABmMzIuY2VpbABmNjQuY29uc3QAZjMyLmNvbnN0AGk2NC5jb25zdABpMzIuY29uc3QAaTY0LmRpdl9zAGkzMi5kaXZfcwBpNjQuZGl2X3UAaTMyLmRpdl91AGY2NC5zdG9yZQBmMzIuc3RvcmUAaTY0LnN0b3JlAGkzMi5zdG9yZQBpNjQuc3RvcmUzMgBpNjQucm90bABpMzIucm90bABpNjQucm90cgBpMzIucm90cgBmNjQubG9hZABmMzIubG9hZABpNjQubG9hZABpMzIubG9hZABmNjR4Mi5zdWIAZjY0LmRpdgBmMzIuZGl2AGk2NHgyLnN1YgBpNjQubG9hZDE2X3MAaTMyLmxvYWQxNl9zAGY2NHgyLm5lAGk2NC5sb2FkMTZfdQBpMzIubG9hZDE2X3UAZjY0eDIubHQAZjY0Lm5lYXJlc3QAZjMyLm5lYXJlc3QAZjY0eDIubGUAZjY0eDIubWluAHYxMjgubm90AHNldF9sb2NhbABpNjQuYXRvbWljLnN0b3JlAGkzMi5hdG9taWMuc3RvcmUAdjEyOC5jb25zdAB0ZWVfbG9jYWwAZjY0eDIuYWJzAGk2NC5hdG9taWMud2FpdABpMzIuYXRvbWljLndhaXQAaTY0LmF0b21pYy5zdG9yZTMyAHYxMjguYW5kAHYxMjguYml0c2VsZWN0AGY2NHgyLm11bAB2MTI4LnN0b3JlAHYxMjgub3IAaTY0LmF0b21pYy5ybXc4LnN1Yl91AGkzMi5hdG9taWMucm13OC5zdWJfdQBmNjR4Mi5hZGQAaTY0eDIuYWRkAGk2NC50cnVuY19mMzJfcwBpMzIudHJ1bmNfZjMyX3MAaTY0LnRydW5jX2YzMl91AGkzMi50cnVuY19mMzJfdQBpNjQuYXRvbWljLnJtdzguYWRkX3UAaTMyLmF0b21pYy5ybXc4LmFkZF91AGk2NC5hdG9taWMucm13OC5hbmRfdQBpMzIuYXRvbWljLnJtdzguYW5kX3UAaTY0LmF0b21pYy5ybXczMi5zdWJfdQBpNjQuYXRvbWljLnJtdzMyLmNtcHhjaGdfdQBpNjQuYXRvbWljLmxvYWQAaTMyLmF0b21pYy5sb2FkAGk2NC50cnVuY19zL2YzMgBpMzIudHJ1bmNfcy9mMzIAaTY0LnRydW5jX3UvZjMyAGkzMi50cnVuY191L2YzMgBpNjQubG9hZDMyX3MAdjEyOC5sb2FkAGk2NC5sb2FkMzJfdQBpNjQuYXRvbWljLnJtdy5vcgBpMzIuYXRvbWljLnJtdy5vcgBpNjQuYXRvbWljLnJtdy5zdWIAaTMyLmF0b21pYy5ybXcuc3ViAGk2NC5hdG9taWMucm13LmFkZABpMzIuYXRvbWljLnJtdy5hZGQAaTY0LnRydW5jX2Y2NF9zAGkzMi50cnVuY19mNjRfcwBpNjQudHJ1bmNfZjY0X3UAaTMyLnRydW5jX2Y2NF91AGYzMi5kZW1vdGVfZjY0AGY2NHgyLmRpdgBmMzJ4NC5zdWIAaTMyeDQuc3ViAGk2NC5hdG9taWMucm13MzIuYWRkX3UAZjMyeDQubmUAaTY0LmF0b21pYy5ybXczMi5hbmRfdQBpMzJ4NC5uZQBmMzJ4NC5sdABpNjQudHJ1bmNfcy9mNjQAaTMyLnRydW5jX3MvZjY0AGk2NC50cnVuY191L2Y2NABpMzIudHJ1bmNfdS9mNjQAZjMyLmRlbW90ZS9mNjQAaTY0LmF0b21pYy5ybXcuYW5kAGkzMi5hdG9taWMucm13LmFuZABmMzJ4NC5sZQBmMzJ4NC5taW4AaTMyeDQubHRfcwBpNjQuYXRvbWljLnJtdzMyLm9yX3UAaTMyeDQubHRfdQBpMzJ4NC5sZV9zAGkzMng0LmxlX3UAaTY0eDIuYWxsX3RydWUAZjMyeDQuYWJzAGY2NC5jb252ZXJ0X2kzMl9zAGYzMi5jb252ZXJ0X2kzMl9zAGk2NC5zdG9yZTgAaTMyLnN0b3JlOABmMzJ4NC5tdWwAaTMyeDQubXVsAGYzMng0LmFkZABpMzJ4NC5hZGQAaTY0LmxvYWQ4X3MAaTMyLmxvYWQ4X3MAaTY0LmxvYWQ4X3UAaTMyLmxvYWQ4X3UAZjY0LmNvbnZlcnRfaTY0X3MAZjMyLmNvbnZlcnRfaTY0X3MAZjY0eDIuZ3QAaTY0LmF0b21pYy5sb2FkMTZfdQBpMzIuYXRvbWljLmxvYWQxNl91AGY2NHgyLmdlAGY2NC5jb252ZXJ0X2kzMl91AGYzMi5jb252ZXJ0X2kzMl91AGk2NC5hdG9taWMucm13MTYuc3ViX3UAaTMyLmF0b21pYy5ybXcxNi5zdWJfdQBpNjQuYXRvbWljLnJtdzE2LmNtcHhjaGdfdQBpMzIuYXRvbWljLnJtdzE2LmNtcHhjaGdfdQBpNjQuZXF6AGkzMi5lcXoAaTY0Lm9yAGkzMi5vcgBpNjQudHJ1bmNfc2F0X2YzMl9zAGkzMi50cnVuY19zYXRfZjMyX3MAaTY0LnRydW5jX3NhdF9mMzJfdQBpMzIudHJ1bmNfc2F0X2YzMl91AGYzMng0LmRpdgBmNjQuc3FydABmMzIuc3FydABnZXRfbG9jYWwAaTY0LnN0b3JlMTYAaTMyLnN0b3JlMTYAZjY0LmNvbnZlcnRfaTY0X3UAZjMyLmNvbnZlcnRfaTY0X3UAaTY0LmV4dGVuZF9zL2kzMgBpNjQuZXh0ZW5kX3UvaTMyAGk2NC5hdG9taWMucm13MTYuYWRkX3UAaTMyLmF0b21pYy5ybXcxNi5hZGRfdQBmNjQuZ3QAZjMyLmd0AGk2NC5hdG9taWMucm13MTYuYW5kX3UAaTMyLmF0b21pYy5ybXcxNi5hbmRfdQBpMzJ4NC5hbGxfdHJ1ZQBmNjQuZmxvb3IAZjMyLmZsb29yAGY2NC5nZQBmMzIuZ2UAZjY0LmNvbnZlcnRfcy9pMzIAZjMyLmNvbnZlcnRfcy9pMzIAZjY0LmNvbnZlcnRfdS9pMzIAZjMyLmNvbnZlcnRfdS9pMzIAaTY0LmF0b21pYy5ybXcxNi5vcl91AGkzMi5hdG9taWMucm13MTYub3JfdQBpNjQuZ3RfcwBpMzIuZ3RfcwBpOHgxNi5zdWIAaTY0Lmd0X3UAaTMyLmd0X3UAaTY0LmdlX3MAaTMyLmdlX3MAaTY0LmdlX3UAaTMyLmdlX3UAaTh4MTYubmUAaTY0LmF0b21pYy5sb2FkOF91AGkzMi5hdG9taWMubG9hZDhfdQBpNjQuYXRvbWljLmxvYWQzMl91AGk4eDE2Lmx0X3MAaTh4MTYubHRfdQBpOHgxNi5sZV9zAGk4eDE2LmxlX3UAaTY0LmF0b21pYy5zdG9yZTE2AGkzMi5hdG9taWMuc3RvcmUxNgBpNjQuc2hyX3MAaTMyLnNocl9zAGk2NC5zaHJfdQBpMzIuc2hyX3UAZjY0eDIuc3BsYXQAaTY0LmV4dGVuZDMyX3MAaTY0eDIuc3BsYXQAaTY0LnNobABpMzIuc2hsAGYzMng0Lmd0AGk4eDE2Lm11bABpNjQuZXh0ZW5kX2kzMl9zAGk2NC5leHRlbmRfaTMyX3UAZjMyeDQuZ2UAaTMyeDQuZ3RfcwBpMzJ4NC5ndF91AGkzMng0LmdlX3MAdjEyOC54b3IAaTMyeDQuZ2VfdQBpOHgxNi5hZGQAZjY0eDIuc3FydABpNjQuYXRvbWljLnJtdzMyLnhjaGdfdQBpNjQuYXRvbWljLnJtdzguY21weGNoZ191AGkzMi5hdG9taWMucm13OC5jbXB4Y2hnX3UAZjY0Lm5lZwBmMzIubmVnAGk2NC5leHRlbmQxNl9zAGkzMi5leHRlbmQxNl9zAGk2NC54b3IAaTMyLnhvcgBpNjQuYXRvbWljLnJtdzgub3JfdQBpMzIuYXRvbWljLnJtdzgub3JfdQBpMTZ4OC5zdWIAYW55ZnVuYwBpMTZ4OC5uZQBpNjQudHJ1bmNfc2F0X2Y2NF9zAGkzMi50cnVuY19zYXRfZjY0X3MAaTY0LnRydW5jX3NhdF9mNjRfdQBpMzIudHJ1bmNfc2F0X2Y2NF91AGk2NC5hdG9taWMucm13MzIueG9yX3UAaTE2eDgubHRfcwBpMTZ4OC5sdF91AGkxNng4LmxlX3MAaTE2eDgubGVfdQBpNjQuZXh0ZW5kOF9zAGkzMi5leHRlbmQ4X3MAdjh4MTYuc3dpenpsZQBzZXRfZ2xvYmFsAGk2NHgyLnNocl9zAGk2NHgyLnNocl91AGk4eDE2LnN1Yl9zYXR1cmF0ZV9zAGk4eDE2LnN1Yl9zYXR1cmF0ZV91AGYzMi5yZWludGVycHJldF9pMzIAaTE2eDgubXVsAGk4eDE2LmFsbF90cnVlAGk2NHgyLnNobABpNjQudHJ1bmNfczpzYXQvZjMyAGkzMi50cnVuY19zOnNhdC9mMzIAaTY0LnRydW5jX3U6c2F0L2YzMgBpMzIudHJ1bmNfdTpzYXQvZjMyAGY2NC5jb252ZXJ0X3MvaTY0AGYzMi5jb252ZXJ0X3MvaTY0AGY2NC5jb252ZXJ0X3UvaTY0AGYzMi5jb252ZXJ0X3UvaTY0AGYzMng0LnNwbGF0AGkxNng4LmFkZABpMzJ4NC5zcGxhdABmNjR4Mi5uZWcAaTY0eDIubmVnAGYzMi5yZWludGVycHJldC9pMzIAZjY0eDIuZXh0cmFjdF9sYW5lAGk2NHgyLmxvYWRfc3BsYXQAaTY0eDIuZXh0cmFjdF9sYW5lAGY2NC5wcm9tb3RlX2YzMgBmNjQucmVpbnRlcnByZXRfaTY0AGYzMng0LnNxcnQAaTY0LnRydW5jX3M6c2F0L2Y2NABpMzIudHJ1bmNfczpzYXQvZjY0AGk2NC50cnVuY191OnNhdC9mNjQAaTMyLnRydW5jX3U6c2F0L2Y2NABpOHgxNi5hZGRfc2F0dXJhdGVfcwBpOHgxNi5hZGRfc2F0dXJhdGVfdQBpNjR4Mi50cnVuY19zYXRfZjY0eDJfcwBpNjR4Mi50cnVuY19zYXRfZjY0eDJfdQBmNjQucHJvbW90ZS9mMzIAZjY0LnJlaW50ZXJwcmV0L2k2NABmNjQubWF4AGYzMi5tYXgAaTY0LmF0b21pYy5ybXcxNi54Y2hnX3UAaTMyLmF0b21pYy5ybXcxNi54Y2hnX3UAaTh4MTYuZ3RfcwBmNjR4Mi5yZXBsYWNlX2xhbmUAaTh4MTYuZ3RfdQBpNjR4Mi5yZXBsYWNlX2xhbmUAaTh4MTYuZ2VfcwBpOHgxNi5nZV91AGk2NHgyLmFueV90cnVlAGk2NC5hdG9taWMucm13OC54b3JfdQBpMzIuYXRvbWljLnJtdzgueG9yX3UAaTE2eDguc3ViX3NhdHVyYXRlX3MAaTE2eDguc3ViX3NhdHVyYXRlX3UAZjY0LmVxAGYzMi5lcQBpMTZ4OC5hbGxfdHJ1ZQBpNjQuZXEAaTMyLmVxAGk2NC5hdG9taWMucm13MTYueG9yX3UAaTMyLmF0b21pYy5ybXcxNi54b3JfdQBpMzJ4NC5zaHJfcwBpMzJ4NC5zaHJfdQBpMzJ4NC5zaGwAaTMyeDQudHJ1bmNfc2F0X2YzMng0X3MAaTMyeDQudHJ1bmNfc2F0X2YzMng0X3UAaTY0LmF0b21pYy5zdG9yZTgAaTMyLmF0b21pYy5zdG9yZTgAZjMyeDQubmVnAGkzMng0Lm5lZwBpNjQucG9wY250AGkzMi5wb3BjbnQAZjMyeDQuZXh0cmFjdF9sYW5lAGkzMng0LmxvYWRfc3BsYXQAaTMyeDQuZXh0cmFjdF9sYW5lAGkxNng4LmFkZF9zYXR1cmF0ZV9zAGkxNng4LmFkZF9zYXR1cmF0ZV91AGY2NHgyLm1heABpMTZ4OC5ndF9zAGkxNng4Lmd0X3UAaTE2eDguZ2VfcwBpMTZ4OC5nZV91AGk4eDE2LnNwbGF0AGYzMng0LnJlcGxhY2VfbGFuZQBpMzJ4NC5yZXBsYWNlX2xhbmUAaTMyeDQuYW55X3RydWUAZ2V0X2dsb2JhbABmNjR4Mi5lcQBpMzIucmVpbnRlcnByZXRfZjMyAGkzMi5yZWludGVycHJldC9mMzIAaTY0LmF0b21pYy5ybXcueG9yAGkzMi5hdG9taWMucm13LnhvcgBiaW5hcnkAaTY0LnJlaW50ZXJwcmV0X2Y2NABpMzIud3JhcF9pNjQAaTh4MTYuc2hyX3MAaTh4MTYuc2hyX3UAaTE2eDguc3BsYXQAaTY0LnJlaW50ZXJwcmV0L2Y2NABmMzJ4NC5tYXgAaTh4MTYuc2hsAGkzMi53cmFwL2k2NABmMzJ4NC5jb252ZXJ0X2kzMng0X3MAZjMyeDQuY29udmVydF9pMzJ4NF91AGk4eDE2Lm5lZwBpOHgxNi5sb2FkX3NwbGF0AGk4eDE2LmV4dHJhY3RfbGFuZV9zAGk4eDE2LmV4dHJhY3RfbGFuZV91AGYzMng0LmVxAGkzMng0LmVxAGY2NHgyLmNvbnZlcnRfaTY0eDJfcwBmNjR4Mi5jb252ZXJ0X2k2NHgyX3UAaTh4MTYucmVwbGFjZV9sYW5lAGk4eDE2LmFueV90cnVlAGkxNng4LnNocl9zAGkxNng4LnNocl91AGkxNng4LnNobABjdXJyZW50X21lbW9yeQBpMTZ4OC5uZWcAaTE2eDgubG9hZF9zcGxhdABpNjQuYXRvbWljLnJtdzgueGNoZ191AGkzMi5hdG9taWMucm13OC54Y2hnX3UAaTE2eDguZXh0cmFjdF9sYW5lX3MAaTE2eDguZXh0cmFjdF9sYW5lX3UAYXRvbWljLm5vdGlmeQBpNjQuYXRvbWljLnJtdy5jbXB4Y2hnAGkzMi5hdG9taWMucm13LmNtcHhjaGcAaTE2eDgucmVwbGFjZV9sYW5lAGkxNng4LmFueV90cnVlAGY2NC5jb3B5c2lnbgBmMzIuY29weXNpZ24AaTh4MTYuZXEAZ3Jvd19tZW1vcnkAaTE2eDguZXEAaTY0LmF0b21pYy5ybXcueGNoZwBpMzIuYXRvbWljLnJtdy54Y2hnAG5ld2xpbmUgaW4gc3RyaW5nAGJhZCBlc2NhcGUgIiUuKnMiAGFubm90YXRpb25zIG5vdCBlbmFibGVkOiAlcwB1bmV4cGVjdGVkIHRva2VuICVzLCBleHBlY3RlZCAlcy4AdW5leHBlY3RlZCB0b2tlbiAlcy4Ab3Bjb2RlIG5vdCBhbGxvd2VkOiAlcwAgb3IgACAoZS5nLiAAdW5leHBlY3RlZCB0b2tlbiAiJXMiJXMuAGludmFsaWQgaW50ICIlLipzIgBhIG51bWVyaWMgaW5kZXgAYSBuYW1lADEyIG9yICRmb28AYW4gb2Zmc2V0IGV4cHIAKGkzMi5jb25zdCAxMjMpAGFuIGV4cHIAdGhlbiBibG9jawAodGhlbiAuLi4pAHVuZXhwZWN0ZWQgbGFiZWwgIiVzIgBtaXNtYXRjaGluZyBsYWJlbCAiJXMiICE9ICIlcyIAYSBuYXR1cmFsIG51bWJlciBpbiByYW5nZSBbMCwgMzIpAGludmFsaWQgbGl0ZXJhbCAiJS4qcyIAc2h1ZmZsZSBpbmRleCAiJS4qcyIgb3V0LW9mLXJhbmdlIFswLCAzMikAYSBuYXR1cmFsIG51bWJlcgAxMjMAYSBudW1lcmljIGxpdGVyYWwAMTIzLCAtNDUsIDYuN2U4AFVuZXhwZWN0ZWQgdHlwZSBhdCBzdGFydCBvZiBzaW1kIGNvbnN0YW50LiBFeHBlY3RlZCBvbmUgb2Y6IGk4eDE2LCBpMTZ4OCwgaTMyeDQsIGk2NHgyLCBmMzJ4NCwgZjY0eDIuIEZvdW5kICIlcyIuAGEgTmF0IG9yIEludGVnZXIgbGl0ZXJhbABhIEZsb2F0IGxpdGVyYWwANDIuMABpbnZhbGlkIGFsaWdubWVudCAiJS4qcyIAYWxpZ25tZW50IG11c3QgYmUgcG93ZXItb2YtdHdvAGludmFsaWQgb2Zmc2V0ICIlLipzIgBvZmZzZXQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMHhmZmZmZmZmZgB2YWx1ZSB0eXBlIG5vdCBhbGxvd2VkOiAlcwBhIHF1b3RlZCBzdHJpbmcAImZvbyIAcXVvdGVkIHN0cmluZyBoYXMgYW4gaW52YWxpZCB1dGYtOCBlbmNvZGluZwBhIG1vZHVsZSBmaWVsZABONHdhYnQxMl9HTE9CQUxfX05fMTM1UmVzb2x2ZUZ1bmNUeXBlc0V4cHJWaXNpdG9yRGVsZWdhdGVFAGltcG9ydHMgbXVzdCBvY2N1ciBiZWZvcmUgYWxsIG5vbi1pbXBvcnQgZGVmaW5pdGlvbnMAYW4gZXh0ZXJuYWwga2luZAA8dGV4dD4AZXJyb3IgaW4gYmluYXJ5IG1vZHVsZTogJXMAZXJyb3IgaW4gYmluYXJ5IG1vZHVsZTogQDB4JTA4eng6ICVzAGEgYmluYXJ5IG1vZHVsZQBhIHRleHQgbW9kdWxlAE40d2FidDEzTW9kdWxlQ29tbWFuZEUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFMEVFRQBONHdhYnQ3Q29tbWFuZEUATjR3YWJ0MTZUZXh0U2NyaXB0TW9kdWxlRQBONHdhYnQxN1NjcmlwdE1vZHVsZU1peGluSUxOU18xNlNjcmlwdE1vZHVsZVR5cGVFMEVFRQBONHdhYnQxMlNjcmlwdE1vZHVsZUUATjR3YWJ0MTZEYXRhU2NyaXB0TW9kdWxlSUxOU18xNlNjcmlwdE1vZHVsZVR5cGVFMkVFRQBONHdhYnQxN1NjcmlwdE1vZHVsZU1peGluSUxOU18xNlNjcmlwdE1vZHVsZVR5cGVFMkVFRQBONHdhYnQxNkRhdGFTY3JpcHRNb2R1bGVJTE5TXzE2U2NyaXB0TW9kdWxlVHlwZUUxRUVFAE40d2FidDE3U2NyaXB0TW9kdWxlTWl4aW5JTE5TXzE2U2NyaXB0TW9kdWxlVHlwZUUxRUVFAGEgY29tbWFuZABONHdhYnQxNVJlZ2lzdGVyQ29tbWFuZEUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFMkVFRQBONHdhYnQ5R2V0QWN0aW9uRQBONHdhYnQxMUFjdGlvbk1peGluSUxOU18xMEFjdGlvblR5cGVFMUVFRQBONHdhYnQ2QWN0aW9uRQBONHdhYnQxMkludm9rZUFjdGlvbkUATjR3YWJ0MTFBY3Rpb25NaXhpbklMTlNfMTBBY3Rpb25UeXBlRTBFRUUATjR3YWJ0MTdBY3Rpb25Db21tYW5kQmFzZUlMTlNfMTFDb21tYW5kVHlwZUUxRUVFAE40d2FidDEyQ29tbWFuZE1peGluSUxOU18xMUNvbW1hbmRUeXBlRTFFRUUATjR3YWJ0MTlBc3NlcnRNb2R1bGVDb21tYW5kSUxOU18xMUNvbW1hbmRUeXBlRTVFRUUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFNUVFRQBONHdhYnQyMUFzc2VydFRyYXBDb21tYW5kQmFzZUlMTlNfMTFDb21tYW5kVHlwZUUxMEVFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUUxMEVFRQBONHdhYnQxOUFzc2VydE1vZHVsZUNvbW1hbmRJTE5TXzExQ29tbWFuZFR5cGVFNkVFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUU2RUVFAE40d2FidDE3QWN0aW9uQ29tbWFuZEJhc2VJTE5TXzExQ29tbWFuZFR5cGVFOEVFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUU4RUVFAE40d2FidDE3QWN0aW9uQ29tbWFuZEJhc2VJTE5TXzExQ29tbWFuZFR5cGVFOUVFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUU5RUVFAE40d2FidDE5QXNzZXJ0UmV0dXJuQ29tbWFuZEUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFN0VFRQBONHdhYnQxOUFzc2VydE1vZHVsZUNvbW1hbmRJTE5TXzExQ29tbWFuZFR5cGVFM0VFRQBONHdhYnQxMkNvbW1hbmRNaXhpbklMTlNfMTFDb21tYW5kVHlwZUUzRUVFAE40d2FidDE5QXNzZXJ0TW9kdWxlQ29tbWFuZElMTlNfMTFDb21tYW5kVHlwZUU0RUVFAE40d2FidDEyQ29tbWFuZE1peGluSUxOU18xMUNvbW1hbmRUeXBlRTRFRUUATjR3YWJ0MjFBc3NlcnRUcmFwQ29tbWFuZEJhc2VJTE5TXzExQ29tbWFuZFR5cGVFMTFFRUUATjR3YWJ0MTJDb21tYW5kTWl4aW5JTE5TXzExQ29tbWFuZFR5cGVFMTFFRUUAKDsldTspACVsbHUAb2Zmc2V0PSV1AGFsaWduPSV1ACAldQAgOzsgbGFiZWwgPSBAJXUAJWxsZAAoOz0lZzspAGkzMng0IDB4JTA4eCAweCUwOHggMHglMDh4IDB4JTA4eAAldSAoO0AldTspACV1ICg7IElOVkFMSUQgOykATjR3YWJ0MTJfR0xPQkFMX19OXzE5V2F0V3JpdGVyMTlFeHByVmlzaXRvckRlbGVnYXRlRQBJbnZhbGlkIE9wY29kZSBmb3IgZXhwciB0eXBlOiAlcwoAYmFkIGV4cHIgdHlwZTogJXMKAERhdGEAQ29kZQBEYXRhQ291bnQARWxlbQBTdGFydABFeHBvcnQARXZlbnQAR2xvYmFsAE1lbW9yeQBUYWJsZQBGdW5jdGlvbgBJbXBvcnQAVHlwZQBDdXN0b20AbWFnaWMAdWludDMyX3QAdW5hYmxlIHRvIHJlYWQgJXM6ICVzAGJhZCBtYWdpYyB2YWx1ZQB2ZXJzaW9uAGJhZCB3YXNtIGZpbGUgdmVyc2lvbjogJSN4IChleHBlY3RlZCAlI3gpAEJlZ2luTW9kdWxlIGNhbGxiYWNrIGZhaWxlZABmdW5jdGlvbiBzaWduYXR1cmUgY291bnQgIT0gZnVuY3Rpb24gYm9keSBjb3VudABFbmRNb2R1bGUgY2FsbGJhY2sgZmFpbGVkAHNlY3Rpb24gY29kZQB1bmFibGUgdG8gcmVhZCB1MzIgbGViMTI4OiAlcwBzZWN0aW9uIHNpemUAaW52YWxpZCBzZWN0aW9uIGNvZGU6ICV1AGludmFsaWQgc2VjdGlvbiBzaXplOiBleHRlbmRzIHBhc3QgZW5kAHNlY3Rpb24gJXMgb3V0IG9mIG9yZGVyACVzIHNlY3Rpb24gY2FuIG5vdCBvY2N1ciBhZnRlciBOYW1lIHNlY3Rpb24AQmVnaW5TZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABzZWN0aW9uIG5hbWUAQmVnaW5DdXN0b21TZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABuYW1lAEJlZ2luTmFtZXNTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABuYW1lIHR5cGUAZHVwbGljYXRlIHN1Yi1zZWN0aW9uAG91dC1vZi1vcmRlciBzdWItc2VjdGlvbgBzdWJzZWN0aW9uIHNpemUAaW52YWxpZCBzdWItc2VjdGlvbiBzaXplOiBleHRlbmRzIHBhc3QgZW5kAE9uTW9kdWxlTmFtZVN1YnNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAG1vZHVsZSBuYW1lAE9uTW9kdWxlTmFtZSBjYWxsYmFjayBmYWlsZWQAT25GdW5jdGlvbk5hbWVTdWJzZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABuYW1lIGNvdW50AGludmFsaWQgJXMgJXUsIG9ubHkgJXpkIGJ5dGVzIGxlZnQgaW4gc2VjdGlvbgBPbkZ1bmN0aW9uTmFtZXNDb3VudCBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gaW5kZXgAZHVwbGljYXRlIGZ1bmN0aW9uIG5hbWU6ICV1AGZ1bmN0aW9uIGluZGV4IG91dCBvZiBvcmRlcjogJXUAaW52YWxpZCBmdW5jdGlvbiBpbmRleDogJXUAZnVuY3Rpb24gbmFtZQBPbkZ1bmN0aW9uTmFtZSBjYWxsYmFjayBmYWlsZWQAT25Mb2NhbE5hbWVTdWJzZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABmdW5jdGlvbiBjb3VudABPbkxvY2FsTmFtZUZ1bmN0aW9uQ291bnQgY2FsbGJhY2sgZmFpbGVkAGxvY2FscyBmdW5jdGlvbiBpbmRleCBvdXQgb2Ygb3JkZXI6ICV1AGxvY2FsIGNvdW50AE9uTG9jYWxOYW1lTG9jYWxDb3VudCBjYWxsYmFjayBmYWlsZWQAbmFtZWQgaW5kZXgAZHVwbGljYXRlIGxvY2FsIGluZGV4OiAldQBsb2NhbCBpbmRleCBvdXQgb2Ygb3JkZXI6ICV1AE9uTG9jYWxOYW1lIGNhbGxiYWNrIGZhaWxlZAB1bmZpbmlzaGVkIHN1Yi1zZWN0aW9uIChleHBlY3RlZCBlbmQ6IDB4JXp4KQBFbmROYW1lc1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGR5bGluawBCZWdpbkR5bGlua1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAG1lbV9zaXplAG1lbV9hbGlnbgB0YWJsZV9zaXplAHRhYmxlX2FsaWduAE9uRHlsaW5rSW5mbyBjYWxsYmFjayBmYWlsZWQAbmVlZGVkX2R5bmxpYnMAT25EeWxpbmtOZWVkZWRDb3VudCBjYWxsYmFjayBmYWlsZWQAZHlsaWIgc29fbmFtZQBPbkR5bGlua05lZWRlZCBjYWxsYmFjayBmYWlsZWQARW5kRHlsaW5rU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAcmVsb2MAQmVnaW5SZWxvY1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAHNlY3Rpb24gaW5kZXgAcmVsb2NhdGlvbiBjb3VudABPblJlbG9jQ291bnQgY2FsbGJhY2sgZmFpbGVkAHJlbG9jYXRpb24gdHlwZQBpbmRleABhZGRlbmQAdW5hYmxlIHRvIHJlYWQgaTMyIGxlYjEyODogJXMAT25SZWxvYyBjYWxsYmFjayBmYWlsZWQARW5kUmVsb2NTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABsaW5raW5nAEJlZ2luTGlua2luZ1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGludmFsaWQgbGlua2luZyBtZXRhZGF0YSB2ZXJzaW9uOiAldQBzeW0gY291bnQAT25TeW1ib2xDb3VudCBjYWxsYmFjayBmYWlsZWQAc3ltIHR5cGUAc3ltIGZsYWdzAE9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABzeW1ib2wgbmFtZQBPbkZ1bmN0aW9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABPbkdsb2JhbFN5bWJvbCBjYWxsYmFjayBmYWlsZWQAT25FdmVudFN5bWJvbCBjYWxsYmFjayBmYWlsZWQAc2VnbWVudABzaXplAE9uRGF0YVN5bWJvbCBjYWxsYmFjayBmYWlsZWQAT25TZWN0aW9uU3ltYm9sIGNhbGxiYWNrIGZhaWxlZABpbmZvIGNvdW50AE9uU2VnbWVudEluZm9Db3VudCBjYWxsYmFjayBmYWlsZWQAc2VnbWVudCBuYW1lAHNlZ21lbnQgYWxpZ25tZW50AHNlZ21lbnQgZmxhZ3MAT25TZWdtZW50SW5mbyBjYWxsYmFjayBmYWlsZWQAT25Jbml0RnVuY3Rpb25Db3VudCBjYWxsYmFjayBmYWlsZWQAcHJpb3JpdHkAT25Jbml0RnVuY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGNvdW50AE9uQ29tZGF0Q291bnQgY2FsbGJhY2sgZmFpbGVkAGNvbWRhdCBuYW1lAGZsYWdzAGVudHJ5IGNvdW50AE9uQ29tZGF0QmVnaW4gY2FsbGJhY2sgZmFpbGVkAGtpbmQAT25Db21kYXRFbnRyeSBjYWxsYmFjayBmYWlsZWQARW5kTGlua2luZ1NlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEVuZEN1c3RvbVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luVHlwZVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAHR5cGUgY291bnQAT25UeXBlQ291bnQgY2FsbGJhY2sgZmFpbGVkAHR5cGUgZm9ybQAtAHVuZXhwZWN0ZWQgdHlwZSBmb3JtIChnb3QgJXMlI3gpAGZ1bmN0aW9uIHBhcmFtIGNvdW50AGZ1bmN0aW9uIHBhcmFtIHR5cGUAZXhwZWN0ZWQgdmFsaWQgcGFyYW0gdHlwZSAoZ290ICVzJSN4KQBmdW5jdGlvbiByZXN1bHQgY291bnQAcmVzdWx0IGNvdW50IG11c3QgYmUgMCBvciAxAGZ1bmN0aW9uIHJlc3VsdCB0eXBlAGV4cGVjdGVkIHZhbGlkIHJlc3VsdCB0eXBlIChnb3QgJXMlI3gpAE9uVHlwZSBjYWxsYmFjayBmYWlsZWQARW5kVHlwZVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luSW1wb3J0U2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAaW1wb3J0IGNvdW50AE9uSW1wb3J0Q291bnQgY2FsbGJhY2sgZmFpbGVkAGltcG9ydCBtb2R1bGUgbmFtZQBpbXBvcnQgZmllbGQgbmFtZQBpbXBvcnQga2luZAB1aW50OF90AGltcG9ydCBzaWduYXR1cmUgaW5kZXgAaW52YWxpZCBpbXBvcnQgc2lnbmF0dXJlIGluZGV4AE9uSW1wb3J0IGNhbGxiYWNrIGZhaWxlZABPbkltcG9ydEZ1bmMgY2FsbGJhY2sgZmFpbGVkAE9uSW1wb3J0VGFibGUgY2FsbGJhY2sgZmFpbGVkAE9uSW1wb3J0TWVtb3J5IGNhbGxiYWNrIGZhaWxlZABPbkltcG9ydEdsb2JhbCBjYWxsYmFjayBmYWlsZWQAaW52YWxpZCBpbXBvcnQgZXZlbnQga2luZDogZXhjZXB0aW9ucyBub3QgYWxsb3dlZABPbkltcG9ydEV2ZW50IGNhbGxiYWNrIGZhaWxlZABFbmRJbXBvcnRTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpbkZ1bmN0aW9uU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gc2lnbmF0dXJlIGNvdW50AE9uRnVuY3Rpb25Db3VudCBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gc2lnbmF0dXJlIGluZGV4AGludmFsaWQgZnVuY3Rpb24gc2lnbmF0dXJlIGluZGV4OiAldQBPbkZ1bmN0aW9uIGNhbGxiYWNrIGZhaWxlZABFbmRGdW5jdGlvblNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luVGFibGVTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZAB0YWJsZSBjb3VudAB0YWJsZSBjb3VudCAoJXUpIG11c3QgYmUgMCBvciAxAE9uVGFibGVDb3VudCBjYWxsYmFjayBmYWlsZWQAT25UYWJsZSBjYWxsYmFjayBmYWlsZWQARW5kVGFibGVTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpbk1lbW9yeVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAG1lbW9yeSBjb3VudABtZW1vcnkgY291bnQgbXVzdCBiZSAwIG9yIDEAT25NZW1vcnlDb3VudCBjYWxsYmFjayBmYWlsZWQAT25NZW1vcnkgY2FsbGJhY2sgZmFpbGVkAEVuZE1lbW9yeVNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luR2xvYmFsU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAZ2xvYmFsIGNvdW50AE9uR2xvYmFsQ291bnQgY2FsbGJhY2sgZmFpbGVkAEJlZ2luR2xvYmFsIGNhbGxiYWNrIGZhaWxlZABCZWdpbkdsb2JhbEluaXRFeHByIGNhbGxiYWNrIGZhaWxlZABFbmRHbG9iYWxJbml0RXhwciBjYWxsYmFjayBmYWlsZWQARW5kR2xvYmFsIGNhbGxiYWNrIGZhaWxlZABFbmRHbG9iYWxTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpbkV4cG9ydFNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGV4cG9ydCBjb3VudABPbkV4cG9ydENvdW50IGNhbGxiYWNrIGZhaWxlZABleHBvcnQgaXRlbSBuYW1lAGV4cG9ydCBraW5kAGludmFsaWQgZXhwb3J0IGV4dGVybmFsIGtpbmQ6ICVkAGV4cG9ydCBpdGVtIGluZGV4AGludmFsaWQgZXhwb3J0IGZ1bmMgaW5kZXg6ICV1AGludmFsaWQgZXhwb3J0IHRhYmxlIGluZGV4OiAldQBpbnZhbGlkIGV4cG9ydCBtZW1vcnkgaW5kZXg6ICV1AGludmFsaWQgZXhwb3J0IGdsb2JhbCBpbmRleDogJXUAaW52YWxpZCBleHBvcnQgZXZlbnQga2luZDogZXhjZXB0aW9ucyBub3QgYWxsb3dlZABpbnZhbGlkIGV4cG9ydCBldmVudCBpbmRleDogJXUAT25FeHBvcnQgY2FsbGJhY2sgZmFpbGVkAEVuZEV4cG9ydFNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEJlZ2luU3RhcnRTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABzdGFydCBmdW5jdGlvbiBpbmRleABpbnZhbGlkIHN0YXJ0IGZ1bmN0aW9uIGluZGV4OiAldQBPblN0YXJ0RnVuY3Rpb24gY2FsbGJhY2sgZmFpbGVkAEVuZFN0YXJ0U2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAQmVnaW5FbGVtU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAZWxlbSBzZWdtZW50IGNvdW50AE9uRWxlbVNlZ21lbnRDb3VudCBjYWxsYmFjayBmYWlsZWQAZWxlbSBzZWN0aW9uIHdpdGhvdXQgdGFibGUgc2VjdGlvbgBlbGVtIHNlZ21lbnQgZmxhZ3MAaW52YWxpZCBlbGVtIHNlZ21lbnQgZmxhZ3MAZWxlbSBzZWdtZW50IHRhYmxlIGluZGV4AHRhYmxlIGVsZW0gdHlwZQBzZWdtZW50IGVsZW0gdHlwZSBtdXN0IGJ5IGZ1bmNyZWYgb3IgYW55cmVmAEJlZ2luRWxlbVNlZ21lbnQgY2FsbGJhY2sgZmFpbGVkAEJlZ2luRWxlbVNlZ21lbnRJbml0RXhwciBjYWxsYmFjayBmYWlsZWQARW5kRWxlbVNlZ21lbnRJbml0RXhwciBjYWxsYmFjayBmYWlsZWQAZWxlbSBleHByIGNvdW50AE9uRWxlbVNlZ21lbnRFbGVtRXhwckNvdW50IGNhbGxiYWNrIGZhaWxlZABlbGVtIGV4cHIgb3Bjb2RlAGVsZW0gZXhwciBmdW5jIGluZGV4AGV4cGVjdGVkIHJlZi5udWxsIG9yIHJlZi5mdW5jIGluIHBhc3NpdmUgZWxlbWVudCBzZWdtZW50AG9wY29kZQBPbkVsZW1TZWdtZW50RWxlbUV4cHJfUmVmRnVuYyBjYWxsYmFjayBmYWlsZWQAT25FbGVtU2VnbWVudEVsZW1FeHByX1JlZk51bGwgY2FsbGJhY2sgZmFpbGVkAGV4cGVjdGVkIEVORCBvcGNvZGUgYWZ0ZXIgZWxlbWVudCBleHByZXNzaW9uAEVuZEVsZW1TZWdtZW50IGNhbGxiYWNrIGZhaWxlZABFbmRFbGVtU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAQmVnaW5Db2RlU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAZnVuY3Rpb24gYm9keSBjb3VudABPbkZ1bmN0aW9uQm9keUNvdW50IGNhbGxiYWNrIGZhaWxlZABmdW5jdGlvbiBib2R5IHNpemUAQmVnaW5GdW5jdGlvbkJvZHkgY2FsbGJhY2sgZmFpbGVkAGxvY2FsIGRlY2xhcmF0aW9uIGNvdW50AE9uTG9jYWxEZWNsQ291bnQgY2FsbGJhY2sgZmFpbGVkAGxvY2FsIHR5cGUgY291bnQAbG9jYWwgY291bnQgbXVzdCBiZSA8IDB4MTAwMDAwMDAAbG9jYWwgdHlwZQBleHBlY3RlZCB2YWxpZCBsb2NhbCB0eXBlAE9uTG9jYWxEZWNsIGNhbGxiYWNrIGZhaWxlZABFbmRGdW5jdGlvbkJvZHkgY2FsbGJhY2sgZmFpbGVkAEVuZENvZGVTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABCZWdpbkRhdGFTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABkYXRhIHNlZ21lbnQgY291bnQAT25EYXRhU2VnbWVudENvdW50IGNhbGxiYWNrIGZhaWxlZABkYXRhIHNlY3Rpb24gd2l0aG91dCBtZW1vcnkgc2VjdGlvbgBkYXRhIHNlZ21lbnQgY291bnQgZG9lcyBub3QgZXF1YWwgY291bnQgaW4gRGF0YUNvdW50IHNlY3Rpb24AZGF0YSBzZWdtZW50IGZsYWdzAGludmFsaWQgZGF0YSBzZWdtZW50IGZsYWdzAGRhdGEgc2VnbWVudCBtZW1vcnkgaW5kZXgAQmVnaW5EYXRhU2VnbWVudCBjYWxsYmFjayBmYWlsZWQAQmVnaW5EYXRhU2VnbWVudEluaXRFeHByIGNhbGxiYWNrIGZhaWxlZABFbmREYXRhU2VnbWVudEluaXRFeHByIGNhbGxiYWNrIGZhaWxlZABkYXRhIHNlZ21lbnQgZGF0YQBkYXRhIHNpemUAdW5hYmxlIHRvIHJlYWQgZGF0YTogJXMAT25EYXRhU2VnbWVudERhdGEgY2FsbGJhY2sgZmFpbGVkAEVuZERhdGFTZWdtZW50IGNhbGxiYWNrIGZhaWxlZABFbmREYXRhU2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAQmVnaW5FdmVudFNlY3Rpb24gY2FsbGJhY2sgZmFpbGVkAGV2ZW50IGNvdW50AE9uRXZlbnRDb3VudCBjYWxsYmFjayBmYWlsZWQAT25FdmVudFR5cGUgY2FsbGJhY2sgZmFpbGVkAEVuZEV2ZW50U2VjdGlvbiBjYWxsYmFjayBmYWlsZWQAQmVnaW5EYXRhQ291bnRTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZABkYXRhIGNvdW50AE9uRGF0YUNvdW50IGNhbGxiYWNrIGZhaWxlZABFbmREYXRhQ291bnRTZWN0aW9uIGNhbGxiYWNrIGZhaWxlZAB1bmZpbmlzaGVkIHNlY3Rpb24gKGV4cGVjdGVkIGVuZDogMHglengpAE9uT3Bjb2RlIGNhbGxiYWNrIGZhaWxlZABPblVucmVhY2hhYmxlRXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVCYXJlIGNhbGxiYWNrIGZhaWxlZABibG9jayBzaWduYXR1cmUgdHlwZQBleHBlY3RlZCB2YWxpZCBibG9jayBzaWduYXR1cmUgdHlwZQBPbkJsb2NrRXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVCbG9ja1NpZyBjYWxsYmFjayBmYWlsZWQAbG9vcCBzaWduYXR1cmUgdHlwZQBPbkxvb3BFeHByIGNhbGxiYWNrIGZhaWxlZABpZiBzaWduYXR1cmUgdHlwZQBPbklmRXhwciBjYWxsYmFjayBmYWlsZWQAT25FbHNlRXhwciBjYWxsYmFjayBmYWlsZWQAT25TZWxlY3RFeHByIGNhbGxiYWNrIGZhaWxlZABiciBkZXB0aABPbkJyRXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVJbmRleCBjYWxsYmFjayBmYWlsZWQAYnJfaWYgZGVwdGgAT25CcklmRXhwciBjYWxsYmFjayBmYWlsZWQAYnJfdGFibGUgdGFyZ2V0IGNvdW50AGJyX3RhYmxlIHRhcmdldCBkZXB0aABicl90YWJsZSBkZWZhdWx0IHRhcmdldCBkZXB0aABPbkJyVGFibGVFeHByIGNhbGxiYWNrIGZhaWxlZABPblJldHVybkV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uTm9wRXhwciBjYWxsYmFjayBmYWlsZWQAT25Ecm9wRXhwciBjYWxsYmFjayBmYWlsZWQAT25FbmRGdW5jIGNhbGxiYWNrIGZhaWxlZABPbkVuZEV4cHIgY2FsbGJhY2sgZmFpbGVkAGkzMi5jb25zdCB2YWx1ZQBPbkkzMkNvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVVaW50MzIgY2FsbGJhY2sgZmFpbGVkAGk2NC5jb25zdCB2YWx1ZQB1bmFibGUgdG8gcmVhZCBpNjQgbGViMTI4OiAlcwBPbkk2NENvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVVaW50NjQgY2FsbGJhY2sgZmFpbGVkAGYzMi5jb25zdCB2YWx1ZQBmbG9hdABPbkYzMkNvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVGMzIgY2FsbGJhY2sgZmFpbGVkAGY2NC5jb25zdCB2YWx1ZQBkb3VibGUAT25GNjRDb25zdEV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uT3Bjb2RlRjY0IGNhbGxiYWNrIGZhaWxlZAB2MTI4LmNvbnN0IHZhbHVlAE9uVjEyOENvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAT25PcGNvZGVWMTI4IGNhbGxiYWNrIGZhaWxlZABnbG9iYWwuZ2V0IGdsb2JhbCBpbmRleABPbkdsb2JhbEdldEV4cHIgY2FsbGJhY2sgZmFpbGVkAGxvY2FsLmdldCBsb2NhbCBpbmRleABPbkxvY2FsR2V0RXhwciBjYWxsYmFjayBmYWlsZWQAZ2xvYmFsLnNldCBnbG9iYWwgaW5kZXgAT25HbG9iYWxTZXRFeHByIGNhbGxiYWNrIGZhaWxlZABsb2NhbC5zZXQgbG9jYWwgaW5kZXgAT25Mb2NhbFNldEV4cHIgY2FsbGJhY2sgZmFpbGVkAGNhbGwgZnVuY3Rpb24gaW5kZXgAaW52YWxpZCBjYWxsIGZ1bmN0aW9uIGluZGV4OiAldQBPbkNhbGxFeHByIGNhbGxiYWNrIGZhaWxlZABjYWxsX2luZGlyZWN0IHNpZ25hdHVyZSBpbmRleABpbnZhbGlkIGNhbGxfaW5kaXJlY3Qgc2lnbmF0dXJlIGluZGV4AGNhbGxfaW5kaXJlY3QgdGFibGUgaW5kZXgAaW52YWxpZCBjYWxsX2luZGlyZWN0IHRhYmxlIGluZGV4AGNhbGxfaW5kaXJlY3QgcmVzZXJ2ZWQAY2FsbF9pbmRpcmVjdCByZXNlcnZlZCB2YWx1ZSBtdXN0IGJlIDAAT25DYWxsSW5kaXJlY3RFeHByIGNhbGxiYWNrIGZhaWxlZABPbk9wY29kZVVpbnQzMlVpbnQzMiBjYWxsYmFjayBmYWlsZWQAaW52YWxpZCByZXR1cm5fY2FsbCBmdW5jdGlvbiBpbmRleDogJXUAT25SZXR1cm5DYWxsRXhwciBjYWxsYmFjayBmYWlsZWQAaW52YWxpZCByZXR1cm5fY2FsbF9pbmRpcmVjdCBzaWduYXR1cmUgaW5kZXgAcmV0dXJuX2NhbGxfaW5kaXJlY3QgdGFibGUgaW5kZXgAaW52YWxpZCByZXR1cm5fY2FsbF9pbmRpcmVjdCB0YWJsZSBpbmRleAByZXR1cm5fY2FsbF9pbmRpcmVjdCByZXNlcnZlZAByZXR1cm5fY2FsbF9pbmRpcmVjdCByZXNlcnZlZCB2YWx1ZSBtdXN0IGJlIDAAT25SZXR1cm5DYWxsSW5kaXJlY3RFeHByIGNhbGxiYWNrIGZhaWxlZABsb2NhbC50ZWUgbG9jYWwgaW5kZXgAT25Mb2NhbFRlZUV4cHIgY2FsbGJhY2sgZmFpbGVkAGxvYWQgYWxpZ25tZW50AGxvYWQgb2Zmc2V0AE9uTG9hZEV4cHIgY2FsbGJhY2sgZmFpbGVkAHN0b3JlIGFsaWdubWVudABzdG9yZSBvZmZzZXQAT25TdG9yZUV4cHIgY2FsbGJhY2sgZmFpbGVkAG1lbW9yeS5zaXplIHJlc2VydmVkAG1lbW9yeS5zaXplIHJlc2VydmVkIHZhbHVlIG11c3QgYmUgMABPbk1lbW9yeVNpemVFeHByIGNhbGxiYWNrIGZhaWxlZABtZW1vcnkuZ3JvdyByZXNlcnZlZABtZW1vcnkuZ3JvdyByZXNlcnZlZCB2YWx1ZSBtdXN0IGJlIDAAT25NZW1vcnlHcm93RXhwciBjYWxsYmFjayBmYWlsZWQAT25CaW5hcnlFeHByIGNhbGxiYWNrIGZhaWxlZABPbkNvbXBhcmVFeHByIGNhbGxiYWNrIGZhaWxlZABPblVuYXJ5RXhwciBjYWxsYmFjayBmYWlsZWQAT25UZXJuYXJ5RXhwciBjYWxsYmFjayBmYWlsZWQATGFuZSBpZHgAT25TaW1kTGFuZU9wRXhwciBjYWxsYmFjayBmYWlsZWQATGFuZSBpZHggWzE2XQBPblNpbWRTaHVmZmxlT3BFeHByIGNhbGxiYWNrIGZhaWxlZABPbkxvYWRTcGxhdEV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uQ29udmVydEV4cHIgY2FsbGJhY2sgZmFpbGVkAHRyeSBzaWduYXR1cmUgdHlwZQBPblRyeUV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uQ2F0Y2hFeHByIGNhbGxiYWNrIGZhaWxlZABPblJldGhyb3dFeHByIGNhbGxiYWNrIGZhaWxlZABldmVudCBpbmRleABPblRocm93RXhwciBjYWxsYmFjayBmYWlsZWQAYnJfb25fZXhuIGRlcHRoAE9uQnJPbkV4bkV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uT3Bjb2RlSW5kZXhJbmRleCBjYWxsYmFjayBmYWlsZWQAT25BdG9taWNOb3RpZnlFeHByIGNhbGxiYWNrIGZhaWxlZABPbkF0b21pY1dhaXRFeHByIGNhbGxiYWNrIGZhaWxlZABPbkF0b21pY0xvYWRFeHByIGNhbGxiYWNrIGZhaWxlZABPbkF0b21pY1N0b3JlRXhwciBjYWxsYmFjayBmYWlsZWQAbWVtb3J5IGFsaWdubWVudABtZW1vcnkgb2Zmc2V0AE9uQXRvbWljUm13RXhwciBjYWxsYmFjayBmYWlsZWQAT25BdG9taWNSbXdDbXB4Y2hnRXhwciBjYWxsYmFjayBmYWlsZWQAZWxlbSBzZWdtZW50IGluZGV4AHJlc2VydmVkIHRhYmxlIGluZGV4AHJlc2VydmVkIHZhbHVlIG11c3QgYmUgMABPblRhYmxlSW5pdEV4cHIgY2FsbGJhY2sgZmFpbGVkAHJlc2VydmVkIG1lbW9yeSBpbmRleABPbk1lbW9yeUluaXRFeHByIGNhbGxiYWNrIGZhaWxlZABzZWdtZW50IGluZGV4AE9uRGF0YURyb3BFeHByIGNhbGxiYWNrIGZhaWxlZABPbkVsZW1Ecm9wRXhwciBjYWxsYmFjayBmYWlsZWQAT25NZW1vcnlGaWxsRXhwciBjYWxsYmFjayBmYWlsZWQAT25NZW1vcnlDb3B5RXhwciBjYWxsYmFjayBmYWlsZWQAT25UYWJsZUNvcHlFeHByIGNhbGxiYWNrIGZhaWxlZAB0YWJsZSBpbmRleABPblRhYmxlR2V0RXhwciBjYWxsYmFjayBmYWlsZWQAT25UYWJsZVNldEV4cHIgY2FsbGJhY2sgZmFpbGVkAE9uVGFibGVHcm93RXhwciBjYWxsYmFjayBmYWlsZWQAT25UYWJsZVNpemVFeHByIGNhbGxiYWNrIGZhaWxlZABPblJlZk51bGxFeHByIGNhbGxiYWNrIGZhaWxlZABPblJlZklzTnVsbEV4cHIgY2FsbGJhY2sgZmFpbGVkAGZ1bmN0aW9uIGJvZHkgbG9uZ2VyIHRoYW4gZ2l2ZW4gc2l6ZQBmdW5jdGlvbiBib2R5IG11c3QgZW5kIHdpdGggRU5EIG9wY29kZQB1bmV4cGVjdGVkIG9wY29kZQA6ACAweCV4AGluaXRfZXhwciBpMzIuY29uc3QgdmFsdWUAT25Jbml0RXhwckkzMkNvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAaW5pdF9leHByIGk2NC5jb25zdCB2YWx1ZQBPbkluaXRFeHBySTY0Q29uc3RFeHByIGNhbGxiYWNrIGZhaWxlZABpbml0X2V4cHIgZjMyLmNvbnN0IHZhbHVlAE9uSW5pdEV4cHJGMzJDb25zdEV4cHIgY2FsbGJhY2sgZmFpbGVkAGluaXRfZXhwciBmNjQuY29uc3QgdmFsdWUAT25Jbml0RXhwckY2NENvbnN0RXhwciBjYWxsYmFjayBmYWlsZWQAaW5pdF9leHByIHYxMjguY29uc3QgdmFsdWUAT25Jbml0RXhwclYxMjhDb25zdEV4cHIgY2FsbGJhY2sgZmFpbGVkAGluaXRfZXhwciBnbG9iYWwuZ2V0IGluZGV4AE9uSW5pdEV4cHJHbG9iYWxHZXRFeHByIGNhbGxiYWNrIGZhaWxlZABpbiBpbml0aWFsaXplciBleHByZXNzaW9uAGV4cGVjdGVkIGkzMiBpbml0X2V4cHIAZXhwZWN0ZWQgRU5EIG9wY29kZSBhZnRlciBpbml0aWFsaXplciBleHByZXNzaW9uAGV2ZW50IGF0dHJpYnV0ZQBldmVudCBhdHRyaWJ1dGUgbXVzdCBiZSAwAGV2ZW50IHNpZ25hdHVyZSBpbmRleABpbnZhbGlkIGV2ZW50IHNpZ25hdHVyZSBpbmRleABnbG9iYWwgdHlwZQBpbnZhbGlkIGdsb2JhbCB0eXBlOiAlI3gAZ2xvYmFsIG11dGFiaWxpdHkAZ2xvYmFsIG11dGFiaWxpdHkgbXVzdCBiZSAwIG9yIDEAbWVtb3J5IGZsYWdzAG1lbW9yeSBpbml0aWFsIHBhZ2UgY291bnQAaW52YWxpZCBtZW1vcnkgaW5pdGlhbCBzaXplAHNoYXJlZCBtZW1vcnkgbXVzdCBoYXZlIGEgbWF4IHNpemUAbWVtb3J5IG1heCBwYWdlIGNvdW50AGludmFsaWQgbWVtb3J5IG1heCBzaXplAG1lbW9yeSBpbml0aWFsIHNpemUgbXVzdCBiZSA8PSBtYXggc2l6ZQB0YWJsZSBlbGVtIHR5cGUgbXVzdCBieSBmdW5jcmVmIG9yIGFueXJlZgB0YWJsZSBmbGFncwB0YWJsZSBpbml0aWFsIGVsZW0gY291bnQAdGFibGVzIG1heSBub3QgYmUgc2hhcmVkAHRhYmxlIG1heCBlbGVtIGNvdW50AHRhYmxlIGluaXRpYWwgZWxlbSBjb3VudCBtdXN0IGJlIDw9IG1heCBlbGVtIGNvdW50AHN0cmluZyBsZW5ndGgAdW5hYmxlIHRvIHJlYWQgc3RyaW5nOiAlcwBpbnZhbGlkIHV0Zi04IGVuY29kaW5nOiAlcwBlcnJvcgB3YXJuaW5nACUwN3p4OiAlczogJXMKAE9uSW5pdEV4cHJJNjRDb25zdEV4cHIoaW5kZXg6ICV1LCB2YWx1ZTogJWxsdSkKAE9uSW5pdEV4cHJJMzJDb25zdEV4cHIoaW5kZXg6ICV1LCB2YWx1ZTogJXUpCgBPbkluaXRFeHByR2xvYmFsR2V0RXhwcihpbmRleDogJXUsIGdsb2JhbF9pbmRleDogJXUpCgBPbkluaXRFeHByVjEyOENvbnN0RXhwcihpbmRleDogJXUgdmFsdWU6ICggMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4KSkKAE9uSW5pdEV4cHJGNjRDb25zdEV4cHIoaW5kZXg6ICV1IHZhbHVlOiAlZyAoMHgwOCVsbHgpKQoAT25Jbml0RXhwckYzMkNvbnN0RXhwcihpbmRleDogJXUsIHZhbHVlOiAlZyAoMHgwNCV4KSkKAEVuZEV2ZW50U2VjdGlvbgoAT25FdmVudFR5cGUoaW5kZXg6ICV1LCBzaWdfaW5kZXg6ICV1KQoAT25FdmVudENvdW50KCV1KQoAQmVnaW5FdmVudFNlY3Rpb24oJXpkKQoARW5kTGlua2luZ1NlY3Rpb24KAE9uQ29tZGF0RW50cnkoa2luZDogJWQsIGluZGV4OiAldSkKAE9uQ29tZGF0QmVnaW4oJS4qcywgZmxhZ3M6ICVkLCBjb3VudDogJXUpCgBPbkNvbWRhdENvdW50KCV1KQoAT25Jbml0RnVuY3Rpb24oJWQgcHJpb3JpdHk6ICVkKQoAT25Jbml0RnVuY3Rpb25Db3VudCgldSkKAE9uU2VnbWVudEluZm8oJWQgbmFtZTogJS4qcywgYWxpZ25tZW50OiAlZCwgZmxhZ3M6IDB4JXgpCgBPblNlZ21lbnRJbmZvQ291bnQoJXUpCgBPbkV2ZW50U3ltYm9sKG5hbWU6ICUuKnMgZmxhZ3M6IDB4JXggaW5kZXg6ICV1KQoAT25TZWN0aW9uU3ltYm9sKGZsYWdzOiAweCV4IGluZGV4OiAldSkKAE9uR2xvYmFsU3ltYm9sKG5hbWU6ICUuKnMgZmxhZ3M6IDB4JXggaW5kZXg6ICV1KQoAT25GdW5jdGlvblN5bWJvbChuYW1lOiAlLipzIGZsYWdzOiAweCV4IGluZGV4OiAldSkKAE9uRGF0YVN5bWJvbChuYW1lOiAlLipzIGZsYWdzOiAweCV4KQoAPGVycm9yX3N5bWJvbF90eXBlPgBzZWN0aW9uAE9uU3ltYm9sKHR5cGU6ICVzIGZsYWdzOiAweCV4KQoAT25TeW1ib2xDb3VudCgldSkKAEJlZ2luTGlua2luZ1NlY3Rpb24oJXpkKQoARW5kRHlsaW5rU2VjdGlvbgoAT25EeWxpbmtOZWVkZWQobmFtZTogJS4qcykKAE9uRHlsaW5rTmVlZGVkQ291bnQoJXUpCgBPbkR5bGlua0luZm8obWVtX3NpemU6ICV1LCBtZW1fYWxpZ246ICV1LCB0YWJsZV9zaXplOiAldSwgdGFibGVfYWxpZ246ICV1KQoAQmVnaW5EeWxpbmtTZWN0aW9uKCV6ZCkKAEVuZFJlbG9jU2VjdGlvbgoAPGVycm9yX3JlbG9jX3R5cGU+AE9uUmVsb2ModHlwZTogJXMsIG9mZnNldDogJXpkLCBpbmRleDogJXUsIGFkZGVuZDogJWQpCgBPblJlbG9jQ291bnQoY291bnQ6ICV1LCBzZWN0aW9uOiAldSkKAEJlZ2luUmVsb2NTZWN0aW9uKCV6ZCkKAEVuZE5hbWVzU2VjdGlvbgoAT25Mb2NhbE5hbWUoZnVuY19pbmRleDogJXUsIGxvY2FsX2luZGV4OiAldSwgbmFtZTogIiUuKnMiKQoAT25Mb2NhbE5hbWVMb2NhbENvdW50KGluZGV4OiAldSwgY291bnQ6ICV1KQoAT25Mb2NhbE5hbWVGdW5jdGlvbkNvdW50KCV1KQoAT25Mb2NhbE5hbWVTdWJzZWN0aW9uKGluZGV4OiV1LCBuYW1ldHlwZToldSwgc2l6ZTolemQpCgBPbkZ1bmN0aW9uTmFtZShpbmRleDogJXUsIG5hbWU6ICIlLipzIikKAE9uRnVuY3Rpb25OYW1lc0NvdW50KCV1KQoAT25GdW5jdGlvbk5hbWVTdWJzZWN0aW9uKGluZGV4OiV1LCBuYW1ldHlwZToldSwgc2l6ZTolemQpCgBPbk1vZHVsZU5hbWUobmFtZTogIiUuKnMiKQoAT25Nb2R1bGVOYW1lU3Vic2VjdGlvbihpbmRleDoldSwgbmFtZXR5cGU6JXUsIHNpemU6JXpkKQoAQmVnaW5OYW1lc1NlY3Rpb24oJXpkKQoARW5kRGF0YUNvdW50U2VjdGlvbgoAT25EYXRhQ291bnQoJXUpCgBCZWdpbkRhdGFDb3VudFNlY3Rpb24oJXpkKQoARW5kRGF0YVNlY3Rpb24KAEVuZERhdGFTZWdtZW50KCV1KQoAT25EYXRhU2VnbWVudERhdGEoaW5kZXg6JXUsIHNpemU6JXUpCgBFbmREYXRhU2VnbWVudEluaXRFeHByKCV1KQoAQmVnaW5EYXRhU2VnbWVudEluaXRFeHByKCV1KQoAdHJ1ZQBmYWxzZQBCZWdpbkRhdGFTZWdtZW50KGluZGV4OiAldSwgbWVtb3J5X2luZGV4OiAldSwgcGFzc2l2ZTogJXMpCgBPbkRhdGFTZWdtZW50Q291bnQoJXUpCgBCZWdpbkRhdGFTZWN0aW9uKCV6ZCkKAEVuZEVsZW1TZWN0aW9uCgBFbmRFbGVtU2VnbWVudCgldSkKAE9uRWxlbVNlZ21lbnRFbGVtRXhwcl9SZWZGdW5jKGluZGV4OiAldSwgZnVuY19pbmRleDogJXUpCgBPbkVsZW1TZWdtZW50RWxlbUV4cHJfUmVmTnVsbCgldSkKAE9uRWxlbVNlZ21lbnRFbGVtRXhwckNvdW50KGluZGV4OiAldSwgY291bnQ6ICV1KQoARW5kRWxlbVNlZ21lbnRJbml0RXhwcigldSkKAEJlZ2luRWxlbVNlZ21lbnRJbml0RXhwcigldSkKAEJlZ2luRWxlbVNlZ21lbnQoaW5kZXg6ICV1LCB0YWJsZV9pbmRleDogJXUsIHBhc3NpdmU6ICVzLCBlbGVtX3R5cGU6ICVzKQoAT25FbGVtU2VnbWVudENvdW50KCV1KQoAQmVnaW5FbGVtU2VjdGlvbiglemQpCgBPbkxvYWRTcGxhdEV4cHIob3Bjb2RlOiAiJXMiICgldSksIGFsaWduIGxvZzI6ICV1LCBvZmZzZXQ6ICV1KQoAT25TaW1kU2h1ZmZsZU9wRXhwciAobGFuZTogMHglMDh4ICUwOHggJTA4eCAlMDh4KQoAT25TaW1kTGFuZU9wRXhwciAobGFuZTogJWxsdSkKAEVuZENvZGVTZWN0aW9uCgBFbmRGdW5jdGlvbkJvZHkoJXUpCgBPblVucmVhY2hhYmxlRXhwcgoAT25UZXJuYXJ5RXhwcigiJXMiICgldSkpCgBPblVuYXJ5RXhwcigiJXMiICgldSkpCgBPblRyeUV4cHIoc2lnOiAAKQoAZnVuY2lkeFslZF0AT25UaHJvd0V4cHIoZXZlbnRfaW5kZXg6ICV1KQoAT25TdG9yZUV4cHIob3Bjb2RlOiAiJXMiICgldSksIGFsaWduIGxvZzI6ICV1LCBvZmZzZXQ6ICV1KQoAT25TZWxlY3RFeHByCgBPblJldHVybkNhbGxJbmRpcmVjdEV4cHIoc2lnX2luZGV4OiAldSwgdGFibGVfaW5kZXg6ICV1KQoAT25SZXR1cm5DYWxsRXhwcihmdW5jX2luZGV4OiAldSkKAE9uUmV0dXJuRXhwcgoAT25SZXRocm93RXhwcgoAT25Ob3BFeHByCgBPblJlZklzTnVsbEV4cHIKAE9uUmVmTnVsbEV4cHIKAE9uVGFibGVTaXplRXhwcigldSkKAE9uVGFibGVHcm93RXhwcigldSkKAE9uVGFibGVTZXRFeHByKCV1KQoAT25UYWJsZUdldEV4cHIoJXUpCgBPblRhYmxlSW5pdEV4cHIoJXUpCgBPbkVsZW1Ecm9wRXhwcigldSkKAE9uVGFibGVDb3B5RXhwcgoAT25NZW1vcnlTaXplRXhwcgoAT25NZW1vcnlJbml0RXhwcigldSkKAE9uTWVtb3J5R3Jvd0V4cHIKAE9uTWVtb3J5RmlsbEV4cHIKAE9uRGF0YURyb3BFeHByKCV1KQoAT25NZW1vcnlDb3B5RXhwcgoAT25Mb29wRXhwcihzaWc6IABPbkxvY2FsVGVlRXhwcihpbmRleDogJXUpCgBPbkxvY2FsU2V0RXhwcihpbmRleDogJXUpCgBPbkxvY2FsR2V0RXhwcihpbmRleDogJXUpCgBPbkxvYWRFeHByKG9wY29kZTogIiVzIiAoJXUpLCBhbGlnbiBsb2cyOiAldSwgb2Zmc2V0OiAldSkKAE9uSWZFeHByKHNpZzogAE9uSTY0Q29uc3RFeHByKCVsbHUgKDB4JWxseCkpCgBPbkkzMkNvbnN0RXhwcigldSAoMHgleCkpCgBPbkdsb2JhbFNldEV4cHIoaW5kZXg6ICV1KQoAT25HbG9iYWxHZXRFeHByKGluZGV4OiAldSkKAE9uVjEyOENvbnN0RXhwcigweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHgpCgBPbkY2NENvbnN0RXhwciglZyAoMHgwOCVsbHgpKQoAT25GMzJDb25zdEV4cHIoJWcgKDB4MDQleCkpCgBPbkVuZEV4cHIKAE9uRWxzZUV4cHIKAE9uRHJvcEV4cHIKAE9uQ29udmVydEV4cHIoIiVzIiAoJXUpKQoAT25Db21wYXJlRXhwcigiJXMiICgldSkpCgBPbkNhdGNoRXhwcgoAT25DYWxsSW5kaXJlY3RFeHByKHNpZ19pbmRleDogJXUsIHRhYmxlX2luZGV4OiAldSkKAE9uQ2FsbEV4cHIoZnVuY19pbmRleDogJXUpCgBPbkJyVGFibGVFeHByKG51bV90YXJnZXRzOiAldSwgZGVwdGhzOiBbAF0sIGRlZmF1bHQ6ICV1KQoAT25Cck9uRXhuRXhwcihkZXB0aDogJXUsIGV2ZW50X2luZGV4OiAldSkKAE9uQnJJZkV4cHIoZGVwdGg6ICV1KQoAT25CckV4cHIoZGVwdGg6ICV1KQoAT25CbG9ja0V4cHIoc2lnOiAAT25CaW5hcnlFeHByKCIlcyIgKCV1KSkKAE9uQXRvbWljTm90aWZ5RXhwcihvcGNvZGU6ICIlcyIgKCV1KSwgYWxpZ24gbG9nMjogJXUsIG9mZnNldDogJXUpCgBPbkF0b21pY1dhaXRFeHByKG9wY29kZTogIiVzIiAoJXUpLCBhbGlnbiBsb2cyOiAldSwgb2Zmc2V0OiAldSkKAE9uQXRvbWljUm13Q21weGNoZ0V4cHIob3Bjb2RlOiAiJXMiICgldSksIGFsaWduIGxvZzI6ICV1LCBvZmZzZXQ6ICV1KQoAT25BdG9taWNSbXdFeHByKG9wY29kZTogIiVzIiAoJXUpLCBhbGlnbiBsb2cyOiAldSwgb2Zmc2V0OiAldSkKAE9uQXRvbWljU3RvcmVFeHByKG9wY29kZTogIiVzIiAoJXUpLCBhbGlnbiBsb2cyOiAldSwgb2Zmc2V0OiAldSkKAE9uQXRvbWljTG9hZEV4cHIob3Bjb2RlOiAiJXMiICgldSksIGFsaWduIGxvZzI6ICV1LCBvZmZzZXQ6ICV1KQoAT25Mb2NhbERlY2woaW5kZXg6ICV1LCBjb3VudDogJXUsIHR5cGU6ICVzKQoAT25Mb2NhbERlY2xDb3VudCgldSkKAEJlZ2luRnVuY3Rpb25Cb2R5KCV1LCBzaXplOiV6ZCkKAE9uRnVuY3Rpb25Cb2R5Q291bnQoJXUpCgBCZWdpbkNvZGVTZWN0aW9uKCV6ZCkKAEVuZFN0YXJ0U2VjdGlvbgoAT25TdGFydEZ1bmN0aW9uKCV1KQoAQmVnaW5TdGFydFNlY3Rpb24oJXpkKQoARW5kRXhwb3J0U2VjdGlvbgoAPGVycm9yX2tpbmQ+AE9uRXhwb3J0KGluZGV4OiAldSwga2luZDogJXMsIGl0ZW1faW5kZXg6ICV1LCBuYW1lOiAiJS4qcyIpCgBPbkV4cG9ydENvdW50KCV1KQoAQmVnaW5FeHBvcnRTZWN0aW9uKCV6ZCkKAEVuZEdsb2JhbFNlY3Rpb24KAEVuZEdsb2JhbCgldSkKAEVuZEdsb2JhbEluaXRFeHByKCV1KQoAQmVnaW5HbG9iYWxJbml0RXhwcigldSkKAEJlZ2luR2xvYmFsKGluZGV4OiAldSwgdHlwZTogJXMsIG11dGFibGU6ICVzKQoAT25HbG9iYWxDb3VudCgldSkKAEJlZ2luR2xvYmFsU2VjdGlvbiglemQpCgBFbmRNZW1vcnlTZWN0aW9uCgBpbml0aWFsOiAlbGx1LCBtYXg6ICVsbHUAaW5pdGlhbDogJWxsdQBPbk1lbW9yeShpbmRleDogJXUsICVzKQoAT25NZW1vcnlDb3VudCgldSkKAEJlZ2luTWVtb3J5U2VjdGlvbiglemQpCgBFbmRUYWJsZVNlY3Rpb24KAE9uVGFibGUoaW5kZXg6ICV1LCBlbGVtX3R5cGU6ICVzLCAlcykKAE9uVGFibGVDb3VudCgldSkKAEJlZ2luVGFibGVTZWN0aW9uKCV6ZCkKAEVuZEZ1bmN0aW9uU2VjdGlvbgoAT25GdW5jdGlvbihpbmRleDogJXUsIHNpZ19pbmRleDogJXUpCgBPbkZ1bmN0aW9uQ291bnQoJXUpCgBCZWdpbkZ1bmN0aW9uU2VjdGlvbiglemQpCgBFbmRJbXBvcnRTZWN0aW9uCgBPbkltcG9ydEV2ZW50KGltcG9ydF9pbmRleDogJXUsIGV2ZW50X2luZGV4OiAldSwgc2lnX2luZGV4OiAldSkKAE9uSW1wb3J0R2xvYmFsKGltcG9ydF9pbmRleDogJXUsIGdsb2JhbF9pbmRleDogJXUsIHR5cGU6ICVzLCBtdXRhYmxlOiAlcykKAE9uSW1wb3J0TWVtb3J5KGltcG9ydF9pbmRleDogJXUsIG1lbW9yeV9pbmRleDogJXUsICVzKQoAT25JbXBvcnRUYWJsZShpbXBvcnRfaW5kZXg6ICV1LCB0YWJsZV9pbmRleDogJXUsIGVsZW1fdHlwZTogJXMsICVzKQoAT25JbXBvcnRGdW5jKGltcG9ydF9pbmRleDogJXUsIGZ1bmNfaW5kZXg6ICV1LCBzaWdfaW5kZXg6ICV1KQoAT25JbXBvcnQoaW5kZXg6ICV1LCBtb2R1bGU6ICIlLipzIiwgZmllbGQ6ICIlLipzIikKAE9uSW1wb3J0Q291bnQoJXUpCgBCZWdpbkltcG9ydFNlY3Rpb24oJXpkKQoARW5kVHlwZVNlY3Rpb24KAE9uVHlwZShpbmRleDogJXUsIHBhcmFtczogAFsALCByZXN1bHRzOiAAT25UeXBlQ291bnQoJXUpCgBCZWdpblR5cGVTZWN0aW9uKCV6ZCkKAEVuZEN1c3RvbVNlY3Rpb24KAEJlZ2luQ3VzdG9tU2VjdGlvbignJS4qcycsIHNpemU6ICV6ZCkKAEVuZE1vZHVsZQoAQmVnaW5Nb2R1bGUodmVyc2lvbjogJXUpCgBONHdhYnQxOUJpbmFyeVJlYWRlckxvZ2dpbmdFAEludmFsaWQAYXNzZXJ0X2V4aGF1c3Rpb24AYXNzZXJ0X2ludmFsaWQAYXNzZXJ0X21hbGZvcm1lZABhc3NlcnRfcmV0dXJuAGFzc2VydF9yZXR1cm5fYXJpdGhtZXRpY19uYW4AYXNzZXJ0X3JldHVybl9jYW5vbmljYWxfbmFuAGFzc2VydF90cmFwAGFzc2VydF91bmxpbmthYmxlAGJpbgBkYXRhAGVsZW0ARU9GAGV2ZW50AGV4cG9ydABnZXQAZ2xvYmFsAGltcG9ydABpbnZva2UAbG9jYWwAKABtZW1vcnkAbW9kdWxlAG11dABvZmZzZXQAcGFyYW0AcXVvdGUAcmVnaXN0ZXIAcmVzdWx0ACkAc2hhcmVkAHN0YXJ0AHRhYmxlAHRoZW4AdHlwZQBpOHgxNgBpMTZ4OABpMzJ4NABpNjR4MgBmMzJ4NABmNjR4MgBGTE9BVABJTlQATkFUAEFUT01JQ19MT0FEAEFUT01JQ19OT1RJRlkAQVRPTUlDX1JNVwBBVE9NSUNfUk1XX0NNUFhDSEcAQVRPTUlDX1NUT1JFAEFUT01JQ19XQUlUAEJJTkFSWQBjYXRjaABDT01QQVJFAENPTlNUAENPTlZFUlQAZGF0YS5kcm9wAGVsZW0uZHJvcABlbHNlAGVuZABnbG9iYWwuZ2V0AExPQUQAbG9jYWwuZ2V0AG1lbW9yeS5jb3B5AG1lbW9yeS5maWxsAG1lbW9yeS5ncm93AG1lbW9yeS5pbml0AG1lbW9yeS5zaXplAG5vcAByZWYuZnVuYwByZWYubnVsbABTSU1ETEFORU9QAFNJTURMT0FEU1BMQVQAdjh4MTYuc2h1ZmZsZQBTVE9SRQB0YWJsZS5jb3B5AHRhYmxlLmluaXQAdGFibGUuc2l6ZQBURVJOQVJZAFVOQVJZAHVucmVhY2hhYmxlAGFsaWduPQBBbm5vdGF0aW9uAG9mZnNldD0AUmVzZXJ2ZWQAVEVYVABWQVIAVkFMVUVUWVBFAC4uLgBpbnZhbGlkIGRlcHRoOiAldSAobWF4ICV6ZCkAdHlwZSBtaXNtYXRjaCBpbiAALCBleHBlY3RlZCAAIGJ1dCBnb3QgAC4uLiAAJXMAXQA8dHlwZV9pbmRleD4AYW55cmVmAGFueQB2b2lkAGV4Y2VwdF9yZWYAZnVuYwBmdW5jcmVmAHYxMjgAZjY0AGYzMgBpNjQAaTMyACwgAHJldHVybiBzaWduYXR1cmVzIGhhdmUgaW5jb25zaXN0ZW50IHR5cGVzOiBleHBlY3RlZCAlcywgZ290ICVzAGJsb2NrAGJyAGJyX2lmAGJyX29uX2V4bgBicl9vbl9leG4gaGFzIGluY29uc2lzdGVudCB0eXBlczogZXhwZWN0ZWQgJXMsIGdvdCAlcwBicl90YWJsZQBicl90YWJsZSBsYWJlbHMgaGF2ZSBpbmNvbnNpc3RlbnQgdHlwZXM6IGV4cGVjdGVkICVzLCBnb3QgJXMAY2FsbABjYWxsX2luZGlyZWN0AHJldHVybl9jYWxsAHJldHVybl9jYWxsX2luZGlyZWN0AHRyeSBibG9jawBkcm9wAGlmIHRydWUgYnJhbmNoAGZ1bmN0aW9uAGxvb3AAaWYAaWYgZmFsc2UgYnJhbmNoAHRyeQB0cnkgY2F0Y2gAZ2xvYmFsLnNldABsb2NhbC5zZXQAbG9jYWwudGVlAHRhYmxlLmdldAB0YWJsZS5zZXQAdGFibGUuZ3JvdwByZWYuaXNfbnVsbAByZXRocm93AHRocm93AHJldHVybgBzZWxlY3QAbGFuZSBpbmRleCBtdXN0IGJlIGxlc3MgdGhhbiAlZCAoZ290ICVsbHUpAGxhbmUgaW5kZXggbXVzdCBiZSBsZXNzIHRoYW4gMzIgKGdvdCAlZCkAaW1wbGljaXQgcmV0dXJuAC0rICAgMFgweAAobnVsbCkALTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYATkFOAC4AaW5maW5pdHkAbmFuACVkACV1ACVsdQBOMTBfX2N4eGFiaXYxMTZfX3NoaW1fdHlwZV9pbmZvRQBTdDl0eXBlX2luZm8ATjEwX19jeHhhYml2MTIwX19zaV9jbGFzc190eXBlX2luZm9FAE4xMF9fY3h4YWJpdjExN19fY2xhc3NfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMjFfX3ZtaV9jbGFzc190eXBlX2luZm9F";var tempDoublePtr=354976;var ENV={};function ___buildEnvironment(environ){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);HEAP32[envPtr>>2]=poolPtr;HEAP32[environ>>2]=envPtr}else{envPtr=HEAP32[environ>>2];poolPtr=HEAP32[envPtr>>2]}var strings=[];var totalSize=0;for(var key in ENV){if(typeof ENV[key]==="string"){var line=key+"="+ENV[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i<strings.length;i++){var line=strings[i];writeAsciiToMemory(line,poolPtr);HEAP32[envPtr+i*ptrSize>>2]=poolPtr;poolPtr+=line.length+1}HEAP32[envPtr+strings.length*ptrSize>>2]=0}var SYSCALLS={buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:0,get:function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(){var ret=UTF8ToString(SYSCALLS.get());return ret},get64:function(){var low=SYSCALLS.get(),high=SYSCALLS.get();return low},getZero:function(){SYSCALLS.get()}};function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function flush_NO_FILESYSTEM(){var fflush=Module["_fflush"];if(fflush)fflush(0);var buffers=SYSCALLS.buffers;if(buffers[1].length)SYSCALLS.printChar(1,10);if(buffers[2].length)SYSCALLS.printChar(2,10)}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;for(var i=0;i<iovcnt;i++){var ptr=HEAP32[iov+i*8>>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j<len;j++){SYSCALLS.printChar(stream,HEAPU8[ptr+j])}ret+=len}return ret}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _abort(){Module["abort"]()}function _emscripten_get_heap_size(){return TOTAL_MEMORY}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function emscripten_realloc_buffer(size){try{var newBuffer=new ArrayBuffer(size);if(newBuffer.byteLength!=size)return false;new Int8Array(newBuffer).set(HEAP8)}catch(e){return false}Module["_emscripten_replace_memory"](newBuffer);HEAP8=new Int8Array(newBuffer);HEAP16=new Int16Array(newBuffer);HEAP32=new Int32Array(newBuffer);HEAPU8=new Uint8Array(newBuffer);HEAPU16=new Uint16Array(newBuffer);HEAPU32=new Uint32Array(newBuffer);HEAPF32=new Float32Array(newBuffer);HEAPF64=new Float64Array(newBuffer);buffer=newBuffer;return newBuffer}function _emscripten_resize_heap(requestedSize){var oldSize=_emscripten_get_heap_size();var PAGE_MULTIPLE=16777216;var LIMIT=2147483648-PAGE_MULTIPLE;if(requestedSize>LIMIT){return false}var MIN_TOTAL_MEMORY=16777216;var newSize=Math.max(oldSize,MIN_TOTAL_MEMORY);while(newSize<requestedSize){if(newSize<=536870912){newSize=alignUp(2*newSize,PAGE_MULTIPLE)}else{newSize=Math.min(alignUp((3*newSize+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=emscripten_realloc_buffer(newSize);if(!replacement||replacement.byteLength!=newSize){return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();TOTAL_MEMORY=newSize;HEAPU32[DYNAMICTOP_PTR>>2]=requestedSize;return true}function _getenv(name){if(name===0)return 0;name=UTF8ToString(name);if(!ENV.hasOwnProperty(name))return 0;if(_getenv.ret)_free(_getenv.ret);_getenv.ret=allocateUTF8(ENV[name]);return _getenv.ret}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i<array.length;i++){var chr=array[i];if(chr>255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output};function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE==="boolean"&&ENVIRONMENT_IS_NODE){var buf;try{buf=Buffer.from(s,"base64")}catch(_){buf=new Buffer(s,"base64")}return new Uint8Array(buf.buffer,buf.byteOffset,buf.byteLength)}try{var decoded=decodeBase64(s);var bytes=new Uint8Array(decoded.length);for(var i=0;i<decoded.length;++i){bytes[i]=decoded.charCodeAt(i)}return bytes}catch(_){throw new Error("Converting base64 string to bytes failed.")}}function tryParseAsDataURI(filename){if(!isDataURI(filename)){return}return intArrayFromBase64(filename.slice(dataURIPrefix.length))}function jsCall_ii(index,a1){return functionPointers[index](a1)}function jsCall_iii(index,a1,a2){return functionPointers[index](a1,a2)}function jsCall_iiii(index,a1,a2,a3){return functionPointers[index](a1,a2,a3)}function jsCall_iiiii(index,a1,a2,a3,a4){return functionPointers[index](a1,a2,a3,a4)}function jsCall_iiiiii(index,a1,a2,a3,a4,a5){return functionPointers[index](a1,a2,a3,a4,a5)}function jsCall_iiiiiii(index,a1,a2,a3,a4,a5,a6){return functionPointers[index](a1,a2,a3,a4,a5,a6)}function jsCall_iiiiiiii(index,a1,a2,a3,a4,a5,a6,a7){return functionPointers[index](a1,a2,a3,a4,a5,a6,a7)}function jsCall_v(index){functionPointers[index]()}function jsCall_vi(index,a1){functionPointers[index](a1)}function jsCall_vii(index,a1,a2){functionPointers[index](a1,a2)}function jsCall_viii(index,a1,a2,a3){functionPointers[index](a1,a2,a3)}function jsCall_viiii(index,a1,a2,a3,a4){functionPointers[index](a1,a2,a3,a4)}function jsCall_viiiii(index,a1,a2,a3,a4,a5){functionPointers[index](a1,a2,a3,a4,a5)}function jsCall_viiiiii(index,a1,a2,a3,a4,a5,a6){functionPointers[index](a1,a2,a3,a4,a5,a6)}var asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,Infinity:Infinity};var asmLibraryArg={"a":abort,"b":setTempRet0,"c":getTempRet0,"d":jsCall_ii,"e":jsCall_iii,"f":jsCall_iiii,"g":jsCall_iiiii,"h":jsCall_iiiiii,"i":jsCall_iiiiiii,"j":jsCall_iiiiiiii,"k":jsCall_v,"l":jsCall_vi,"m":jsCall_vii,"n":jsCall_viii,"o":jsCall_viiii,"p":jsCall_viiiii,"q":jsCall_viiiiii,"r":___buildEnvironment,"s":___setErrNo,"t":___syscall140,"u":___syscall146,"v":___syscall54,"w":___syscall6,"x":_abort,"y":_emscripten_get_heap_size,"z":_emscripten_memcpy_big,"A":_emscripten_resize_heap,"B":_getenv,"C":abortOnCannotGrowMemory,"D":emscripten_realloc_buffer,"E":flush_NO_FILESYSTEM,"F":tempDoublePtr,"G":DYNAMICTOP_PTR};// EMSCRIPTEN_START_ASM +var asm=(/** @suppress {uselessCode} */ function(global,env,buffer) { +"almost asm";var a=new global.Int8Array(buffer),b=new global.Int16Array(buffer),c=new global.Int32Array(buffer),d=new global.Uint8Array(buffer),e=new global.Uint16Array(buffer),f=new global.Float32Array(buffer),g=new global.Float64Array(buffer),h=env.F|0,i=env.G|0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=global.NaN,s=global.Infinity,t=global.Math.abs,u=global.Math.ceil,v=global.Math.imul,w=global.Math.clz32,x=env.a,y=env.b,z=env.c,A=env.d,B=env.e,C=env.f,D=env.g,E=env.h,F=env.i,G=env.j,H=env.k,I=env.l,J=env.m,K=env.n,L=env.o,M=env.p,N=env.q,O=env.r,P=env.s,Q=env.t,R=env.u,S=env.v,T=env.w,U=env.x,V=env.y,W=env.z,X=env.A,Y=env.B,Z=env.C,_=env.D,$=env.E,aa=354992,ba=5597872,ca=0.0;function da(newBuffer){a=new Int8Array(newBuffer);d=new Uint8Array(newBuffer);b=new Int16Array(newBuffer);e=new Uint16Array(newBuffer);c=new Int32Array(newBuffer);f=new Float32Array(newBuffer);g=new Float64Array(newBuffer);buffer=newBuffer;return true} +// EMSCRIPTEN_START_FUNCS +function Up(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+64|0;o=q+32|0;n=q+12|0;l=q;p=e+36|0;f=c[p>>2]|0;g=f;m=c[e+24>>2]|0;if(((m>>>0>g>>>0?(h=g+1|0,c[p>>2]=h,(a[g>>0]|0)==105&h>>>0<m>>>0):0)?(i=g+2|0,c[p>>2]=i,(a[h>>0]|0)==110&i>>>0<m>>>0):0)?(j=g+3|0,c[p>>2]=j,(a[i>>0]|0)==102):0){g=j;f=j;h=j;k=0;while(1){i=h>>>0<m>>>0;if(i)j=d[h>>0]|0;else j=-1;if(!(a[15616+(j+1)>>0]&1))break;if(i){h=h+1|0;c[p>>2]=h;g=h;f=h}k=k+1|0}if(!k){i=e+4|0;j=a[i+11>>0]|0;h=j<<24>>24<0;j=h?c[e+8>>2]|0:j&255;k=c[e+16>>2]|0;p=c[e+32>>2]|0;e=c[e+28>>2]|0;m=p-e+1|0;e=f-e+1|0;c[n>>2]=h?c[i>>2]|0:i;c[n+4>>2]=j;c[n+8>>2]=k;c[n+12>>2]=(m|0)>1?m:1;c[n+16>>2]=(e|0)>1?e:1;c[l>>2]=3;c[l+4>>2]=p;c[l+8>>2]=f-p;c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];oy(b,o,42,l);aa=q;return}a:while(1){h=g>>>0<m>>>0;if(h)f=d[g>>0]|0;else f=-1;while(1){if(!(a[15616+(f+1)>>0]&1))break a;if(h)break;else f=-1}l=g+1|0;c[p>>2]=l;g=l}m=g;i=e+4|0;j=a[i+11>>0]|0;h=j<<24>>24<0;j=h?c[e+8>>2]|0:j&255;k=c[e+16>>2]|0;p=c[e+32>>2]|0;e=c[e+28>>2]|0;l=p-e+1|0;e=m-e+1|0;c[n>>2]=h?c[i>>2]|0:i;c[n+4>>2]=j;c[n+8>>2]=k;c[n+12>>2]=(l|0)>1?l:1;c[n+16>>2]=(e|0)>1?e:1;c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];my(b,o,108,p,m-p|0);aa=q;return}c[p>>2]=f;Zp(b,e);aa=q;return}function Vp(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=aa;aa=aa+64|0;o=t+32|0;p=t+12|0;r=t;q=e+36|0;h=c[q>>2]|0;k=h;n=c[e+24>>2]|0;a:do if(((n>>>0>k>>>0?(i=k+1|0,c[q>>2]=i,(a[k>>0]|0)==110&i>>>0<n>>>0):0)?(j=k+2|0,c[q>>2]=j,(a[i>>0]|0)==97&j>>>0<n>>>0):0)?(f=k+3|0,c[q>>2]=f,g=f,(a[j>>0]|0)==110):0){if(f>>>0<n>>>0?(a[f>>0]|0)==58:0){g=k+4|0;c[q>>2]=g;f=g;if((g>>>0<n>>>0?(l=k+5|0,c[q>>2]=l,(a[g>>0]|0)==48&l>>>0<n>>>0):0)?(m=k+6|0,c[q>>2]=m,(a[l>>0]|0)==120):0){f=m;g=m;while(1){h=g>>>0<n>>>0;if(h)i=(d[g>>0]|0)+1|0;else i=0;if(!(a[15616+i>>0]&4))break a;if(h){f=g+1|0;c[q>>2]=f;g=f}do if(g>>>0<n>>>0){h=a[g>>0]|0;if(h<<24>>24==95){g=g+1|0;c[q>>2]=g;f=g;break}else{h=(h&255)+1|0;s=17;break}}else{h=0;s=17}while(0);if((s|0)==17){s=0;if(!(a[15616+h>>0]&4))break}}j=0;while(1){h=g>>>0<n>>>0;if(h)i=d[g>>0]|0;else i=-1;if(!(a[15616+(i+1)>>0]&1))break;if(h){g=g+1|0;c[q>>2]=g;f=g}j=j+1|0}if(j|0)break;l=e+4|0;m=a[l+11>>0]|0;k=m<<24>>24<0;m=k?c[e+8>>2]|0:m&255;n=c[e+16>>2]|0;s=c[e+32>>2]|0;e=c[e+28>>2]|0;q=s-e+1|0;e=f-e+1|0;c[p>>2]=k?c[l>>2]|0:l;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=(q|0)>1?q:1;c[p+16>>2]=(e|0)>1?e:1;c[r>>2]=4;c[r+4>>2]=s;c[r+8>>2]=f-s;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,42,r);aa=t;return}c[q>>2]=f;break}j=0;while(1){h=f>>>0<n>>>0;if(h)i=d[f>>0]|0;else i=-1;if(!(a[15616+(i+1)>>0]&1))break;if(h){f=f+1|0;c[q>>2]=f;g=f}j=j+1|0}if(!j){l=e+4|0;m=a[l+11>>0]|0;k=m<<24>>24<0;m=k?c[e+8>>2]|0:m&255;n=c[e+16>>2]|0;s=c[e+32>>2]|0;e=c[e+28>>2]|0;q=s-e+1|0;e=g-e+1|0;c[p>>2]=k?c[l>>2]|0:l;c[p+4>>2]=m;c[p+8>>2]=n;c[p+12>>2]=(q|0)>1?q:1;c[p+16>>2]=(e|0)>1?e:1;c[r>>2]=4;c[r+4>>2]=s;c[r+8>>2]=g-s;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,42,r);aa=t;return}}else s=3;while(0);if((s|0)==3)c[q>>2]=h;Zp(b,e);aa=t;return}function Wp(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+64|0;o=r+32|0;p=r+12|0;m=r;q=e+36|0;g=c[q>>2]|0;n=c[e+24>>2]|0;a:do if(g>>>0<n>>>0){while(1){if(((d[g>>0]|0)+-48|0)>>>0>=10)break a;j=g+1|0;c[q>>2]=j;if(j>>>0>=n>>>0){k=28;break}i=a[j>>0]|0;if(i<<24>>24!=95)if(((i&255)+-48|0)>>>0<10)g=j;else{k=9;break}else{g=g+2|0;c[q>>2]=g}if(g>>>0>=n>>>0)break a}do if((k|0)==9){h=j;if(i<<24>>24==46){g=g+2|0;c[q>>2]=g;h=g;if(g>>>0<n>>>0?((d[g>>0]|0)+-48|0)>>>0<10:0){do{i=g+1|0;c[q>>2]=i;if(i>>>0>=n>>>0){k=27;break}h=a[i>>0]|0;if(h<<24>>24!=95)if(((h&255)+-48|0)>>>0<10)g=i;else{k=27;break}else{g=g+2|0;c[q>>2]=g}if(g>>>0>=n>>>0)break}while(((d[g>>0]|0)+-48|0)>>>0<10);if((k|0)==27){g=i;h=i;i=42;break}b:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break b;if(i)break;else h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;f=e+4|0;k=a[f+11>>0]|0;j=k<<24>>24<0;k=j?c[e+8>>2]|0:k&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[f>>2]|0:f;c[p+4>>2]=k;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}else i=42}else{g=j;i=f}}else if((k|0)==28){g=j;h=j;i=f}while(0);c:do if(g>>>0<n>>>0){switch(a[g>>0]|0){case 69:case 101:break;default:break c}h=g+1|0;c[q>>2]=h;d:do if(h>>>0<n>>>0){switch(a[h>>0]|0){case 45:case 43:break;default:{g=h;break d}}g=g+2|0;c[q>>2]=g}else g=h;while(0);e:do if(g>>>0<n>>>0){while(1){if(((d[g>>0]|0)+-48|0)>>>0>=10)break e;i=g+1|0;c[q>>2]=i;if(i>>>0>=n>>>0)break;h=a[i>>0]|0;if(h<<24>>24!=95)if(((h&255)+-48|0)>>>0<10)g=i;else break;else{g=g+2|0;c[q>>2]=g}if(g>>>0>=n>>>0)break e}g=i;h=i;i=42;break c}while(0);f:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break f;if(i)break;else h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;f=e+4|0;k=a[f+11>>0]|0;j=k<<24>>24<0;k=j?c[e+8>>2]|0:k&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[f>>2]|0:f;c[p+4>>2]=k;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}while(0);k=h;j=h;l=0;while(1){h=g>>>0<n>>>0;if(h)f=d[g>>0]|0;else f=-1;if(!(a[15616+(f+1)>>0]&1))break;if(h){g=g+1|0;c[q>>2]=g;j=g;h=j}else h=k;k=h;l=l+1|0}if(!l)if((i|0)==42){j=e+4|0;f=a[j+11>>0]|0;i=f<<24>>24<0;f=i?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;n=q-e+1|0;e=k-e+1|0;c[p>>2]=i?c[j>>2]|0:j;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(n|0)>1?n:1;c[p+16>>2]=(e|0)>1?e:1;c[m>>2]=1;c[m+4>>2]=q;c[m+8>>2]=k-q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,42,m);aa=r;return}else{f=e+4|0;k=a[f+11>>0]|0;h=k<<24>>24<0;k=h?c[e+8>>2]|0:k&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;n=q-e+1|0;e=j-e+1|0;c[p>>2]=h?c[f>>2]|0:f;c[p+4>>2]=k;c[p+8>>2]=l;c[p+12>>2]=(n|0)>1?n:1;c[p+16>>2]=(e|0)>1?e:1;c[m>>2]=0;c[m+4>>2]=q;c[m+8>>2]=j-q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,i,m);aa=r;return}}while(0);g:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break g;if(i)break;h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;f=e+4|0;k=a[f+11>>0]|0;j=k<<24>>24<0;k=j?c[e+8>>2]|0:k&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[f>>2]|0:f;c[p+4>>2]=k;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}function Xp(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;m=p+20|0;n=p;o=e+36|0;f=c[o>>2]|0;l=c[e+24>>2]|0;if(f>>>0<l>>>0){f=f+1|0;c[o>>2]=f}g=f;j=g;h=f;k=0;while(1){f=h>>>0<l>>>0;if(f)i=d[h>>0]|0;else i=-1;if(!(a[15616+(i+1)>>0]&1))break;if(f){h=h+1|0;c[o>>2]=h;g=h;f=g}else f=j;j=f;k=k+1|0}if(!k){h=e+4|0;i=a[h+11>>0]|0;g=i<<24>>24<0;i=g?c[e+8>>2]|0:i&255;k=c[e+16>>2]|0;o=c[e+32>>2]|0;e=c[e+28>>2]|0;l=o-e+1|0;e=j-e+1|0;c[n>>2]=g?c[h>>2]|0:h;c[n+4>>2]=i;c[n+8>>2]=k;c[n+12>>2]=(l|0)>1?l:1;c[n+16>>2]=(e|0)>1?e:1;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];my(b,m,108,o,j-o|0);aa=p;return}else{i=e+4|0;j=a[i+11>>0]|0;h=j<<24>>24<0;j=h?c[e+8>>2]|0:j&255;k=c[e+16>>2]|0;o=c[e+32>>2]|0;e=c[e+28>>2]|0;l=o-e+1|0;e=g-e+1|0;c[n>>2]=h?c[i>>2]|0:i;c[n+4>>2]=j;c[n+8>>2]=k;c[n+12>>2]=(l|0)>1?l:1;c[n+16>>2]=(e|0)>1?e:1;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];c[m+16>>2]=c[n+16>>2];my(b,m,110,o,g-o|0);aa=p;return}}function Yp(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=aa;aa=aa+48|0;q=t+20|0;r=t;s=e+36|0;j=c[s>>2]|0;n=f+g|0;i=j;p=c[e+24>>2]|0;do if(g){k=j;while(1){l=a[f>>0]|0;if(i>>>0<p>>>0){k=i+1|0;c[s>>2]=k;m=k;i=d[i>>0]|0}else{m=i;i=-1}f=f+1|0;if((i|0)!=(l<<24>>24|0)){m=7;break}if((f|0)==(n|0)){m=8;break}else i=m}if((m|0)==7){c[s>>2]=j;break}else if((m|0)==8){i=k;j=k;m=9;break}}else m=9;while(0);a:do if((m|0)==9){if(i>>>0>=p>>>0){c[s>>2]=j;break}f=i+1|0;c[s>>2]=f;if((a[i>>0]|0)==48&f>>>0<p>>>0?(o=i+2|0,c[s>>2]=o,(a[f>>0]|0)==120):0){i=o;j=o;l=o;while(1){f=l>>>0<p>>>0;if(f)k=(d[l>>0]|0)+1|0;else k=0;if(!(a[15616+k>>0]&4))break a;if(f){j=l+1|0;c[s>>2]=j;i=j;l=j}do if(l>>>0<p>>>0){f=a[l>>0]|0;if(f<<24>>24==95){i=l+1|0;c[s>>2]=i;j=i;f=i;break}else{f=(f&255)+1|0;m=20;break}}else{f=0;m=20}while(0);if((m|0)==20){m=0;if(!(a[15616+f>>0]&4))break;else f=l}l=f}l=0;while(1){f=i>>>0<p>>>0;if(f)k=d[i>>0]|0;else k=-1;if(!(a[15616+(k+1)>>0]&1))break;if(f){i=i+1|0;c[s>>2]=i;j=i}l=l+1|0}if(l|0)break;m=e+4|0;n=a[m+11>>0]|0;l=n<<24>>24<0;n=l?c[e+8>>2]|0:n&255;o=c[e+16>>2]|0;s=c[e+32>>2]|0;e=c[e+28>>2]|0;p=s-e+1|0;e=j-e+1|0;c[r>>2]=l?c[m>>2]|0:m;c[r+4>>2]=n;c[r+8>>2]=o;c[r+12>>2]=(p|0)>1?p:1;c[r+16>>2]=(e|0)>1?e:1;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];my(b,q,h,s+g|0,j-(s+g)|0);aa=t;return}c[s>>2]=j;while(1){if(((d[i>>0]|0)+-48|0)>>>0>=10)break a;f=i+1|0;c[s>>2]=f;if(f>>>0>=p>>>0)break;j=a[f>>0]|0;if(j<<24>>24!=95)if(((j&255)+-48|0)>>>0<10)i=f;else break;else{i=i+2|0;c[s>>2]=i}if(i>>>0>=p>>>0)break a}i=f;j=f;l=0;while(1){f=i>>>0<p>>>0;if(f)k=d[i>>0]|0;else k=-1;if(!(a[15616+(k+1)>>0]&1))break;if(f){i=i+1|0;c[s>>2]=i;j=i}l=l+1|0}if(!l){m=e+4|0;n=a[m+11>>0]|0;l=n<<24>>24<0;n=l?c[e+8>>2]|0:n&255;o=c[e+16>>2]|0;s=c[e+32>>2]|0;e=c[e+28>>2]|0;p=s-e+1|0;e=j-e+1|0;c[r>>2]=l?c[m>>2]|0:m;c[r+4>>2]=n;c[r+8>>2]=o;c[r+12>>2]=(p|0)>1?p:1;c[r+16>>2]=(e|0)>1?e:1;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];c[q+16>>2]=c[r+16>>2];my(b,q,h,s+g|0,j-(s+g)|0);aa=t;return}}while(0);Zp(b,e);aa=t;return}function Zp(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+80|0;t=u+60|0;p=u;r=u+40|0;s=u+20|0;q=f+36|0;h=c[f+24>>2]|0;j=c[q>>2]|0;a:while(1){i=j>>>0<h>>>0;if(i)g=d[j>>0]|0;else g=-1;while(1){if(!(a[15616+(g+1)>>0]&1))break a;if(i)break;else g=-1}n=j+1|0;c[q>>2]=n;j=n}n=f+32|0;k=c[n>>2]|0;j=j-k|0;if((a[354128]|0)==0?eC()|0:0){c[82940]=354708;c[82943]=354708;c[82946]=354708;c[82949]=354708;c[82952]=354708;c[82955]=354708;c[82958]=354708;c[82961]=354708;c[82964]=354708;c[82967]=354708;c[82970]=354708;c[82973]=354708;c[82976]=354708;c[82979]=354708;c[82982]=354708;c[82985]=354708;c[82988]=354708;c[82991]=354708;c[82994]=354708;c[82997]=354708;c[83e3]=354708;c[83003]=354708;c[83006]=354708;c[83009]=331295;c[83010]=70;c[83011]=4;c[83012]=354708;c[83015]=354708;c[83018]=354708;c[83021]=354708;c[83024]=354708;c[83027]=354708;c[83030]=330968;c[83031]=111;c[83032]=-4;c[83033]=330297;c[83034]=24;c[83036]=330972;c[83037]=111;c[83038]=-3;c[83039]=330976;c[83040]=111;c[83041]=-2;c[83042]=354708;c[83045]=330980;c[83046]=111;c[83047]=-1;c[83048]=354708;c[83051]=354708;c[83054]=354708;c[83057]=354708;c[83060]=354708;c[83063]=354708;c[83066]=354708;c[83069]=330553;c[83070]=66;c[83071]=5;c[83072]=330228;c[83073]=11;c[83075]=354708;c[83078]=354708;c[83081]=354708;c[83084]=330950;c[83085]=15;c[83087]=354708;c[83090]=330351;c[83091]=33;c[83093]=354708;c[83096]=303933;c[83097]=60;c[83098]=86;c[83099]=303940;c[83100]=60;c[83101]=80;c[83102]=330357;c[83103]=34;c[83105]=330237;c[83106]=13;c[83108]=354708;c[83111]=354708;c[83114]=354708;c[83117]=354708;c[83120]=331056;c[83121]=53;c[83122]=12;c[83123]=354708;c[83126]=330558;c[83127]=67;c[83128]=11;c[83129]=354708;c[83132]=303947;c[83133]=60;c[83134]=88;c[83135]=303954;c[83136]=60;c[83137]=82;c[83138]=354708;c[83141]=303961;c[83142]=103;c[83143]=140;c[83144]=303969;c[83145]=103;c[83146]=126;c[83147]=303977;c[83148]=51;c[83149]=148;c[83150]=303985;c[83151]=51;c[83152]=134;c[83153]=354708;c[83156]=303993;c[83157]=51;c[83158]=112;c[83159]=304001;c[83160]=51;c[83161]=94;c[83162]=354708;c[83165]=304009;c[83166]=60;c[83167]=70;c[83168]=304018;c[83169]=60;c[83170]=59;c[83171]=354708;c[83174]=330290;c[83175]=23;c[83177]=304027;c[83178]=60;c[83179]=71;c[83180]=304036;c[83181]=60;c[83182]=60;c[83183]=304045;c[83184]=60;c[83185]=74;c[83186]=304054;c[83187]=60;c[83188]=63;c[83189]=354708;c[83192]=330955;c[83193]=111;c[83194]=-16;c[83195]=304063;c[83196]=60;c[83197]=75;c[83198]=304072;c[83199]=60;c[83200]=64;c[83201]=354708;c[83204]=354708;c[83207]=330329;c[83208]=29;c[83210]=331369;c[83211]=98;c[83212]=205;c[83213]=304081;c[83214]=51;c[83215]=116;c[83216]=304091;c[83217]=51;c[83218]=98;c[83219]=304101;c[83220]=103;c[83221]=109;c[83222]=304109;c[83223]=103;c[83224]=91;c[83225]=304117;c[83226]=51;c[83227]=117;c[83228]=304127;c[83229]=51;c[83230]=99;c[83231]=330345;c[83232]=32;c[83234]=330223;c[83235]=10;c[83237]=331423;c[83238]=89;c[83239]=21;c[83240]=354708;c[83243]=331199;c[83244]=57;c[83245]=16;c[83246]=330737;c[83247]=99;c[83248]=207;c[83249]=304137;c[83250]=51;c[83251]=147;c[83252]=304145;c[83253]=51;c[83254]=133;c[83255]=330301;c[83256]=25;c[83258]=304153;c[83259]=51;c[83260]=111;c[83261]=304161;c[83262]=51;c[83263]=93;c[83264]=330726;c[83265]=97;c[83266]=201;c[83267]=354708;c[83270]=304169;c[83271]=51;c[83272]=118;c[83273]=304177;c[83274]=51;c[83275]=100;c[83276]=330275;c[83277]=20;c[83279]=354708;c[83282]=354708;c[83285]=304185;c[83286]=51;c[83287]=151;c[83288]=304193;c[83289]=51;c[83290]=137;c[83291]=304201;c[83292]=60;c[83293]=85;c[83294]=304208;c[83295]=60;c[83296]=79;c[83297]=354708;c[83300]=304215;c[83301]=60;c[83302]=69;c[83303]=304222;c[83304]=60;c[83305]=58;c[83306]=331416;c[83307]=88;c[83308]=15;c[83309]=331339;c[83310]=73;c[83311]=23;c[83312]=354708;c[83315]=354708;c[83318]=354708;c[83321]=331129;c[83322]=56;c[83323]=14;c[83324]=304229;c[83325]=103;c[83326]=108;c[83327]=304237;c[83328]=103;c[83329]=90;c[83330]=354708;c[83333]=330338;c[83334]=31;c[83336]=354708;c[83339]=331050;c[83340]=52;c[83341]=2;c[83342]=354708;c[83345]=331349;c[83346]=74;c[83347]=24;c[83348]=354708;c[83351]=354708;c[83354]=354708;c[83357]=304245;c[83358]=103;c[83359]=144;c[83360]=304255;c[83361]=103;c[83362]=130;c[83363]=354708;c[83366]=354708;c[83369]=354708;c[83372]=354708;c[83375]=354708;c[83378]=354708;c[83381]=354708;c[83384]=354708;c[83387]=354708;c[83390]=304265;c[83391]=51;c[83392]=149;c[83393]=304273;c[83394]=51;c[83395]=135;c[83396]=354708;c[83399]=304281;c[83400]=51;c[83401]=113;c[83402]=304289;c[83403]=51;c[83404]=95;c[83405]=354708;c[83408]=354708;c[83411]=354708;c[83414]=354708;c[83417]=354708;c[83420]=354708;c[83423]=354708;c[83426]=354708;c[83429]=304297;c[83430]=103;c[83431]=142;c[83432]=304306;c[83433]=103;c[83434]=128;c[83435]=304315;c[83436]=61;c[83437]=55;c[83438]=304325;c[83439]=61;c[83440]=54;c[83441]=354708;c[83444]=304335;c[83445]=61;c[83446]=53;c[83447]=304345;c[83448]=61;c[83449]=52;c[83450]=304355;c[83451]=51;c[83452]=114;c[83453]=304365;c[83454]=51;c[83455]=96;c[83456]=354708;c[83459]=354708;c[83462]=304375;c[83463]=51;c[83464]=115;c[83465]=304385;c[83466]=51;c[83467]=97;c[83468]=330397;c[83469]=41;c[83471]=354708;c[83474]=330268;c[83475]=19;c[83477]=330385;c[83478]=39;c[83480]=354708;c[83483]=354708;c[83486]=354708;c[83489]=354708;c[83492]=304395;c[83493]=93;c[83494]=44;c[83495]=304405;c[83496]=93;c[83497]=43;c[83498]=354708;c[83501]=304415;c[83502]=93;c[83503]=42;c[83504]=304425;c[83505]=93;c[83506]=41;c[83507]=331204;c[83508]=58;c[83509]=17;c[83510]=354708;c[83513]=354708;c[83516]=354708;c[83519]=354708;c[83522]=304435;c[83523]=93;c[83524]=49;c[83525]=354708;c[83528]=354708;c[83531]=354708;c[83534]=304447;c[83535]=51;c[83536]=124;c[83537]=304456;c[83538]=51;c[83539]=106;c[83540]=354708;c[83543]=354708;c[83546]=304465;c[83547]=51;c[83548]=125;c[83549]=304474;c[83550]=51;c[83551]=107;c[83552]=354708;c[83555]=354708;c[83558]=304483;c[83559]=71;c[83560]=30;c[83561]=304492;c[83562]=71;c[83563]=29;c[83564]=354708;c[83567]=304501;c[83568]=71;c[83569]=28;c[83570]=304510;c[83571]=71;c[83572]=27;c[83573]=354708;c[83576]=331402;c[83577]=85;c[83578]=9;c[83579]=354708;c[83582]=354708;c[83585]=354708;c[83588]=354708;c[83591]=354708;c[83594]=354708;c[83597]=354708;c[83600]=354708;c[83603]=354708;c[83606]=331390;c[83607]=83;c[83608]=209;c[83609]=304519;c[83610]=51;c[83611]=337;c[83612]=304529;c[83613]=51;c[83614]=150;c[83615]=304537;c[83616]=51;c[83617]=136;c[83618]=304545;c[83619]=51;c[83620]=323;c[83621]=354708;c[83624]=354708;c[83627]=354708;c[83630]=354708;c[83633]=354708;c[83636]=304555;c[83637]=71;c[83638]=37;c[83639]=304568;c[83640]=71;c[83641]=33;c[83642]=304581;c[83643]=60;c[83644]=271;c[83645]=354708;c[83648]=304590;c[83649]=71;c[83650]=38;c[83651]=304603;c[83652]=71;c[83653]=34;c[83654]=354708;c[83657]=354708;c[83660]=304616;c[83661]=60;c[83662]=272;c[83663]=354708;c[83666]=354708;c[83669]=354708;c[83672]=354708;c[83675]=354708;c[83678]=354708;c[83681]=354708;c[83684]=354708;c[83687]=304625;c[83688]=103;c[83689]=145;c[83690]=304637;c[83691]=103;c[83692]=131;c[83693]=354708;c[83696]=304649;c[83697]=60;c[83698]=274;c[83699]=304658;c[83700]=51;c[83701]=340;c[83702]=304668;c[83703]=103;c[83704]=276;c[83705]=354708;c[83708]=354708;c[83711]=354708;c[83714]=354708;c[83717]=354708;c[83720]=304677;c[83721]=73;c[83722]=23;c[83723]=354708;c[83726]=354708;c[83729]=304687;c[83730]=49;c[83731]=367;c[83732]=304704;c[83733]=49;c[83734]=366;c[83735]=304721;c[83736]=61;c[83737]=213;c[83738]=304732;c[83739]=74;c[83740]=24;c[83741]=354708;c[83744]=354708;c[83747]=330661;c[83748]=84;c[83749]=208;c[83750]=331218;c[83751]=87;c[83752]=18;c[83753]=354708;c[83756]=304742;c[83757]=103;c[83758]=333;c[83759]=354708;c[83762]=304752;c[83763]=50;c[83764]=358;c[83765]=304768;c[83766]=50;c[83767]=357;c[83768]=354708;c[83771]=354708;c[83774]=354708;c[83777]=304784;c[83778]=49;c[83779]=372;c[83780]=304803;c[83781]=51;c[83782]=277;c[83783]=304812;c[83784]=100;c[83785]=280;c[83786]=330118;c[83787]=4;c[83789]=354708;c[83792]=354708;c[83795]=354708;c[83798]=354708;c[83801]=354708;c[83804]=304827;c[83805]=51;c[83806]=338;c[83807]=354708;c[83810]=354708;c[83813]=304837;c[83814]=93;c[83815]=212;c[83816]=354708;c[83819]=354708;c[83822]=354708;c[83825]=354708;c[83828]=354708;c[83831]=354708;c[83834]=354708;c[83837]=354708;c[83840]=354708;c[83843]=304848;c[83844]=51;c[83845]=278;c[83846]=354708;c[83849]=354708;c[83852]=304856;c[83853]=47;c[83854]=384;c[83855]=304878;c[83856]=47;c[83857]=382;c[83858]=354708;c[83861]=354708;c[83864]=304900;c[83865]=51;c[83866]=336;c[83867]=354708;c[83870]=354708;c[83873]=304910;c[83874]=51;c[83875]=322;c[83876]=354708;c[83879]=354708;c[83882]=330086;c[83883]=2;c[83885]=354708;c[83888]=354708;c[83891]=354708;c[83894]=354708;c[83897]=304920;c[83898]=62;c[83899]=161;c[83900]=304936;c[83901]=62;c[83902]=155;c[83903]=304952;c[83904]=62;c[83905]=162;c[83906]=304968;c[83907]=62;c[83908]=156;c[83909]=354708;c[83912]=354708;c[83915]=354708;c[83918]=354708;c[83921]=354708;c[83924]=304984;c[83925]=47;c[83926]=377;c[83927]=305006;c[83928]=47;c[83929]=375;c[83930]=354708;c[83933]=330201;c[83934]=8;c[83936]=305028;c[83937]=47;c[83938]=391;c[83939]=305050;c[83940]=47;c[83941]=389;c[83942]=354708;c[83945]=354708;c[83948]=331230;c[83949]=86;c[83950]=19;c[83951]=305072;c[83952]=47;c[83953]=386;c[83954]=330250;c[83955]=16;c[83957]=354708;c[83960]=305095;c[83961]=48;c[83962]=421;c[83963]=354708;c[83966]=354708;c[83969]=305122;c[83970]=45;c[83971]=360;c[83972]=305138;c[83973]=45;c[83974]=359;c[83975]=330391;c[83976]=40;c[83978]=354708;c[83981]=354708;c[83984]=330379;c[83985]=38;c[83987]=354708;c[83990]=354708;c[83993]=354708;c[83996]=331059;c[83997]=54;c[83998]=13;c[83999]=305154;c[84e3]=62;c[84001]=161;c[84002]=305170;c[84003]=62;c[84004]=155;c[84005]=305186;c[84006]=62;c[84007]=162;c[84008]=305202;c[84009]=62;c[84010]=156;c[84011]=354708;c[84014]=354708;c[84017]=354708;c[84020]=330101;c[84021]=3;c[84023]=305218;c[84024]=71;c[84025]=39;c[84026]=305231;c[84027]=71;c[84028]=211;c[84029]=354708;c[84032]=354708;c[84035]=305241;c[84036]=71;c[84037]=40;c[84038]=305254;c[84039]=47;c[84040]=395;c[84041]=305272;c[84042]=47;c[84043]=394;c[84044]=305290;c[84045]=47;c[84046]=381;c[84047]=305309;c[84048]=47;c[84049]=380;c[84050]=354708;c[84053]=305328;c[84054]=47;c[84055]=374;c[84056]=305347;c[84057]=47;c[84058]=373;c[84059]=354708;c[84062]=354708;c[84065]=354708;c[84068]=354708;c[84071]=305366;c[84072]=62;c[84073]=163;c[84074]=305382;c[84075]=62;c[84076]=157;c[84077]=305398;c[84078]=62;c[84079]=164;c[84080]=305414;c[84081]=62;c[84082]=158;c[84083]=354708;c[84086]=330963;c[84087]=111;c[84088]=-5;c[84089]=305430;c[84090]=62;c[84091]=169;c[84092]=354708;c[84095]=305445;c[84096]=51;c[84097]=339;c[84098]=354708;c[84101]=354708;c[84104]=354708;c[84107]=354708;c[84110]=354708;c[84113]=354708;c[84116]=354708;c[84119]=305455;c[84120]=51;c[84121]=328;c[84122]=354708;c[84125]=354708;c[84128]=305465;c[84129]=51;c[84130]=314;c[84131]=354708;c[84134]=331359;c[84135]=95;c[84136]=204;c[84137]=354708;c[84140]=354708;c[84143]=354708;c[84146]=305475;c[84147]=47;c[84148]=379;c[84149]=354708;c[84152]=305498;c[84153]=60;c[84154]=265;c[84155]=354708;c[84158]=305507;c[84159]=47;c[84160]=393;c[84161]=305530;c[84162]=60;c[84163]=255;c[84164]=354708;c[84167]=354708;c[84170]=305539;c[84171]=60;c[84172]=266;c[84173]=305548;c[84174]=62;c[84175]=163;c[84176]=305564;c[84177]=62;c[84178]=157;c[84179]=305580;c[84180]=62;c[84181]=164;c[84182]=305596;c[84183]=62;c[84184]=158;c[84185]=354708;c[84188]=354708;c[84191]=305612;c[84192]=62;c[84193]=169;c[84194]=354708;c[84197]=305627;c[84198]=47;c[84199]=388;c[84200]=305646;c[84201]=47;c[84202]=387;c[84203]=354708;c[84206]=305665;c[84207]=60;c[84208]=268;c[84209]=305674;c[84210]=51;c[84211]=331;c[84212]=305684;c[84213]=60;c[84214]=256;c[84215]=305695;c[84216]=47;c[84217]=400;c[84218]=305717;c[84219]=60;c[84220]=257;c[84221]=354708;c[84224]=354708;c[84227]=354708;c[84230]=305728;c[84231]=60;c[84232]=260;c[84233]=330578;c[84234]=72;c[84235]=22;c[84236]=305739;c[84237]=60;c[84238]=261;c[84239]=354708;c[84242]=305750;c[84243]=103;c[84244]=318;c[84245]=330652;c[84246]=82;c[84247]=210;c[84248]=354708;c[84251]=354708;c[84254]=354708;c[84257]=354708;c[84260]=354708;c[84263]=354708;c[84266]=305765;c[84267]=103;c[84268]=324;c[84269]=354708;c[84272]=354708;c[84275]=354708;c[84278]=354708;c[84281]=305775;c[84282]=62;c[84283]=170;c[84284]=305793;c[84285]=62;c[84286]=165;c[84287]=354708;c[84290]=354708;c[84293]=330362;c[84294]=35;c[84296]=354708;c[84299]=354708;c[84302]=354708;c[84305]=305811;c[84306]=93;c[84307]=47;c[84308]=305822;c[84309]=93;c[84310]=45;c[84311]=354708;c[84314]=305833;c[84315]=51;c[84316]=329;c[84317]=354708;c[84320]=354708;c[84323]=305843;c[84324]=51;c[84325]=315;c[84326]=354708;c[84329]=354708;c[84332]=354708;c[84335]=354708;c[84338]=354708;c[84341]=354708;c[84344]=330261;c[84345]=18;c[84347]=354708;c[84350]=354708;c[84353]=330243;c[84354]=14;c[84356]=354708;c[84359]=354708;c[84362]=354708;c[84365]=354708;c[84368]=354708;c[84371]=354708;c[84374]=305853;c[84375]=51;c[84376]=327;c[84377]=354708;c[84380]=354708;c[84383]=305863;c[84384]=51;c[84385]=313;c[84386]=354708;c[84389]=354708;c[84392]=354708;c[84395]=354708;c[84398]=330254;c[84399]=17;c[84401]=354708;c[84404]=331328;c[84405]=69;c[84406]=26;c[84407]=354708;c[84410]=305873;c[84411]=71;c[84412]=35;c[84413]=305885;c[84414]=71;c[84415]=31;c[84416]=354708;c[84419]=354708;c[84422]=305897;c[84423]=71;c[84424]=36;c[84425]=305909;c[84426]=71;c[84427]=32;c[84428]=330320;c[84429]=28;c[84431]=354708;c[84434]=354708;c[84437]=354708;c[84440]=354708;c[84443]=331410;c[84444]=101;c[84445]=8;c[84446]=354708;c[84449]=354708;c[84452]=354708;c[84455]=354708;c[84458]=305921;c[84459]=62;c[84460]=172;c[84461]=305939;c[84462]=62;c[84463]=167;c[84464]=354708;c[84467]=354708;c[84470]=330308;c[84471]=26;c[84473]=354708;c[84476]=331261;c[84477]=64;c[84478]=20;c[84479]=305957;c[84480]=60;c[84481]=273;c[84482]=331379;c[84483]=96;c[84484]=206;c[84485]=354708;c[84488]=305966;c[84489]=45;c[84490]=364;c[84491]=305986;c[84492]=45;c[84493]=362;c[84494]=354708;c[84497]=354708;c[84500]=330161;c[84501]=6;c[84503]=354708;c[84506]=354708;c[84509]=354708;c[84512]=354708;c[84515]=306006;c[84516]=60;c[84517]=275;c[84518]=306015;c[84519]=62;c[84520]=171;c[84521]=306033;c[84522]=62;c[84523]=166;c[84524]=354708;c[84527]=306051;c[84528]=47;c[84529]=385;c[84530]=306074;c[84531]=47;c[84532]=383;c[84533]=354708;c[84536]=306097;c[84537]=48;c[84538]=420;c[84539]=306124;c[84540]=48;c[84541]=418;c[84542]=331290;c[84543]=75;c[84544]=3;c[84545]=354708;c[84548]=354708;c[84551]=354708;c[84554]=306151;c[84555]=62;c[84556]=67;c[84557]=306159;c[84558]=62;c[84559]=56;c[84560]=354708;c[84563]=354708;c[84566]=306167;c[84567]=51;c[84568]=119;c[84569]=306174;c[84570]=51;c[84571]=101;c[84572]=354708;c[84575]=354708;c[84578]=306181;c[84579]=62;c[84580]=193;c[84581]=306201;c[84582]=62;c[84583]=189;c[84584]=354708;c[84587]=354708;c[84590]=306221;c[84591]=62;c[84592]=194;c[84593]=306241;c[84594]=62;c[84595]=190;c[84596]=354708;c[84599]=354708;c[84602]=354708;c[84605]=306261;c[84606]=51;c[84607]=330;c[84608]=354708;c[84611]=354708;c[84614]=354708;c[84617]=330314;c[84618]=27;c[84620]=354708;c[84623]=354708;c[84626]=354708;c[84629]=354708;c[84632]=354708;c[84635]=354708;c[84638]=306271;c[84639]=103;c[84640]=146;c[84641]=306280;c[84642]=103;c[84643]=132;c[84644]=306289;c[84645]=72;c[84646]=22;c[84647]=354708;c[84650]=354708;c[84653]=331065;c[84654]=55;c[84655]=10;c[84656]=354708;c[84659]=354708;c[84662]=354708;c[84665]=354708;c[84668]=354708;c[84671]=354708;c[84674]=306299;c[84675]=93;c[84676]=48;c[84677]=306311;c[84678]=93;c[84679]=46;c[84680]=354708;c[84683]=354708;c[84686]=354708;c[84689]=354708;c[84692]=354708;c[84695]=306323;c[84696]=62;c[84697]=173;c[84698]=306341;c[84699]=62;c[84700]=168;c[84701]=354708;c[84704]=354708;c[84707]=330505;c[84708]=59;c[84709]=7;c[84710]=354708;c[84713]=306359;c[84714]=62;c[84715]=159;c[84716]=354708;c[84719]=306376;c[84720]=62;c[84721]=160;c[84722]=306393;c[84723]=47;c[84724]=378;c[84725]=306416;c[84726]=47;c[84727]=376;c[84728]=306439;c[84729]=60;c[84730]=87;c[84731]=306446;c[84732]=60;c[84733]=81;c[84734]=306453;c[84735]=47;c[84736]=392;c[84737]=306476;c[84738]=47;c[84739]=390;c[84740]=354708;c[84743]=354708;c[84746]=354708;c[84749]=354708;c[84752]=306499;c[84753]=103;c[84754]=309;c[84755]=354708;c[84758]=306514;c[84759]=103;c[84760]=143;c[84761]=306524;c[84762]=103;c[84763]=129;c[84764]=306534;c[84765]=60;c[84766]=89;c[84767]=306541;c[84768]=60;c[84769]=83;c[84770]=354708;c[84773]=354708;c[84776]=354708;c[84779]=306548;c[84780]=62;c[84781]=170;c[84782]=306566;c[84783]=62;c[84784]=165;c[84785]=306584;c[84786]=62;c[84787]=171;c[84788]=306602;c[84789]=62;c[84790]=166;c[84791]=306620;c[84792]=47;c[84793]=399;c[84794]=306642;c[84795]=47;c[84796]=397;c[84797]=306664;c[84798]=60;c[84799]=72;c[84800]=306673;c[84801]=60;c[84802]=61;c[84803]=354708;c[84806]=306682;c[84807]=51;c[84808]=290;c[84809]=306692;c[84810]=60;c[84811]=73;c[84812]=306701;c[84813]=60;c[84814]=62;c[84815]=306710;c[84816]=60;c[84817]=76;c[84818]=306719;c[84819]=60;c[84820]=65;c[84821]=354708;c[84824]=354708;c[84827]=306728;c[84828]=60;c[84829]=77;c[84830]=306737;c[84831]=60;c[84832]=66;c[84833]=354708;c[84836]=354708;c[84839]=306746;c[84840]=60;c[84841]=235;c[84842]=354708;c[84845]=354708;c[84848]=354708;c[84851]=306755;c[84852]=45;c[84853]=363;c[84854]=306774;c[84855]=45;c[84856]=361;c[84857]=354708;c[84860]=354708;c[84863]=354708;c[84866]=306793;c[84867]=45;c[84868]=365;c[84869]=354708;c[84872]=354708;c[84875]=354708;c[84878]=354708;c[84881]=354708;c[84884]=354708;c[84887]=354708;c[84890]=306813;c[84891]=60;c[84892]=236;c[84893]=354708;c[84896]=306824;c[84897]=60;c[84898]=237;c[84899]=354708;c[84902]=354708;c[84905]=354708;c[84908]=306835;c[84909]=60;c[84910]=240;c[84911]=354708;c[84914]=306846;c[84915]=60;c[84916]=241;c[84917]=330923;c[84918]=111;c[84919]=-17;c[84920]=354708;c[84923]=354708;c[84926]=354708;c[84929]=330636;c[84930]=80;c[84931]=50;c[84932]=306857;c[84933]=49;c[84934]=371;c[84935]=306876;c[84936]=49;c[84937]=369;c[84938]=306895;c[84939]=51;c[84940]=122;c[84941]=306905;c[84942]=51;c[84943]=104;c[84944]=330624;c[84945]=79;c[84946]=197;c[84947]=354708;c[84950]=306915;c[84951]=51;c[84952]=123;c[84953]=306925;c[84954]=51;c[84955]=105;c[84956]=354708;c[84959]=354708;c[84962]=354708;c[84965]=306935;c[84966]=103;c[84967]=231;c[84968]=306947;c[84969]=103;c[84970]=183;c[84971]=354708;c[84974]=306962;c[84975]=103;c[84976]=225;c[84977]=306974;c[84978]=51;c[84979]=121;c[84980]=306982;c[84981]=51;c[84982]=103;c[84983]=354708;c[84986]=354708;c[84989]=306990;c[84990]=60;c[84991]=267;c[84992]=354708;c[84995]=354708;c[84998]=354708;c[85001]=306999;c[85002]=51;c[85003]=293;c[85004]=354708;c[85007]=354708;c[85010]=307009;c[85011]=62;c[85012]=159;c[85013]=354708;c[85016]=354708;c[85019]=354708;c[85022]=307026;c[85023]=62;c[85024]=160;c[85025]=307043;c[85026]=60;c[85027]=269;c[85028]=354708;c[85031]=307052;c[85032]=60;c[85033]=258;c[85034]=354708;c[85037]=307063;c[85038]=60;c[85039]=259;c[85040]=354708;c[85043]=354708;c[85046]=354708;c[85049]=307074;c[85050]=60;c[85051]=262;c[85052]=307085;c[85053]=51;c[85054]=279;c[85055]=307094;c[85056]=60;c[85057]=263;c[85058]=354708;c[85061]=307105;c[85062]=51;c[85063]=287;c[85064]=354708;c[85067]=354708;c[85070]=354708;c[85073]=307115;c[85074]=103;c[85075]=335;c[85076]=354708;c[85079]=354708;c[85082]=354708;c[85085]=354708;c[85088]=354708;c[85091]=354708;c[85094]=354708;c[85097]=354708;c[85100]=354708;c[85103]=330600;c[85104]=77;c[85105]=200;c[85106]=354708;c[85109]=354708;c[85112]=354708;c[85115]=354708;c[85118]=354708;c[85121]=354708;c[85124]=354708;c[85127]=307126;c[85128]=47;c[85129]=414;c[85130]=354708;c[85133]=307150;c[85134]=48;c[85135]=419;c[85136]=307176;c[85137]=48;c[85138]=417;c[85139]=354708;c[85142]=354708;c[85145]=354708;c[85148]=354708;c[85151]=307202;c[85152]=103;c[85153]=141;c[85154]=307210;c[85155]=103;c[85156]=127;c[85157]=307218;c[85158]=103;c[85159]=182;c[85160]=307233;c[85161]=103;c[85162]=180;c[85163]=354708;c[85166]=354708;c[85169]=354708;c[85172]=354708;c[85175]=354708;c[85178]=307248;c[85179]=51;c[85180]=120;c[85181]=307256;c[85182]=51;c[85183]=102;c[85184]=330762;c[85185]=104;c[85186]=0;c[85187]=307264;c[85188]=47;c[85189]=398;c[85190]=307285;c[85191]=47;c[85192]=396;c[85193]=354708;c[85196]=354708;c[85199]=354708;c[85202]=354708;c[85205]=354708;c[85208]=354708;c[85211]=354708;c[85214]=354708;c[85217]=354708;c[85220]=354708;c[85223]=307306;c[85224]=51;c[85225]=303;c[85226]=354708;c[85229]=307316;c[85230]=111;c[85231]=-16;c[85232]=354708;c[85235]=354708;c[85238]=354708;c[85241]=330367;c[85242]=36;c[85244]=354708;c[85247]=354708;c[85250]=354708;c[85253]=354708;c[85256]=307324;c[85257]=60;c[85258]=245;c[85259]=354708;c[85262]=307333;c[85263]=62;c[85264]=195;c[85265]=307353;c[85266]=62;c[85267]=191;c[85268]=354708;c[85271]=330068;c[85272]=1;c[85274]=307373;c[85275]=62;c[85276]=196;c[85277]=307393;c[85278]=62;c[85279]=192;c[85280]=354708;c[85283]=354708;c[85286]=307413;c[85287]=47;c[85288]=407;c[85289]=354708;c[85292]=354708;c[85295]=354708;c[85298]=354708;c[85301]=354708;c[85304]=354708;c[85307]=307436;c[85308]=60;c[85309]=246;c[85310]=354708;c[85313]=307447;c[85314]=60;c[85315]=247;c[85316]=354708;c[85319]=354708;c[85322]=354708;c[85325]=307458;c[85326]=60;c[85327]=250;c[85328]=330562;c[85329]=68;c[85330]=25;c[85331]=307469;c[85332]=60;c[85333]=251;c[85334]=354708;c[85337]=354708;c[85340]=354708;c[85343]=354708;c[85346]=354708;c[85349]=354708;c[85352]=307480;c[85353]=103;c[85354]=181;c[85355]=307494;c[85356]=103;c[85357]=179;c[85358]=354708;c[85361]=307508;c[85362]=51;c[85363]=350;c[85364]=307522;c[85365]=69;c[85366]=26;c[85367]=354708;c[85370]=354708;c[85373]=307533;c[85374]=51;c[85375]=320;c[85376]=354708;c[85379]=354708;c[85382]=354708;c[85385]=307545;c[85386]=51;c[85387]=321;c[85388]=354708;c[85391]=354708;c[85394]=354708;c[85397]=354708;c[85400]=307557;c[85401]=51;c[85402]=291;c[85403]=354708;c[85406]=307578;c[85407]=51;c[85408]=292;c[85409]=354708;c[85412]=307599;c[85413]=62;c[85414]=177;c[85415]=354708;c[85418]=307619;c[85419]=51;c[85420]=306;c[85421]=354708;c[85424]=354708;c[85427]=354708;c[85430]=307629;c[85431]=103;c[85432]=283;c[85433]=354708;c[85436]=354708;c[85439]=307644;c[85440]=51;c[85441]=319;c[85442]=307654;c[85443]=62;c[85444]=193;c[85445]=307674;c[85446]=62;c[85447]=189;c[85448]=307694;c[85449]=62;c[85450]=194;c[85451]=307714;c[85452]=62;c[85453]=190;c[85454]=354708;c[85457]=354708;c[85460]=307734;c[85461]=62;c[85462]=172;c[85463]=307752;c[85464]=62;c[85465]=167;c[85466]=307770;c[85467]=62;c[85468]=173;c[85469]=307788;c[85470]=62;c[85471]=168;c[85472]=354708;c[85475]=307806;c[85476]=103;c[85477]=228;c[85478]=307818;c[85479]=51;c[85480]=300;c[85481]=354708;c[85484]=307828;c[85485]=103;c[85486]=222;c[85487]=354708;c[85490]=354708;c[85493]=354708;c[85496]=354708;c[85499]=354708;c[85502]=307840;c[85503]=103;c[85504]=334;c[85505]=354708;c[85508]=354708;c[85511]=307850;c[85512]=103;c[85513]=316;c[85514]=307860;c[85515]=62;c[85516]=177;c[85517]=354708;c[85520]=307880;c[85521]=90;c[85522]=232;c[85523]=354708;c[85526]=307899;c[85527]=71;c[85528]=355;c[85529]=307916;c[85530]=90;c[85531]=226;c[85532]=354708;c[85535]=354708;c[85538]=354708;c[85541]=354708;c[85544]=307935;c[85545]=62;c[85546]=174;c[85547]=354708;c[85550]=354708;c[85553]=354708;c[85556]=354708;c[85559]=354708;c[85562]=354708;c[85565]=330648;c[85566]=81;c[85567]=1;c[85568]=354708;c[85571]=354708;c[85574]=354708;c[85577]=354708;c[85580]=307951;c[85581]=62;c[85582]=178;c[85583]=307971;c[85584]=103;c[85585]=326;c[85586]=354708;c[85589]=354708;c[85592]=354708;c[85595]=354708;c[85598]=354708;c[85601]=354708;c[85604]=354708;c[85607]=354708;c[85610]=354708;c[85613]=307982;c[85614]=62;c[85615]=195;c[85616]=308002;c[85617]=62;c[85618]=191;c[85619]=308022;c[85620]=62;c[85621]=196;c[85622]=308042;c[85623]=62;c[85624]=192;c[85625]=308062;c[85626]=51;c[85627]=288;c[85628]=354708;c[85631]=308083;c[85632]=51;c[85633]=289;c[85634]=308104;c[85635]=103;c[85636]=344;c[85637]=354708;c[85640]=308128;c[85641]=103;c[85642]=345;c[85643]=354708;c[85646]=308152;c[85647]=62;c[85648]=174;c[85649]=354708;c[85652]=354708;c[85655]=354708;c[85658]=354708;c[85661]=354708;c[85664]=354708;c[85667]=354708;c[85670]=354708;c[85673]=354708;c[85676]=354708;c[85679]=354708;c[85682]=308168;c[85683]=62;c[85684]=178;c[85685]=354708;c[85688]=354708;c[85691]=354708;c[85694]=308188;c[85695]=51;c[85696]=152;c[85697]=308196;c[85698]=51;c[85699]=138;c[85700]=354708;c[85703]=308204;c[85704]=47;c[85705]=413;c[85706]=308228;c[85707]=47;c[85708]=411;c[85709]=308252;c[85710]=60;c[85711]=238;c[85712]=308263;c[85713]=90;c[85714]=233;c[85715]=308282;c[85716]=60;c[85717]=239;c[85718]=354708;c[85721]=308293;c[85722]=90;c[85723]=227;c[85724]=330132;c[85725]=5;c[85727]=308312;c[85728]=60;c[85729]=242;c[85730]=354708;c[85733]=308323;c[85734]=60;c[85735]=243;c[85736]=354708;c[85739]=354708;c[85742]=354708;c[85745]=308334;c[85746]=103;c[85747]=317;c[85748]=354708;c[85751]=354708;c[85754]=354708;c[85757]=354708;c[85760]=354708;c[85763]=354708;c[85766]=354708;c[85769]=354708;c[85772]=308349;c[85773]=47;c[85774]=405;c[85775]=308371;c[85776]=47;c[85777]=403;c[85778]=354708;c[85781]=354708;c[85784]=354708;c[85787]=354708;c[85790]=354708;c[85793]=354708;c[85796]=354708;c[85799]=354708;c[85802]=354708;c[85805]=354708;c[85808]=354708;c[85811]=354708;c[85814]=354708;c[85817]=308393;c[85818]=51;c[85819]=304;c[85820]=354708;c[85823]=308414;c[85824]=51;c[85825]=305;c[85826]=354708;c[85829]=354708;c[85832]=354708;c[85835]=354708;c[85838]=354708;c[85841]=308435;c[85842]=60;c[85843]=84;c[85844]=308442;c[85845]=60;c[85846]=78;c[85847]=308449;c[85848]=103;c[85849]=296;c[85850]=308464;c[85851]=60;c[85852]=68;c[85853]=308471;c[85854]=60;c[85855]=57;c[85856]=354708;c[85859]=354708;c[85862]=308478;c[85863]=47;c[85864]=406;c[85865]=308501;c[85866]=47;c[85867]=404;c[85868]=354708;c[85871]=354708;c[85874]=354708;c[85877]=354708;c[85880]=354708;c[85883]=308524;c[85884]=51;c[85885]=311;c[85886]=354708;c[85889]=354708;c[85892]=354708;c[85895]=308536;c[85896]=51;c[85897]=312;c[85898]=330373;c[85899]=37;c[85901]=354708;c[85904]=354708;c[85907]=354708;c[85910]=354708;c[85913]=354708;c[85916]=354708;c[85919]=354708;c[85922]=354708;c[85925]=354708;c[85928]=354708;c[85931]=354708;c[85934]=354708;c[85937]=354708;c[85940]=354708;c[85943]=354708;c[85946]=354708;c[85949]=308548;c[85950]=51;c[85951]=310;c[85952]=354708;c[85955]=354708;c[85958]=354708;c[85961]=354708;c[85964]=354708;c[85967]=354708;c[85970]=308558;c[85971]=103;c[85972]=342;c[85973]=330189;c[85974]=7;c[85976]=308582;c[85977]=103;c[85978]=343;c[85979]=354708;c[85982]=354708;c[85985]=354708;c[85988]=308606;c[85989]=49;c[85990]=370;c[85991]=308624;c[85992]=49;c[85993]=368;c[85994]=354708;c[85997]=354708;c[86e3]=354708;c[86003]=354708;c[86006]=354708;c[86009]=354708;c[86012]=308642;c[86013]=103;c[86014]=325;c[86015]=354708;c[86018]=354708;c[86021]=308652;c[86022]=103;c[86023]=307;c[86024]=308662;c[86025]=103;c[86026]=110;c[86027]=308673;c[86028]=103;c[86029]=92;c[86030]=308684;c[86031]=90;c[86032]=229;c[86033]=354708;c[86036]=308703;c[86037]=71;c[86038]=354;c[86039]=308720;c[86040]=90;c[86041]=223;c[86042]=308739;c[86043]=51;c[86044]=301;c[86045]=354708;c[86048]=308760;c[86049]=51;c[86050]=302;c[86051]=354708;c[86054]=354708;c[86057]=354708;c[86060]=354708;c[86063]=354708;c[86066]=354708;c[86069]=354708;c[86072]=354708;c[86075]=354708;c[86078]=354708;c[86081]=354708;c[86084]=354708;c[86087]=354708;c[86090]=354708;c[86093]=354708;c[86096]=354708;c[86099]=330612;c[86100]=78;c[86101]=51;c[86102]=354708;c[86105]=354708;c[86108]=308781;c[86109]=51;c[86110]=341;c[86111]=354708;c[86114]=354708;c[86117]=330543;c[86118]=65;c[86119]=202;c[86120]=330533;c[86121]=63;c[86122]=198;c[86123]=354708;c[86126]=308791;c[86127]=60;c[86128]=248;c[86129]=354708;c[86132]=308802;c[86133]=60;c[86134]=249;c[86135]=354708;c[86138]=354708;c[86141]=354708;c[86144]=308813;c[86145]=60;c[86146]=252;c[86147]=354708;c[86150]=308824;c[86151]=60;c[86152]=253;c[86153]=354708;c[86156]=354708;c[86159]=354708;c[86162]=308835;c[86163]=103;c[86164]=214;c[86165]=354708;c[86168]=354708;c[86171]=354708;c[86174]=354708;c[86177]=354708;c[86180]=354708;c[86183]=354708;c[86186]=354708;c[86189]=354708;c[86192]=354708;c[86195]=354708;c[86198]=354708;c[86201]=354708;c[86204]=354708;c[86207]=354708;c[86210]=354708;c[86213]=354708;c[86216]=354708;c[86219]=354708;c[86222]=308847;c[86223]=90;c[86224]=230;c[86225]=354708;c[86228]=354708;c[86231]=308866;c[86232]=90;c[86233]=224;c[86234]=354708;c[86237]=354708;c[86240]=354708;c[86243]=354708;c[86246]=354708;c[86249]=354708;c[86252]=354708;c[86255]=308885;c[86256]=103;c[86257]=308;c[86258]=354708;c[86261]=330715;c[86262]=94;c[86263]=203;c[86264]=354708;c[86267]=354708;c[86270]=354708;c[86273]=354708;c[86276]=354708;c[86279]=354708;c[86282]=354708;c[86285]=354708;c[86288]=308900;c[86289]=68;c[86290]=25;c[86291]=354708;c[86294]=354708;c[86297]=354708;c[86300]=354708;c[86303]=354708;c[86306]=354708;c[86309]=354708;c[86312]=354708;c[86315]=354708;c[86318]=354708;c[86321]=308911;c[86322]=60;c[86323]=270;c[86324]=354708;c[86327]=354708;c[86330]=354708;c[86333]=308920;c[86334]=62;c[86335]=175;c[86336]=354708;c[86339]=354708;c[86342]=354708;c[86345]=354708;c[86348]=354708;c[86351]=354708;c[86354]=331314;c[86355]=102;c[86356]=6;c[86357]=354708;c[86360]=354708;c[86363]=354708;c[86366]=354708;c[86369]=354708;c[86372]=354708;c[86375]=354708;c[86378]=354708;c[86381]=354708;c[86384]=354708;c[86387]=354708;c[86390]=354708;c[86393]=354708;c[86396]=354708;c[86399]=354708;c[86402]=354708;c[86405]=354708;c[86408]=354708;c[86411]=354708;c[86414]=354708;c[86417]=354708;c[86420]=354708;c[86423]=330283;c[86424]=22;c[86426]=354708;c[86429]=354708;c[86432]=354708;c[86435]=308940;c[86436]=62;c[86437]=175;c[86438]=308960;c[86439]=47;c[86440]=402;c[86441]=308979;c[86442]=47;c[86443]=401;c[86444]=354708;c[86447]=354708;c[86450]=354708;c[86453]=354708;c[86456]=354708;c[86459]=354708;c[86462]=354708;c[86465]=354708;c[86468]=354708;c[86471]=354708;c[86474]=354708;c[86477]=308998;c[86478]=9;c[86480]=354708;c[86483]=354708;c[86486]=354708;c[86489]=354708;c[86492]=354708;c[86495]=354708;c[86498]=354708;c[86501]=309005;c[86502]=62;c[86503]=176;c[86504]=354708;c[86507]=354708;c[86510]=354708;c[86513]=354708;c[86516]=354708;c[86519]=354708;c[86522]=354708;c[86525]=354708;c[86528]=354708;c[86531]=309025;c[86532]=62;c[86533]=154;c[86534]=354708;c[86537]=354708;c[86540]=354708;c[86543]=354708;c[86546]=354708;c[86549]=354708;c[86552]=354708;c[86555]=354708;c[86558]=354708;c[86561]=309038;c[86562]=51;c[86563]=285;c[86564]=354708;c[86567]=354708;c[86570]=354708;c[86573]=309050;c[86574]=51;c[86575]=286;c[86576]=354708;c[86579]=309062;c[86580]=103;c[86581]=218;c[86582]=354708;c[86585]=354708;c[86588]=354708;c[86591]=354708;c[86594]=354708;c[86597]=354708;c[86600]=354708;c[86603]=309074;c[86604]=62;c[86605]=176;c[86606]=354708;c[86609]=354708;c[86612]=354708;c[86615]=354708;c[86618]=309094;c[86619]=51;c[86620]=332;c[86621]=354708;c[86624]=354708;c[86627]=309104;c[86628]=51;c[86629]=284;c[86630]=354708;c[86633]=309114;c[86634]=62;c[86635]=154;c[86636]=354708;c[86639]=354708;c[86642]=354708;c[86645]=354708;c[86648]=354708;c[86651]=354708;c[86654]=354708;c[86657]=354708;c[86660]=354708;c[86663]=354708;c[86666]=354708;c[86669]=354708;c[86672]=309127;c[86673]=103;c[86674]=346;c[86675]=354708;c[86678]=309149;c[86679]=103;c[86680]=347;c[86681]=354708;c[86684]=354708;c[86687]=354708;c[86690]=354708;c[86693]=354708;c[86696]=354708;c[86699]=309171;c[86700]=103;c[86701]=281;c[86702]=354708;c[86705]=354708;c[86708]=354708;c[86711]=354708;c[86714]=309181;c[86715]=71;c[86716]=352;c[86717]=354708;c[86720]=354708;c[86723]=354708;c[86726]=354708;c[86729]=354708;c[86732]=309198;c[86733]=90;c[86734]=215;c[86735]=354708;c[86738]=309219;c[86739]=90;c[86740]=216;c[86741]=354708;c[86744]=354708;c[86747]=354708;c[86750]=354708;c[86753]=354708;c[86756]=354708;c[86759]=354708;c[86762]=354708;c[86765]=354708;c[86768]=354708;c[86771]=354708;c[86774]=354708;c[86777]=354708;c[86780]=354708;c[86783]=354708;c[86786]=354708;c[86789]=354708;c[86792]=354708;c[86795]=354708;c[86798]=354708;c[86801]=354708;c[86804]=354708;c[86807]=354708;c[86810]=354708;c[86813]=354708;c[86816]=354708;c[86819]=354708;c[86822]=354708;c[86825]=354708;c[86828]=354708;c[86831]=309240;c[86832]=60;c[86833]=264;c[86834]=354708;c[86837]=354708;c[86840]=309249;c[86841]=60;c[86842]=254;c[86843]=354708;c[86846]=354708;c[86849]=309258;c[86850]=103;c[86851]=348;c[86852]=354708;c[86855]=309280;c[86856]=103;c[86857]=349;c[86858]=354708;c[86861]=354708;c[86864]=354708;c[86867]=354708;c[86870]=354708;c[86873]=354708;c[86876]=354708;c[86879]=330695;c[86880]=92;c[86881]=351;c[86882]=354708;c[86885]=354708;c[86888]=354708;c[86891]=354708;c[86894]=354708;c[86897]=354708;c[86900]=354708;c[86903]=354708;c[86906]=354708;c[86909]=309302;c[86910]=90;c[86911]=217;c[86912]=354708;c[86915]=354708;c[86918]=354708;c[86921]=354708;c[86924]=354708;c[86927]=354708;c[86930]=354708;c[86933]=309321;c[86934]=103;c[86935]=282;c[86936]=354708;c[86939]=354708;c[86942]=354708;c[86945]=354708;c[86948]=354708;c[86951]=354708;c[86954]=354708;c[86957]=354708;c[86960]=354708;c[86963]=354708;c[86966]=354708;c[86969]=354708;c[86972]=354708;c[86975]=354708;c[86978]=309336;c[86979]=51;c[86980]=298;c[86981]=354708;c[86984]=354708;c[86987]=354708;c[86990]=309348;c[86991]=51;c[86992]=299;c[86993]=354708;c[86996]=354708;c[86999]=354708;c[87002]=354708;c[87005]=354708;c[87008]=354708;c[87011]=354708;c[87014]=354708;c[87017]=354708;c[87020]=354708;c[87023]=354708;c[87026]=354708;c[87029]=354708;c[87032]=354708;c[87035]=354708;c[87038]=354708;c[87041]=354708;c[87044]=309360;c[87045]=51;c[87046]=297;c[87047]=354708;c[87050]=354708;c[87053]=354708;c[87056]=354708;c[87059]=354708;c[87062]=354708;c[87065]=354708;c[87068]=354708;c[87071]=309370;c[87072]=80;c[87073]=50;c[87074]=354708;c[87077]=354708;c[87080]=354708;c[87083]=354708;c[87086]=354708;c[87089]=354708;c[87092]=354708;c[87095]=354708;c[87098]=354708;c[87101]=354708;c[87104]=354708;c[87107]=354708;c[87110]=354708;c[87113]=354708;c[87116]=309385;c[87117]=103;c[87118]=294;c[87119]=354708;c[87122]=354708;c[87125]=354708;c[87128]=354708;c[87131]=309395;c[87132]=71;c[87133]=353;c[87134]=354708;c[87137]=309412;c[87138]=47;c[87139]=412;c[87140]=309435;c[87141]=47;c[87142]=410;c[87143]=354708;c[87146]=354708;c[87149]=309458;c[87150]=90;c[87151]=219;c[87152]=354708;c[87155]=309479;c[87156]=90;c[87157]=220;c[87158]=309500;c[87159]=46;c[87160]=356;c[87161]=354708;c[87164]=354708;c[87167]=354708;c[87170]=354708;c[87173]=354708;c[87176]=354708;c[87179]=354708;c[87182]=354708;c[87185]=354708;c[87188]=354708;c[87191]=354708;c[87194]=354708;c[87197]=354708;c[87200]=354708;c[87203]=354708;c[87206]=354708;c[87209]=354708;c[87212]=354708;c[87215]=354708;c[87218]=354708;c[87221]=354708;c[87224]=354708;c[87227]=354708;c[87230]=309514;c[87231]=48;c[87232]=416;c[87233]=309537;c[87234]=48;c[87235]=415;c[87236]=354708;c[87239]=354708;c[87242]=354708;c[87245]=354708;c[87248]=354708;c[87251]=354708;c[87254]=354708;c[87257]=354708;c[87260]=354708;c[87263]=354708;c[87266]=354708;c[87269]=354708;c[87272]=354708;c[87275]=354708;c[87278]=354708;c[87281]=354708;c[87284]=354708;c[87287]=354708;c[87290]=354708;c[87293]=354708;c[87296]=354708;c[87299]=354708;c[87302]=354708;c[87305]=354708;c[87308]=354708;c[87311]=354708;c[87314]=354708;c[87317]=354708;c[87320]=354708;c[87323]=354708;c[87326]=309560;c[87327]=90;c[87328]=221;c[87329]=354708;c[87332]=354708;c[87335]=354708;c[87338]=354708;c[87341]=354708;c[87344]=354708;c[87347]=354708;c[87350]=309579;c[87351]=103;c[87352]=295;c[87353]=354708;c[87356]=354708;c[87359]=354708;c[87362]=354708;c[87365]=354708;c[87368]=354708;c[87371]=354708;c[87374]=354708;c[87377]=309594;c[87378]=51;c[87379]=153;c[87380]=309607;c[87381]=51;c[87382]=139;c[87383]=354708;c[87386]=354708;c[87389]=354708;c[87392]=354708;c[87395]=354708;c[87398]=354708;c[87401]=354708;c[87404]=354708;c[87407]=354708;c[87410]=354708;c[87413]=354708;c[87416]=354708;c[87419]=354708;c[87422]=354708;c[87425]=354708;c[87428]=354708;c[87431]=354708;c[87434]=354708;c[87437]=354708;c[87440]=354708;c[87443]=354708;c[87446]=354708;c[87449]=354708;c[87452]=354708;c[87455]=354708;c[87458]=354708;c[87461]=354708;c[87464]=354708;c[87467]=354708;c[87470]=354708;c[87473]=354708;c[87476]=354708;c[87479]=354708;c[87482]=354708;c[87485]=354708;c[87488]=354708;c[87491]=354708;c[87494]=354708;c[87497]=354708;c[87500]=354708;c[87503]=354708;c[87506]=354708;c[87509]=354708;c[87512]=354708;c[87515]=354708;c[87518]=309620;c[87519]=60;c[87520]=234;c[87521]=354708;c[87524]=354708;c[87527]=354708;c[87530]=354708;c[87533]=354708;c[87536]=354708;c[87539]=354708;c[87542]=354708;c[87545]=354708;c[87548]=354708;c[87551]=354708;c[87554]=354708;c[87557]=354708;c[87560]=354708;c[87563]=354708;c[87566]=354708;c[87569]=354708;c[87572]=354708;c[87575]=354708;c[87578]=354708;c[87581]=354708;c[87584]=354708;c[87587]=354708;c[87590]=354708;c[87593]=354708;c[87596]=354708;c[87599]=354708;c[87602]=354708;c[87605]=354708;c[87608]=354708;c[87611]=354708;c[87614]=354708;c[87617]=354708;c[87620]=354708;c[87623]=354708;c[87626]=354708;c[87629]=354708;c[87632]=354708;c[87635]=354708;c[87638]=354708;c[87641]=354708;c[87644]=354708;c[87647]=354708;c[87650]=354708;c[87653]=354708;c[87656]=354708;c[87659]=354708;c[87662]=354708;c[87665]=354708;c[87668]=354708;c[87671]=354708;c[87674]=354708;c[87677]=354708;c[87680]=354708;c[87683]=354708;c[87686]=354708;c[87689]=354708;c[87692]=354708;c[87695]=354708;c[87698]=354708;c[87701]=354708;c[87704]=354708;c[87707]=354708;c[87710]=354708;c[87713]=354708;c[87716]=354708;c[87719]=354708;c[87722]=354708;c[87725]=354708;c[87728]=354708;c[87731]=354708;c[87734]=354708;c[87737]=354708;c[87740]=354708;c[87743]=354708;c[87746]=354708;c[87749]=354708;c[87752]=354708;c[87755]=354708;c[87758]=354708;c[87761]=354708;c[87764]=354708;c[87767]=354708;c[87770]=354708;c[87773]=354708;c[87776]=354708;c[87779]=354708;c[87782]=354708;c[87785]=354708;c[87788]=354708;c[87791]=354708;c[87794]=354708;c[87797]=354708;c[87800]=354708;c[87803]=354708;c[87806]=354708;c[87809]=354708;c[87812]=309629;c[87813]=78;c[87814]=51;c[87815]=354708;c[87818]=354708;c[87821]=354708;c[87824]=354708;c[87827]=354708;c[87830]=354708;c[87833]=354708;c[87836]=354708;c[87839]=354708;c[87842]=354708;c[87845]=354708;c[87848]=354708;c[87851]=354708;c[87854]=354708;c[87857]=354708;c[87860]=354708;c[87863]=354708;c[87866]=354708;c[87869]=354708;c[87872]=354708;c[87875]=354708;c[87878]=354708;c[87881]=354708;c[87884]=354708;c[87887]=354708;c[87890]=354708;c[87893]=354708;c[87896]=354708;c[87899]=354708;c[87902]=354708;c[87905]=354708;c[87908]=354708;c[87911]=354708;c[87914]=354708;c[87917]=354708;c[87920]=354708;c[87923]=354708;c[87926]=354708;c[87929]=354708;c[87932]=354708;c[87935]=309641;c[87936]=60;c[87937]=244;c[87938]=354708;c[87941]=354708;c[87944]=354708;c[87947]=354708;c[87950]=354708;c[87953]=354708;c[87956]=354708;c[87959]=354708;c[87962]=354708;c[87965]=354708;c[87968]=354708;c[87971]=354708;c[87974]=354708;c[87977]=354708;c[87980]=354708;c[87983]=354708;c[87986]=354708;c[87989]=354708;c[87992]=354708;c[87995]=354708;c[87998]=354708;c[88001]=354708;c[88004]=354708;c[88007]=354708;c[88010]=354708;c[88013]=354708;c[88016]=354708;c[88019]=354708;c[88022]=354708;c[88025]=354708;c[88028]=354708;c[88031]=354708;c[88034]=354708;c[88037]=354708;c[88040]=354708;c[88043]=354708;c[88046]=354708;c[88049]=354708;c[88052]=354708;c[88055]=354708;c[88058]=354708;c[88061]=354708;c[88064]=354708;c[88067]=354708;c[88070]=354708;c[88073]=354708;c[88076]=354708;c[88079]=354708;c[88082]=354708;c[88085]=354708;c[88088]=354708;c[88091]=354708;c[88094]=354708;c[88097]=354708;c[88100]=354708;c[88103]=354708;c[88106]=354708;c[88109]=354708;c[88112]=354708;c[88115]=354708;c[88118]=354708;c[88121]=354708;c[88124]=354708;c[88127]=354708;c[88130]=354708;c[88133]=354708;c[88136]=354708;c[88139]=354708;c[88142]=354708;c[88145]=354708;c[88148]=354708;c[88151]=354708;c[88154]=354708;c[88157]=354708;c[88160]=354708;c[88163]=354708;c[88166]=354708;c[88169]=354708;c[88172]=354708;c[88175]=354708;c[88178]=354708;c[88181]=354708;c[88184]=354708;c[88187]=354708;c[88190]=354708;c[88193]=354708;c[88196]=354708;c[88199]=354708;c[88202]=354708;c[88205]=354708;c[88208]=354708;c[88211]=354708;c[88214]=354708;c[88217]=354708;c[88220]=354708;c[88223]=354708;c[88226]=354708;c[88229]=354708;c[88232]=354708;c[88235]=354708;c[88238]=354708;c[88241]=354708;c[88244]=354708;c[88247]=354708;c[88250]=354708;c[88253]=354708;c[88256]=354708;c[88259]=354708;c[88262]=354708;c[88265]=354708;c[88268]=354708;c[88271]=354708;c[88274]=354708;c[88277]=354708;c[88280]=354708;c[88283]=354708;c[88286]=354708;c[88289]=354708;c[88292]=354708;c[88295]=354708;c[88298]=354708;c[88301]=354708;c[88304]=354708;c[88307]=354708;c[88310]=354708;c[88313]=354708;c[88316]=354708;c[88319]=354708;c[88322]=354708;c[88325]=354708;c[88328]=354708;c[88331]=354708;c[88334]=354708;c[88337]=354708;c[88340]=354708;c[88343]=354708;c[88346]=354708;c[88349]=354708;c[88352]=354708;c[88355]=354708;c[88358]=354708;c[88361]=354708;c[88364]=354708;c[88367]=354708;c[88370]=330588;c[88371]=76;c[88372]=199;c[88373]=354708;c[88376]=354708;c[88379]=354708;c[88382]=354708;c[88385]=354708;c[88388]=354708;c[88391]=354708;c[88394]=354708;c[88397]=354708;c[88400]=354708;c[88403]=354708;c[88406]=354708;c[88409]=354708;c[88412]=354708;c[88415]=354708;c[88418]=354708;c[88421]=354708;c[88424]=354708;c[88427]=354708;c[88430]=354708;c[88433]=354708;c[88436]=354708;c[88439]=354708;c[88442]=354708;c[88445]=354708;c[88448]=354708;c[88451]=354708;c[88454]=354708;c[88457]=354708;c[88460]=354708;c[88463]=354708;c[88466]=354708;c[88469]=354708;c[88472]=354708;c[88475]=354708;c[88478]=354708;c[88481]=354708;c[88484]=354708;c[88487]=354708;c[88490]=354708;c[88493]=354708;c[88496]=354708;c[88499]=354708;c[88502]=354708;c[88505]=354708;c[88508]=354708;c[88511]=354708;c[88514]=354708;c[88517]=354708;c[88520]=354708;c[88523]=354708;c[88526]=309650;c[88527]=47;c[88528]=409;c[88529]=309670;c[88530]=47;c[88531]=408}if((j+-2|0)>>>0<27){switch(j|0){case 18:{g=18;l=14;break}case 17:{g=17;l=15;break}case 16:{g=16;l=16;break}case 14:case 15:{g=j;l=17;break}case 13:{g=13;l=18;break}case 12:{g=12;l=19;break}case 11:{g=11;l=20;break}case 9:case 10:{g=j;l=21;break}case 8:{g=8;l=22;break}case 7:{g=7;l=23;break}case 6:{g=6;l=24;break}case 5:{g=5;l=25;break}case 3:case 4:{g=j;l=26;break}case 2:{h=2;break}default:{g=j+(e[15888+(d[k+18>>0]<<1)>>1]|0)|0;l=14}}if((l|0)==14){g=g+(e[15888+(d[k+17>>0]<<1)>>1]|0)|0;l=15}if((l|0)==15){g=g+(e[15888+(((a[k+16>>0]|0)+1&255)<<1)>>1]|0)|0;l=16}if((l|0)==16){g=g+(e[15888+(d[k+15>>0]<<1)>>1]|0)|0;l=17}if((l|0)==17){g=g+(e[15888+(d[k+13>>0]<<1)>>1]|0)|0;l=18}if((l|0)==18){g=g+(e[15888+(d[k+12>>0]<<1)>>1]|0)|0;l=19}if((l|0)==19){g=g+(e[15888+(d[k+11>>0]<<1)>>1]|0)|0;l=20}if((l|0)==20){g=g+(e[15888+(d[k+10>>0]<<1)>>1]|0)|0;l=21}if((l|0)==21){g=g+(e[15888+(d[k+8>>0]<<1)>>1]|0)|0;l=22}if((l|0)==22){g=g+(e[15888+(d[k+7>>0]<<1)>>1]|0)|0;l=23}if((l|0)==23){g=g+(e[15888+(d[k+6>>0]<<1)>>1]|0)|0;l=24}if((l|0)==24){g=g+(e[15888+(d[k+5>>0]<<1)>>1]|0)|0;l=25}if((l|0)==25){g=g+(e[15888+(((a[k+4>>0]|0)+1&255)<<1)>>1]|0)|0;l=26}if((l|0)==26)h=g+(e[15888+(d[k+2>>0]<<1)>>1]|0)|0;g=a[k>>0]|0;i=j+-1|0;m=h+(e[15888+((g&255)<<1)>>1]|0)+(e[15888+(d[k+i>>0]<<1)>>1]|0)|0;if(((m>>>0<1864?(o=c[331760+(m*12|0)>>2]|0,g<<24>>24==(a[o>>0]|0)):0)?(wA(k+1|0,o+1|0,i)|0)==0:0)?(a[o+j>>0]|0)==0:0){l=c[331760+(m*12|0)+4>>2]|0;if(l>>>0<42){k=f+4|0;m=a[k+11>>0]|0;j=m<<24>>24<0;m=j?c[f+8>>2]|0:m&255;o=c[f+16>>2]|0;s=c[f+28>>2]|0;r=(c[n>>2]|0)-s+1|0;s=(c[q>>2]|0)-s+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=m;c[p+8>>2]=o;c[p+12>>2]=(r|0)>1?r:1;c[p+16>>2]=(s|0)>1?s:1;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];ky(b,t,l);aa=u;return}h=f+4|0;k=a[h+11>>0]|0;p=k<<24>>24<0;k=p?c[f+8>>2]|0:k&255;j=c[f+16>>2]|0;g=c[f+28>>2]|0;i=(c[n>>2]|0)-g+1|0;i=(i|0)>1?i:1;g=(c[q>>2]|0)-g+1|0;g=(g|0)>1?g:1;h=p?c[h>>2]|0:h;if((l|0)==111){c[r>>2]=h;c[r+4>>2]=k;c[r+8>>2]=j;c[r+12>>2]=i;c[r+16>>2]=g;s=c[331760+(m*12|0)+8>>2]|0;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];c[t+16>>2]=c[r+16>>2];ly(b,t,111,s);aa=u;return}else{c[s>>2]=h;c[s+4>>2]=k;c[s+8>>2]=j;c[s+12>>2]=i;c[s+16>>2]=g;r=c[331760+(m*12|0)+8>>2]|0;c[t>>2]=c[s>>2];c[t+4>>2]=c[s+4>>2];c[t+8>>2]=c[s+8>>2];c[t+12>>2]=c[s+12>>2];c[t+16>>2]=c[s+16>>2];ny(b,t,l,r);aa=u;return}}}l=f+4|0;m=a[l+11>>0]|0;k=m<<24>>24<0;m=k?c[f+8>>2]|0:m&255;o=c[f+16>>2]|0;s=c[n>>2]|0;n=c[f+28>>2]|0;f=s-n+1|0;r=c[q>>2]|0;q=r-n+1|0;c[p>>2]=k?c[l>>2]|0:l;c[p+4>>2]=m;c[p+8>>2]=o;c[p+12>>2]=(f|0)>1?f:1;c[p+16>>2]=(q|0)>1?q:1;c[t>>2]=c[p>>2];c[t+4>>2]=c[p+4>>2];c[t+8>>2]=c[p+8>>2];c[t+12>>2]=c[p+12>>2];c[t+16>>2]=c[p+16>>2];my(b,t,108,s,r-s|0);aa=u;return}function _p(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+64|0;o=r+32|0;p=r+12|0;m=r;q=e+36|0;g=c[q>>2]|0;n=c[e+24>>2]|0;j=g;i=j;while(1){h=g>>>0<n>>>0;if(h)k=(d[g>>0]|0)+1|0;else k=0;if(!(a[15616+k>>0]&4))break;if(h){g=g+1|0;c[q>>2]=g;j=g;i=j}k=g>>>0<n>>>0;do if(k){h=a[g>>0]|0;if(h<<24>>24==95){g=g+1|0;c[q>>2]=g;j=g;i=j;break}else{h=(h&255)+1|0;l=11;break}}else{h=0;l=11}while(0);if((l|0)==11){l=0;if(!(a[15616+h>>0]&4)){l=13;break}}}if((l|0)==13){a:do if(k?(a[g>>0]|0)==46:0){h=g+1|0;c[q>>2]=h;j=h;if(h>>>0<n>>>0)g=(d[h>>0]|0)+1|0;else g=0;if(!(a[15616+g>>0]&4)){i=j;k=42}else{i=j;k=j;while(1){g=h>>>0<n>>>0;if(g)j=(d[h>>0]|0)+1|0;else j=0;if(!(a[15616+j>>0]&4))break;if(g){h=h+1|0;c[q>>2]=h;j=h;i=j}else j=k;do if(h>>>0<n>>>0){g=a[h>>0]|0;if(g<<24>>24==95){h=h+1|0;c[q>>2]=h;g=h;i=g;break}else{g=(g&255)+1|0;l=28;break}}else{g=0;l=28}while(0);if((l|0)==28){l=0;if(!(a[15616+g>>0]&4)){k=42;break a}else g=j}k=g}b:while(1){i=h>>>0<n>>>0;if(i)g=d[h>>0]|0;else g=-1;while(1){if(!(a[15616+(g+1)>>0]&1))break b;if(i)break;else g=-1}m=h+1|0;c[q>>2]=m;h=m}n=h;k=e+4|0;f=a[k+11>>0]|0;j=f<<24>>24<0;f=j?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}}else{h=g;k=f}while(0);c:do if(h>>>0<n>>>0){switch(a[h>>0]|0){case 80:case 112:break;default:{g=h;h=j;l=k;break c}}g=h+1|0;c[q>>2]=g;d:do if(g>>>0<n>>>0){switch(a[g>>0]|0){case 45:case 43:break;default:break d}g=h+2|0;c[q>>2]=g}while(0);e:do if(g>>>0<n>>>0){while(1){if(((d[g>>0]|0)+-48|0)>>>0>=10)break e;i=g+1|0;c[q>>2]=i;if(i>>>0>=n>>>0)break;h=a[i>>0]|0;if(h<<24>>24!=95)if(((h&255)+-48|0)>>>0<10)g=i;else break;else{g=g+2|0;c[q>>2]=g}if(g>>>0>=n>>>0)break e}h=i;g=i;i=h;l=42;break c}while(0);f:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break f;if(i)break;else h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;k=e+4|0;f=a[k+11>>0]|0;j=f<<24>>24<0;f=j?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}else{g=h;h=j;l=k}while(0);f=0;while(1){j=g>>>0<n>>>0;if(j)k=d[g>>0]|0;else k=-1;if(!(a[15616+(k+1)>>0]&1))break;if(j){g=g+1|0;c[q>>2]=g;h=g;i=h}f=f+1|0}if(!f)if((l|0)==42){k=e+4|0;f=a[k+11>>0]|0;j=f<<24>>24<0;f=j?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;n=q-e+1|0;e=i-e+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(n|0)>1?n:1;c[p+16>>2]=(e|0)>1?e:1;c[m>>2]=2;c[m+4>>2]=q;c[m+8>>2]=i-q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,42,m);aa=r;return}else{j=e+4|0;k=a[j+11>>0]|0;i=k<<24>>24<0;k=i?c[e+8>>2]|0:k&255;f=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;n=q-e+1|0;e=h-e+1|0;c[p>>2]=i?c[j>>2]|0:j;c[p+4>>2]=k;c[p+8>>2]=f;c[p+12>>2]=(n|0)>1?n:1;c[p+16>>2]=(e|0)>1?e:1;c[m>>2]=0;c[m+4>>2]=q;c[m+8>>2]=h-q;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];oy(b,o,l,m);aa=r;return}}g:while(1){i=g>>>0<n>>>0;if(i)h=d[g>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break g;if(i)break;else h=-1}m=g+1|0;c[q>>2]=m;g=m}n=g;k=e+4|0;f=a[k+11>>0]|0;j=f<<24>>24<0;f=j?c[e+8>>2]|0:f&255;l=c[e+16>>2]|0;q=c[e+32>>2]|0;e=c[e+28>>2]|0;m=q-e+1|0;e=n-e+1|0;c[p>>2]=j?c[k>>2]|0:k;c[p+4>>2]=f;c[p+8>>2]=l;c[p+12>>2]=(m|0)>1?m:1;c[p+16>>2]=(e|0)>1?e:1;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];my(b,o,108,q,n-q|0);aa=r;return}function $p(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;n=p+24|0;o=p;m=p+4|0;l=b+36|0;f=c[l>>2]|0;k=c[b+24>>2]|0;a:do if(f>>>0<k>>>0){e=b+16|0;g=b+28|0;h=1;b:while(1){i=f+1|0;c[l>>2]=i;j=i;switch(a[f>>0]|0){case 10:{c[e>>2]=(c[e>>2]|0)+1;c[g>>2]=j;f=i;break}case 59:{if(i>>>0<k>>>0?(a[i>>0]|0)==41:0){i=f+2|0;c[l>>2]=i;h=h+-1|0;if(!h){e=1;break b}else{f=i;j=i}}else f=i;break}case 40:{if(i>>>0<k>>>0?(a[i>>0]|0)==59:0){j=f+2|0;c[l>>2]=j;f=j;h=h+1|0}else f=i;break}default:f=i}if(f>>>0>=k>>>0){f=j;break a}}aa=p;return e|0}else{g=b+28|0;e=b+16|0}while(0);i=b+4|0;j=a[i+11>>0]|0;h=j<<24>>24<0;j=h?c[b+8>>2]|0:j&255;k=c[e>>2]|0;g=c[g>>2]|0;l=(c[b+32>>2]|0)-g+1|0;b=f-g+1|0;c[m>>2]=h?c[i>>2]|0:i;c[m+4>>2]=j;c[m+8>>2]=k;c[m+12>>2]=(l|0)>1?l:1;c[m+16>>2]=(b|0)>1?b:1;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];aq(d,n,303912,o);o=0;aa=p;return o|0}function aq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+176|0;k=j+144|0;f=j+128|0;g=j;h=j+164|0;i=j+160|0;c[k>>2]=e;c[f>>2]=c[k>>2];c[h>>2]=g;e=(Vz(g,128,d,k)|0)+1|0;if(e>>>0>128){g=aa;aa=aa+((1*e|0)+15&-16)|0;c[h>>2]=g;Vz(g,e,d,f)|0}e=c[a+8>>2]|0;c[i>>2]=1;d=e+4|0;f=c[d>>2]|0;if(f>>>0<(c[e+8>>2]|0)>>>0){k=Uz(g)|0;c[f>>2]=1;i=f+4|0;c[i>>2]=c[b>>2];c[i+4>>2]=c[b+4>>2];c[i+8>>2]=c[b+8>>2];c[i+12>>2]=c[b+12>>2];c[i+16>>2]=c[b+16>>2];Wn(f+24|0,g,k);c[d>>2]=(c[d>>2]|0)+36;aa=j;return}else{bq(e,i,b,h);aa=j;return}}function bq(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+32|0;i=o;m=b+4|0;g=c[b>>2]|0;k=((c[m>>2]|0)-g|0)/36|0;h=k+1|0;if(h>>>0>119304647)HB();n=b+8|0;l=((c[n>>2]|0)-g|0)/36|0;g=l<<1;g=l>>>0<59652323?(g>>>0<h>>>0?h:g):119304647;do if(g)if(g>>>0>119304647)U();else{j=_A(g*36|0)|0;break}else j=0;while(0);h=j+(k*36|0)|0;l=j+(g*36|0)|0;g=c[d>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];d=c[f>>2]|0;f=Uz(d)|0;c[h>>2]=g;g=j+(k*36|0)+4|0;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];Wn(j+(k*36|0)+24|0,d,f);f=h+36|0;d=c[b>>2]|0;g=c[m>>2]|0;if((g|0)==(d|0)){e=d;g=d}else{do{j=h;h=h+-36|0;k=g;g=g+-36|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];j=j+-12|0;k=k+-12|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0}while((g|0)!=(d|0));e=c[b>>2]|0;g=c[m>>2]|0}c[b>>2]=h;c[m>>2]=f;c[n>>2]=l;d=e;if((g|0)!=(d|0))do{h=g+-12|0;g=g+-36|0;if((a[h+11>>0]|0)<0)$A(c[h>>2]|0)}while((g|0)!=(d|0));if(!e){aa=o;return}$A(e);aa=o;return}function cq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+144|0;p=s+96|0;r=s;l=s+40|0;k=s+76|0;n=s+4|0;o=b+88|0;if((c[o>>2]|0)>>>0>d>>>0){r=b+92|0;r=c[r>>2]|0;d=r+d|0;d=d&1;b=b+16+(d*36|0)+20|0;b=c[b>>2]|0;aa=s;return b|0}q=l+20|0;m=b+12|0;e=b+92|0;j=n+11|0;do{Sp(l,c[b>>2]|0,b);a:do if((c[q>>2]|0)==106){if(!(a[(c[m>>2]|0)+10>>0]|0)){c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];c[k+16>>2]=c[l+16>>2];py(n,l);c[r>>2]=(a[j>>0]|0)<0?c[n>>2]|0:n;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];c[p+16>>2]=c[k+16>>2];aq(b,p,309726,r);if((a[j>>0]|0)<0)$A(c[n>>2]|0);c[p>>2]=c[l>>2];c[p+4>>2]=c[l+4>>2];c[p+8>>2]=c[l+8>>2];c[p+12>>2]=c[l+12>>2];c[p+16>>2]=c[l+16>>2];ky(n,p,0);g=c[o>>2]|0;c[o>>2]=g+1;g=b+16+(((c[e>>2]|0)+g&1)*36|0)|0;h=n;i=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));break}f=1;while(1){Sp(p,c[b>>2]|0,b);g=l;h=p;i=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));switch(c[q>>2]|0){case 106:case 21:{f=f+1|0;break}case 30:{f=f+-1|0;break}default:{}}if((f|0)<=0){f=15;break a}}}else{g=c[o>>2]|0;c[o>>2]=g+1;g=b+16+(((c[e>>2]|0)+g&1)*36|0)|0;h=l;i=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));f=15}while(0);if((f|0)==15)f=0}while((c[o>>2]|0)>>>0<=d>>>0);r=c[e>>2]|0;d=r+d|0;d=d&1;b=b+16+(d*36|0)+20|0;b=c[b>>2]|0;aa=s;return b|0}function dq(a){a=a|0;switch(a|0){case 92:case 90:case 100:case 50:case 46:case 48:case 47:case 49:case 45:case 83:case 84:case 85:case 101:case 99:case 96:case 98:case 95:case 97:case 65:case 94:case 80:case 79:case 78:case 77:case 63:case 76:case 62:case 60:case 51:case 103:case 61:case 93:case 71:case 69:case 68:case 74:case 73:case 72:case 58:case 57:case 86:case 87:case 88:case 56:case 55:case 54:case 53:case 89:case 64:case 81:case 104:{a=1;break}default:a=0}return a|0}function eq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+96|0;f=m+76|0;k=m;j=m+40|0;e=m+8|0;i=m+28|0;if((cq(b,0)|0)==(d|0)){o=b+92|0;n=b+16+((c[o>>2]&1)*36|0)|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[o>>2]=c[o>>2]&1^1;o=b+88|0;c[o>>2]=(c[o>>2]|0)+-1;o=0;aa=m;return o|0}h=b+92|0;g=b+16+((c[h>>2]&1)*36|0)|0;l=j;n=g;o=l+36|0;do{c[l>>2]=c[n>>2];l=l+4|0;n=n+4|0}while((l|0)<(o|0));c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h>>2]=c[h>>2]&1^1;o=b+88|0;c[o>>2]=(c[o>>2]|0)+-1;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];qy(i,j);o=i+11|0;l=(a[o>>0]|0)<0?c[i>>2]|0:i;n=jy(d)|0;c[k>>2]=l;c[k+4>>2]=n;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];aq(b,f,309754,k);if((a[o>>0]|0)<0)$A(c[i>>2]|0);o=1;aa=m;return o|0}function fq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+112|0;h=u+80|0;q=u;f=u+72|0;o=u+36|0;g=u+4|0;m=u+24|0;j=f+4|0;k=b+92|0;n=b+88|0;p=o+20|0;e=m+11|0;l=0;while(1){t=cq(b,0)|0;c[f>>2]=t;t=cq(b,1)|0;c[j>>2]=t;c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];if(ea[d&127](h)|0){e=0;f=8;break}i=b+16+((c[k>>2]&1)*36|0)|0;r=o;s=i;t=r+36|0;do{c[r>>2]=c[s>>2];r=r+4|0;s=s+4|0}while((r|0)<(t|0));c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[k>>2]=c[k>>2]&1^1;c[n>>2]=(c[n>>2]|0)+-1;if((c[p>>2]|0)==108?(c[g>>2]=c[o>>2],c[g+4>>2]=c[o+4>>2],c[g+8>>2]=c[o+8>>2],c[g+12>>2]=c[o+12>>2],c[g+16>>2]=c[o+16>>2],qy(m,o),c[q>>2]=(a[e>>0]|0)<0?c[m>>2]|0:m,c[h>>2]=c[g>>2],c[h+4>>2]=c[g+4>>2],c[h+8>>2]=c[g+8>>2],c[h+12>>2]=c[g+12>>2],c[h+16>>2]=c[g+16>>2],aq(b,h,309788,q),(a[e>>0]|0)<0):0)$A(c[m>>2]|0);l=l+1|0;if(l>>>0>=10){e=1;f=8;break}}if((f|0)==8){aa=u;return e|0}return 0}function gq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=aa;aa=aa+112|0;m=q+88|0;p=q;k=q+52|0;n=q+40|0;l=q+8|0;o=q+28|0;g=b+92|0;f=b+16+((c[g>>2]&1)*36|0)|0;h=k;i=f;j=h+36|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[g>>2]=c[g>>2]&1^1;g=b+88|0;c[g>>2]=(c[g>>2]|0)+-1;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;g=d+4|0;if((c[d>>2]|0)!=(c[g>>2]|0)){qB(n,330878)|0;f=(c[g>>2]|0)-(c[d>>2]|0)|0;if(f|0){h=0;f=(f|0)/12|0;do{do if(h|0)if((h|0)==(f+-1|0)){vB(n,309832)|0;break}else{vB(n,330984)|0;break}while(0);j=c[d>>2]|0;r=j+(h*12|0)|0;f=a[r+11>>0]|0;i=f<<24>>24<0;uB(n,i?c[r>>2]|0:r,i?c[j+(h*12|0)+4>>2]|0:f&255)|0;h=h+1|0;f=((c[g>>2]|0)-(c[d>>2]|0)|0)/12|0}while(h>>>0<f>>>0)}if(e|0){vB(n,309837)|0;vB(n,e)|0;vB(n,330336)|0}};c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];c[l+12>>2]=c[k+12>>2];c[l+16>>2]=c[k+16>>2];qy(o,k);r=o+11|0;f=n+11|0;k=(a[f>>0]|0)<0?c[n>>2]|0:n;c[p>>2]=(a[r>>0]|0)<0?c[o>>2]|0:o;c[p+4>>2]=k;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];c[m+16>>2]=c[l+16>>2];aq(b,m,309845,p);if((a[r>>0]|0)<0)$A(c[o>>2]|0);if((a[f>>0]|0)>=0){aa=q;return}$A(c[n>>2]|0);aa=q;return}function hq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+96|0;m=n+52|0;h=n+8|0;l=n+16|0;g=n;if((cq(b,0)|0)==44){f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;i=l;j=e;k=i+36|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;e=b+88|0;c[e>>2]=(c[e>>2]|0)+-1;e=c[l+28>>2]|0;f=c[l+32>>2]|0;k=g;c[k>>2]=-1;c[k+4>>2]=0;if((om(e,e+f|0,g)|0)==1){c[h>>2]=f;c[h+4>>2]=e;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];c[m+16>>2]=c[l+16>>2];aq(b,m,309870,h)}El(m,c[g>>2]|0,l);Hl(d,m)|0;Ml(m);m=0;aa=n;return m|0}if((cq(b,0)|0)==110){f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;i=m;j=e;k=i+36|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;b=b+88|0;c[b>>2]=(c[b>>2]|0)+-1;Fl(l,c[m+24>>2]|0,c[m+28>>2]|0,m);Hl(d,l)|0;Ml(l);m=0;aa=n;return m|0}h=_A(16)|0;c[l>>2]=h;c[l+8>>2]=-2147483632;c[l+4>>2]=15;i=h;j=309889;k=i+15|0;do{a[i>>0]=a[j>>0]|0;i=i+1|0;j=j+1|0}while((i|0)<(k|0));a[h+15>>0]=0;k=l+12|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;a[k+11>>0]=6;a[k>>0]=a[309905]|0;a[k+1>>0]=a[309906]|0;a[k+2>>0]=a[309907]|0;a[k+3>>0]=a[309908]|0;a[k+4>>0]=a[309909]|0;a[k+5>>0]=a[309910]|0;a[k+6>>0]=0;f=m+4|0;g=_A(24)|0;c[m>>2]=g;d=g+24|0;c[m+8>>2]=d;cB(g,l);e=g+12|0;cB(e,k);c[f>>2]=d;gq(b,m,309912);if((a[g+23>>0]|0)<0)$A(c[e>>2]|0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);$A(h);m=1;aa=n;return m|0}function iq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+32|0;h=j+12|0;i=j;if(jq(b,d)|0){b=0;aa=j;return b|0}g=_A(16)|0;c[i>>2]=g;c[i+8>>2]=-2147483632;c[i+4>>2]=14;d=g;e=309923;f=d+14|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));a[g+14>>0]=0;d=h+4|0;e=_A(12)|0;c[h>>2]=e;f=e+12|0;c[h+8>>2]=f;cB(e,i);c[d>>2]=f;gq(b,h,309938);if((a[e+11>>0]|0)<0)$A(c[e>>2]|0);c[d>>2]=e;$A(e);$A(g);b=1;aa=j;return b|0}function jq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((cq(a,0)|0)==21?(cq(a,1)|0)==25:0){e=a+92|0;f=a+16+((c[e>>2]&1)*36|0)|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;f=c[e>>2]&1^1;c[e>>2]=f;d=a+88|0;c[d>>2]=(c[d>>2]|0)+-1;f=a+16+(f*36|0)|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[e>>2]=c[e>>2]&1^1;c[d>>2]=(c[d>>2]|0)+-1;if((kq(a,b)|0)==1){f=1;return f|0}eq(a,30)|0;f=1;return f|0}f=cq(a,0)|0;d=cq(a,1)|0;if((f|0)!=21){f=0;return f|0}a:do if(!(dq(d)|0)){switch(d|0){case 102:case 70:case 75:case 52:break a;default:d=0}return d|0}while(0);lq(a,b)|0;f=1;return f|0}function kq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+64|0;g=l+24|0;k=l+12|0;e=l;i=rq(b,d)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+11>>0]=8;h=e;c[h>>2]=1763733089;c[h+4>>2]=1920234350;a[e+8>>0]=0;h=k+4|0;j=_A(12)|0;c[k>>2]=j;f=j+12|0;c[k+8>>2]=f;cB(j,e);c[h>>2]=f;if((cq(b,0)|0)==21){d=b+92|0;e=b+16+((c[d>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[d>>2]=c[d>>2]&1^1;e=b+88|0;f=(c[e>>2]|0)+-1|0;c[e>>2]=f;if(!f){Sp(g,c[b>>2]|0,b);f=c[e>>2]|0;c[e>>2]=f+1;f=b+16+(((c[d>>2]|0)+f&1)*36|0)|0;d=g;e=f+36|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0))}gq(b,k,0);d=1}else d=0;if((a[j+11>>0]|0)>=0){c[h>>2]=j;$A(j);b=d?1:i;aa=l;return b|0}$A(c[j>>2]|0);c[h>>2]=j;$A(j);b=d?1:i;aa=l;return b|0}function lq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=aa;aa=aa+96|0;C=D+60|0;h=D+24|0;m=D+40|0;B=D;g=D+28|0;if((cq(b,0)|0)!=21){aa=D;return 1}if(dq(cq(b,1)|0)|0){e=b+92|0;f=b+16+((c[e>>2]&1)*36|0)|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[e>>2]=c[e>>2]&1^1;f=b+88|0;c[f>>2]=(c[f>>2]|0)+-1;c[m>>2]=0;if((mq(b,m)|0)==1){e=c[m>>2]|0;c[m>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);aa=D;return 1}if((nq(b,d)|0)==1){e=c[m>>2]|0;c[m>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);aa=D;return 1}c[g+8>>2]=117440512;a[g>>0]=a[309954]|0;a[g+1>>0]=a[309955]|0;a[g+2>>0]=a[309956]|0;a[g+3>>0]=a[309957]|0;a[g+4>>0]=a[309958]|0;a[g+5>>0]=a[309959]|0;a[g+6>>0]=a[309960]|0;a[g+7>>0]=0;h=B+4|0;i=_A(12)|0;c[B>>2]=i;A=i+12|0;c[B+8>>2]=A;cB(i,g);c[h>>2]=A;if((cq(b,0)|0)==21){A=b+16+((c[e>>2]&1)*36|0)|0;c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;c[A+16>>2]=0;c[A+20>>2]=0;c[e>>2]=c[e>>2]&1^1;A=(c[f>>2]|0)+-1|0;c[f>>2]=A;if(!A){Sp(C,c[b>>2]|0,b);k=c[f>>2]|0;c[f>>2]=k+1;k=b+16+(((c[e>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}gq(b,B,0);e=1}else e=0;if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);c[h>>2]=i;$A(i);g=c[m>>2]|0;c[m>>2]=0;if(e){if(g|0)ma[c[(c[g>>2]|0)+4>>2]&255](g);aa=D;return 1}f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[g+8>>2]=e;e=e+4|0}c[e>>2]=g;c[f>>2]=g;d=d+8|0;c[d>>2]=(c[d>>2]|0)+1;b=eq(b,30)|0;b=(b|0)==1;b=b&1;aa=D;return b|0}A=b+88|0;if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;e=b+92|0;k=b+16+(((c[e>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}else e=b+92|0;y=b+16+((c[e>>2]&1)*36|0)|0;c[m>>2]=c[y>>2];c[m+4>>2]=c[y+4>>2];c[m+8>>2]=c[y+8>>2];c[m+12>>2]=c[y+12>>2];c[m+16>>2]=c[y+16>>2];a:do switch(cq(b,1)|0){case 52:{g=b+92|0;h=b+16+((c[g>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;h=c[g>>2]&1^1;c[g>>2]=h;c[A>>2]=(c[A>>2]|0)+-1;h=b+16+(h*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;g=_A(144)|0;c[g+4>>2]=0;h=g+8|0;c[h>>2]=0;e=g+12|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];c[g+32>>2]=7;c[g>>2]=288732;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;El(g+52|0,-1,C);k=g+88|0;l=k+56|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[h>>2]=e;e=e+4|0}c[e>>2]=g;e=f;z=126;break}case 75:{g=b+92|0;h=b+16+((c[g>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;h=c[g>>2]&1^1;c[g>>2]=h;c[A>>2]=(c[A>>2]|0)+-1;h=b+16+(h*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;g=_A(144)|0;c[g+4>>2]=0;h=g+8|0;c[h>>2]=0;e=g+12|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];c[g+32>>2]=25;c[g>>2]=288476;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;El(g+52|0,-1,C);k=g+88|0;l=k+56|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[h>>2]=e;e=e+4|0}c[e>>2]=g;e=f;z=126;break}case 70:{w=b+92|0;g=b+16+((c[w>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;g=c[w>>2]&1^1;c[w>>2]=g;c[A>>2]=(c[A>>2]|0)+-1;g=b+16+(g*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[w>>2]=c[w>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;g=_A(176)|0;c[g+4>>2]=0;y=g+8|0;c[y>>2]=0;e=g+12|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];c[g+32>>2]=20;c[g>>2]=288556;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;El(g+52|0,-1,C);k=g+88|0;l=k+88|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);b:do if((qq(b,g+48|0)|0)!=1){v=cq(b,0)|0;e=cq(b,1)|0;c:do if((v|0)==21){if(!(dq(e)|0))switch(e|0){case 102:case 70:case 75:case 52:break;default:break c}c[C>>2]=0;t=C+4|0;c[t>>2]=0;v=C+8|0;c[v>>2]=0;if((lq(b,C)|0)!=1){h=c[C>>2]|0;f=h;if(!h){e=f;f=0}else{s=d+4|0;u=d+8|0;r=c[s>>2]|0;e=f;k=f;n=c[t>>2]|0;q=c[v>>2]|0;p=c[u>>2]|0;while(1){o=r;r=h;h=c[r+4>>2]|0;do if((k|0)!=(n|0)){f=r+8|0;m=c[f>>2]|0;i=r+4|0;l=m;if(!m){j=h;c[C>>2]=h;e=j;k=j}else{c[m+4>>2]=h;j=c[i>>2]|0}if(!j){c[t>>2]=l;j=m;break}else{c[j+8>>2]=l;j=n;break}}else{c[t>>2]=0;c[C>>2]=0;e=0;k=0;j=0;i=r+4|0;f=r+8|0}while(0);c[f>>2]=0;c[i>>2]=0;q=q+-1|0;if(!o)f=d;else{c[r+8>>2]=o;f=o+4|0}c[f>>2]=r;p=p+1|0;if(!h)break;else n=j}c[v>>2]=q;c[s>>2]=r;c[u>>2]=p;f=0}}else{e=c[C>>2]|0;f=1}if(e|0)do{v=e;e=c[e+4>>2]|0;ma[c[(c[v>>2]|0)+4>>2]&255](v)}while((e|0)!=0);if(f|0)break b}while(0);if((cq(b,0)|0)==21?(cq(b,1)|0)==34:0){B=b+16+((c[w>>2]&1)*36|0)|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;B=c[w>>2]&1^1;c[w>>2]=B;c[A>>2]=(c[A>>2]|0)+-1;B=b+16+(B*36|0)|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[w>>2]=c[w>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;if((kq(b,g+112|0)|0)==1)break;if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[w>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}v=b+16+((c[w>>2]&1)*36|0)|0;B=g+124|0;c[B>>2]=c[v>>2];c[B+4>>2]=c[v+4>>2];c[B+8>>2]=c[v+8>>2];c[B+12>>2]=c[v+12>>2];c[B+16>>2]=c[v+16>>2];if((eq(b,30)|0)==1)break;if((cq(b,0)|0)==21?(cq(b,1)|0)==66:0){B=b+16+((c[w>>2]&1)*36|0)|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;B=c[w>>2]&1^1;c[w>>2]=B;c[A>>2]=(c[A>>2]|0)+-1;B=b+16+(B*36|0)|0;c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;c[B+16>>2]=0;c[B+20>>2]=0;c[w>>2]=c[w>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;if((kq(b,g+144|0)|0)==1)break;if((eq(b,30)|0)==1)break}else z=75;d:do if((z|0)==75?(B=cq(b,0)|0,x=cq(b,1)|0,(B|0)==21):0){if(!(dq(x)|0))switch(x|0){case 102:case 70:case 75:case 52:break;default:break d}if((lq(b,g+144|0)|0)==1)break b}while(0);if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[w>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}B=b+16+((c[w>>2]&1)*36|0)|0;C=g+156|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];c[C+16>>2]=c[B+16>>2]}else z=82;e:do if((z|0)==82){z=cq(b,0)|0;e=cq(b,1)|0;f:do if((z|0)==21){if(!(dq(e)|0))switch(e|0){case 102:case 70:case 75:case 52:break;default:break f}if((lq(b,g+112|0)|0)==1)break b;if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[w>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}e=b+16+((c[w>>2]&1)*36|0)|0;B=g+124|0;c[B>>2]=c[e>>2];c[B+4>>2]=c[e+4>>2];c[B+8>>2]=c[e+8>>2];c[B+12>>2]=c[e+12>>2];c[B+16>>2]=c[e+16>>2];B=cq(b,0)|0;e=cq(b,1)|0;if((B|0)!=21)break e;if(!(dq(e)|0))switch(e|0){case 102:case 70:case 75:case 52:break;default:break e}if((lq(b,g+144|0)|0)==1)break b;if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[w>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}B=b+16+((c[w>>2]&1)*36|0)|0;C=g+156|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];c[C+16>>2]=c[B+16>>2];break e}while(0);if((cq(b,0)|0)==21){d=b+16+((c[w>>2]&1)*36|0)|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[w>>2]=c[w>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1}a[B+11>>0]=10;k=B;j=309962;l=k+10|0;do{a[k>>0]=a[j>>0]|0;k=k+1|0;j=j+1|0}while((k|0)<(l|0));a[B+10>>0]=0;e=C+4|0;f=_A(12)|0;c[C>>2]=f;d=f+12|0;c[C+8>>2]=d;cB(f,B);c[e>>2]=d;gq(b,C,309973);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);break b}while(0);f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[y>>2]=e;e=e+4|0}c[e>>2]=g;e=f;z=126;break a}while(0);ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break}case 102:{f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=c[f>>2]&1^1;c[f>>2]=e;c[A>>2]=(c[A>>2]|0)+-1;z=b+16+(e*36|0)|0;c[B>>2]=c[z>>2];c[B+4>>2]=c[z+4>>2];c[B+8>>2]=c[z+8>>2];c[B+12>>2]=c[z+12>>2];c[B+16>>2]=c[z+16>>2];c[B+20>>2]=c[z+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;c[z+16>>2]=0;c[z+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[A>>2]=(c[A>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(C,e);c[h>>2]=c[C>>2];c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];c[C+16>>2]=c[B+16>>2];aq(b,C,309809,h)}g=_A(156)|0;c[g+4>>2]=0;h=g+8|0;c[h>>2]=0;e=g+12|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];c[e+16>>2]=c[m+16>>2];c[g+32>>2]=53;c[g>>2]=288092;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;El(g+52|0,-1,C);k=g+88|0;l=k+68|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((qq(b,g+48|0)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if((rq(b,g+112|0)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if(!(c[A>>2]|0)){Sp(C,c[b>>2]|0,b);k=c[A>>2]|0;c[A>>2]=k+1;k=b+16+(((c[f>>2]|0)+k&1)*36|0)|0;j=C;l=k+36|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(l|0))}B=b+16+((c[f>>2]&1)*36|0)|0;C=g+124|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];c[C+16>>2]=c[B+16>>2];if((eq(b,21)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if((eq(b,59)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if((kq(b,g+144|0)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}if((eq(b,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);z=125;break a}f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[h>>2]=e;e=e+4|0}c[e>>2]=g;e=f;z=126;break}default:z=125}while(0);if((z|0)==125){aa=D;return 1}else if((z|0)==126){c[e>>2]=g;d=d+8|0;c[d>>2]=(c[d>>2]|0)+1;b=eq(b,30)|0;b=(b|0)==1;b=b&1;aa=D;return b|0}return 0}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=aa;aa=aa+480|0;V=W+336|0;O=W+328|0;N=W+320|0;H=W+312|0;G=W+304|0;F=W+296|0;E=W+288|0;D=W+280|0;B=W+272|0;A=W+264|0;z=W+256|0;y=W+248|0;x=W+240|0;w=W+232|0;v=W+224|0;u=W+216|0;t=W+208|0;s=W+200|0;q=W+192|0;p=W+184|0;o=W+176|0;n=W+168|0;m=W+160|0;l=W+152|0;k=W+144|0;j=W+136|0;i=W+128|0;h=W+120|0;C=W+112|0;r=W+104|0;g=W+96|0;f=W+88|0;S=W+48|0;R=W;U=W+384|0;I=W+440|0;J=W+404|0;Q=W+24|0;P=W+372|0;T=b+88|0;if(!(c[T>>2]|0)){Sp(V,c[b>>2]|0,b);K=c[T>>2]|0;c[T>>2]=K+1;e=b+92|0;K=b+16+(((c[e>>2]|0)+K&1)*36|0)|0;L=V;M=K+36|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0}while((K|0)<(M|0))}else e=b+92|0;M=b+16+((c[e>>2]&1)*36|0)|0;c[U>>2]=c[M>>2];c[U+4>>2]=c[M+4>>2];c[U+8>>2]=c[M+8>>2];c[U+12>>2]=c[M+12>>2];c[U+16>>2]=c[M+16>>2];do switch(cq(b,0)|0){case 104:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=55;c[V>>2]=288044;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 81:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=32;c[V>>2]=288220;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 64:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=17;c[V>>2]=288588;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 89:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=39;c[V>>2]=288140;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 53:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=8;c[b>>2]=288716;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 54:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=9;c[b>>2]=288700;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 55:{f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;f=_A(108)|0;c[f+4>>2]=0;c[f+8>>2]=0;e=f+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[f+32>>2]=10;c[f>>2]=288684;U=f+36|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(U,-1,V);e=f+72|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(e,-1,V);if((hq(b,U)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=W;return d|0}if((hq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=W;return d|0}e=c[d>>2]|0;c[d>>2]=f;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 56:{g=b+92|0;e=b+16+((c[g>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;g=_A(84)|0;c[g+4>>2]=0;c[g+8>>2]=0;e=g+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[g+32>>2]=11;c[g>>2]=288668;U=g+36|0;c[U>>2]=0;e=g+40|0;c[e>>2]=0;c[g+44>>2]=0;f=g+48|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(f,-1,V);if((Aq(b,U)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}Jl(f,(c[e>>2]|0)+-36|0)|0;V=(c[e>>2]|0)+-36|0;Ml(V);c[e>>2]=V;e=c[d>>2]|0;c[d>>2]=g;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 88:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=36;c[V>>2]=288188;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 57:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=12;c[b>>2]=288652;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 58:{g=b+92|0;e=b+16+((c[g>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;g=_A(136)|0;c[g+4>>2]=0;c[g+8>>2]=0;e=g+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[g+32>>2]=13;c[g>>2]=288636;U=g+36|0;a[U>>0]=0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(g+40|0,-1,V);e=g+76|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;f=g+100|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(f,-1,V);if((wq(b,U)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}if((xq(b,26,e)|0)!=1?(xq(b,29,g+88|0)|0)!=1:0){c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(I,0,V);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(f,I)|0;else hq(b,f)|0;Ml(I);e=c[d>>2]|0;c[d>>2]=g;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}case 87:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[f>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,f)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=37;c[b>>2]=288172;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 86:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[g>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,g)}g=_A(136)|0;c[g+4>>2]=0;c[g+8>>2]=0;e=g+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[g+32>>2]=38;c[g>>2]=288156;U=g+36|0;a[U>>0]=0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(g+40|0,-1,V);e=g+76|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;f=g+100|0;c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(f,-1,V);if((wq(b,U)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}if((xq(b,26,e)|0)!=1?(xq(b,29,g+88|0)|0)!=1:0){c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;El(J,0,V);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(f,J)|0;else hq(b,f)|0;Ml(J);e=c[d>>2]|0;c[d>>2]=g;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=W;return d|0}case 72:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=22;c[b>>2]=288524;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 73:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=23;c[b>>2]=288508;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 74:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=24;c[b>>2]=288492;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 68:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=18;c[b>>2]=287932;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 69:{Q=b+92|0;P=b+16+((c[Q>>2]&1)*36|0)|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=19;c[b>>2]=288572;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 71:{e=b+92|0;Q=c[e>>2]&1;P=b+16+(Q*36|0)|0;Q=c[b+16+(Q*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[e>>2]=c[e>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;e=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;V=b+12|0;c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[b+32>>2]=21;c[b>>2]=288540;c[b+36>>2]=Q;c[b+40>>2]=U;c[b+44>>2]=e;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 93:{e=b+92|0;Q=c[e>>2]&1;P=b+16+(Q*36|0)|0;Q=c[b+16+(Q*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[e>>2]=c[e>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;e=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;V=b+12|0;c[V>>2]=c[R>>2];c[V+4>>2]=c[R+4>>2];c[V+8>>2]=c[R+8>>2];c[V+12>>2]=c[R+12>>2];c[V+16>>2]=c[R+16>>2];c[b+32>>2]=43;c[b>>2]=288124;c[b+36>>2]=Q;c[b+40>>2]=U;c[b+44>>2]=e;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 61:{c[V>>2]=0;c[V+4>>2]=0;c[V+8>>2]=0;c[V+12>>2]=0;c[V+16>>2]=0;Nl(S,0,V);if((Dq(b,S)|0)==1){d=1;aa=W;return d|0}f=_A(80)|0;c[f+4>>2]=0;c[f+8>>2]=0;K=f+12|0;c[K>>2]=c[U>>2];c[K+4>>2]=c[U+4>>2];c[K+8>>2]=c[U+8>>2];c[K+12>>2]=c[U+12>>2];c[K+16>>2]=c[U+16>>2];c[f+32>>2]=15;c[f>>2]=287916;K=f+40|0;L=S;M=K+40|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0}while((K|0)<(M|0));e=c[d>>2]|0;c[d>>2]=f;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 103:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[r>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,r)}V=_A(40)|0;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=54;c[V>>2]=288076;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 51:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[C>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,C)}V=_A(40)|0;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=6;c[V>>2]=288748;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 60:{V=_A(40)|0;S=b+92|0;e=c[S>>2]&1;R=b+16+(e*36|0)|0;e=c[b+16+(e*36|0)+24>>2]|0;c[R>>2]=0;c[R+4>>2]=0;c[R+8>>2]=0;c[R+12>>2]=0;c[R+16>>2]=0;c[R+20>>2]=0;c[S>>2]=c[S>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=14;c[V>>2]=288620;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 62:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[h>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,h)}V=_A(40)|0;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=16;c[V>>2]=288604;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 76:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[i>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,i)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=26;c[V>>2]=288460;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 77:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[j>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,j)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=28;c[V>>2]=288428;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 63:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[k>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,k)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=27;c[b>>2]=288444;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 79:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[l>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,l)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=30;c[b>>2]=288396;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 80:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=31;c[V>>2]=288380;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 78:{V=b+92|0;e=b+16+((c[V>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[V>>2]=c[V>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=29;c[V>>2]=288412;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 94:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[m>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,m)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=44;c[V>>2]=288364;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 65:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[n>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,n)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=45;c[b>>2]=288348;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 97:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[o>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,o)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=46;c[b>>2]=288332;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 95:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[p>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,p)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=47;c[b>>2]=288316;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 98:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[q>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,q)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=50;c[b>>2]=288300;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 96:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[s>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,s)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=48;c[b>>2]=288284;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 99:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[t>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,t)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=49;c[b>>2]=288268;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 84:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[u>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,u)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=34;c[V>>2]=288252;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 83:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[v>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,v)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=33;c[V>>2]=288236;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 101:{Q=b+92|0;e=c[Q>>2]&1;P=b+16+(e*36|0)|0;c[S>>2]=c[P>>2];c[S+4>>2]=c[P+4>>2];c[S+8>>2]=c[P+8>>2];c[S+12>>2]=c[P+12>>2];c[S+16>>2]=c[P+16>>2];c[S+20>>2]=c[P+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[P+16>>2]=0;c[P+20>>2]=0;c[Q>>2]=c[Q>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[w>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,w)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;El(V,-1,S);if((hq(b,V)|0)==1){Ml(V);d=1;aa=W;return d|0}b=_A(72)|0;c[b+4>>2]=0;c[b+8>>2]=0;e=b+12|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];c[e+16>>2]=c[R+16>>2];c[b+32>>2]=52;c[b>>2]=288108;Il(b+36|0,V);e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);Ml(V);d=0;aa=W;return d|0}case 85:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[x>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,x)}V=_A(36)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=35;c[V>>2]=288204;e=c[d>>2]|0;c[d>>2]=V;if(!e){d=0;aa=W;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 46:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[y>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,y)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=4;c[b>>2]=288764;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 50:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[z>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,z)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=5;c[b>>2]=288780;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 45:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[A>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,A)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=0;c[b>>2]=288844;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 49:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[B>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,B)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=3;c[b>>2]=288828;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 47:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[D>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,D)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=1;c[b>>2]=288812;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 48:{P=b+92|0;e=c[P>>2]&1;O=b+16+(e*36|0)|0;c[Q>>2]=c[O>>2];c[Q+4>>2]=c[O+4>>2];c[Q+8>>2]=c[O+8>>2];c[Q+12>>2]=c[O+12>>2];c[Q+16>>2]=c[O+16>>2];c[Q+20>>2]=c[O+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[O+16>>2]=0;c[O+20>>2]=0;c[P>>2]=c[P>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[E>>2]=c[V>>2];c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,309809,E)};c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];c[R+16>>2]=c[U+16>>2];Bq(b,V);Cq(b,S);b=_A(48)|0;U=c[S>>2]|0;V=c[V>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;T=b+12|0;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2];c[T+16>>2]=c[R+16>>2];c[b+32>>2]=2;c[b>>2]=288796;c[b+36>>2]=e;c[b+40>>2]=U;c[b+44>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 100:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[F>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,F)}V=_A(40)|0;c[V+4>>2]=0;c[V+8>>2]=0;b=V+12|0;c[b>>2]=c[U>>2];c[b+4>>2]=c[U+4>>2];c[b+8>>2]=c[U+8>>2];c[b+12>>2]=c[U+12>>2];c[b+16>>2]=c[U+16>>2];c[V+32>>2]=51;c[V>>2]=288060;c[V+36>>2]=e;e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 90:{R=b+92|0;e=c[R>>2]&1;Q=b+16+(e*36|0)|0;c[S>>2]=c[Q>>2];c[S+4>>2]=c[Q+4>>2];c[S+8>>2]=c[Q+8>>2];c[S+12>>2]=c[Q+12>>2];c[S+16>>2]=c[Q+16>>2];c[S+20>>2]=c[Q+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q+16>>2]=0;c[Q+20>>2]=0;c[R>>2]=c[R>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(V,e);c[G>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,G)}if((Eq(b,V)|0)==1){d=1;aa=W;return d|0}b=_A(48)|0;T=c[V>>2]|0;V=c[V+4>>2]|0;c[b+4>>2]=0;c[b+8>>2]=0;S=b+12|0;c[S>>2]=c[U>>2];c[S+4>>2]=c[U+4>>2];c[S+8>>2]=c[U+8>>2];c[S+12>>2]=c[U+12>>2];c[S+16>>2]=c[U+16>>2];c[b+32>>2]=40;c[b>>2]=288028;c[b+36>>2]=e;e=b+40|0;c[e>>2]=T;c[e+4>>2]=V;e=c[d>>2]|0;c[d>>2]=b;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}case 92:{i=b+92|0;j=c[i>>2]&1;M=b+16+(j*36|0)|0;c[S>>2]=c[M>>2];c[S+4>>2]=c[M+4>>2];c[S+8>>2]=c[M+8>>2];c[S+12>>2]=c[M+12>>2];c[S+16>>2]=c[M+16>>2];c[S+20>>2]=c[M+20>>2];j=c[b+16+(j*36|0)+24>>2]|0;c[M>>2]=0;c[M+4>>2]=0;c[M+8>>2]=0;c[M+12>>2]=0;c[M+16>>2]=0;c[M+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;if(!(Dm(j,c[b+12>>2]|0)|0)){Am(V,j);c[H>>2]=c[V>>2];c[V>>2]=c[S>>2];c[V+4>>2]=c[S+4>>2];c[V+8>>2]=c[S+8>>2];c[V+12>>2]=c[S+12>>2];c[V+16>>2]=c[S+16>>2];aq(b,V,309809,H)}h=0;while(1){if(!(c[T>>2]|0)){Sp(V,c[b>>2]|0,b);K=c[T>>2]|0;c[T>>2]=K+1;K=b+16+(((c[i>>2]|0)+K&1)*36|0)|0;L=V;M=K+36|0;do{c[K>>2]=c[L>>2];K=K+4|0;L=L+4|0}while((K|0)<(M|0))}S=b+16+((c[i>>2]&1)*36|0)|0;c[Q>>2]=c[S>>2];c[Q+4>>2]=c[S+4>>2];c[Q+8>>2]=c[S+8>>2];c[Q+12>>2]=c[S+12>>2];c[Q+16>>2]=c[S+16>>2];if((cq(b,0)|0)!=44){h=245;break}g=c[i>>2]&1;S=b+16+(g*36|0)|0;f=c[b+16+(g*36|0)+28>>2]|0;g=c[b+16+(g*36|0)+32>>2]|0;c[S>>2]=0;c[S+4>>2]=0;c[S+8>>2]=0;c[S+12>>2]=0;c[S+16>>2]=0;c[S+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[T>>2]=(c[T>>2]|0)+-1;c[P>>2]=0;if((sm(f,f+g|0,P,0)|0)==1){h=249;break}e=c[P>>2]|0;if(e>>>0>31){h=251;break}a[R+h>>0]=e;h=h+1|0;if(h>>>0>=16){h=254;break}}if((h|0)==245){g=_A(48)|0;c[P>>2]=g;c[P+8>>2]=-2147483600;c[P+4>>2]=33;K=g;L=310037;M=K+33|0;do{a[K>>0]=a[L>>0]|0;K=K+1|0;L=L+1|0}while((K|0)<(M|0));a[g+33>>0]=0;e=V+4|0;f=_A(12)|0;c[V>>2]=f;d=f+12|0;c[V+8>>2]=d;cB(f,P);c[e>>2]=d;gq(b,V,0);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g)}else if((h|0)==249){c[N>>2]=g;c[N+4>>2]=f;c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,310071,N);h=252}else if((h|0)==251){c[O>>2]=g;c[O+4>>2]=f;c[V>>2]=c[Q>>2];c[V+4>>2]=c[Q+4>>2];c[V+8>>2]=c[Q+8>>2];c[V+12>>2]=c[Q+12>>2];c[V+16>>2]=c[Q+16>>2];aq(b,V,310094,O);h=252}else if((h|0)==254){V=_A(56)|0;c[V+4>>2]=0;c[V+8>>2]=0;e=V+12|0;c[e>>2]=c[U>>2];c[e+4>>2]=c[U+4>>2];c[e+8>>2]=c[U+8>>2];c[e+12>>2]=c[U+12>>2];c[e+16>>2]=c[U+16>>2];c[V+32>>2]=41;c[V>>2]=288012;c[V+36>>2]=j;e=V+40|0;c[e>>2]=c[R>>2];c[e+4>>2]=c[R+4>>2];c[e+8>>2]=c[R+8>>2];c[e+12>>2]=c[R+12>>2];e=c[d>>2]|0;c[d>>2]=V;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=W;return d|0}d=1;aa=W;return d|0}default:{d=1;aa=W;return d|0}}while(0);return 0} +function ou(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0;ce=aa;aa=aa+1872|0;R=ce+1744|0;G=ce+1856|0;be=ce+1736|0;ae=ce+1728|0;Ed=ce+1720|0;Dd=ce+1712|0;Bd=ce+1704|0;Ad=ce+1696|0;zd=ce+1688|0;yd=ce+1680|0;wd=ce+1672|0;vd=ce+1664|0;ud=ce+1656|0;td=ce+1648|0;sd=ce+1640|0;qd=ce+1632|0;pd=ce+1624|0;od=ce+1616|0;nd=ce+1608|0;md=ce+1600|0;ld=ce+1592|0;kd=ce+1584|0;jd=ce+1576|0;id=ce+1568|0;hd=ce+1560|0;gd=ce+1552|0;fd=ce+1544|0;dd=ce+1536|0;cd=ce+1528|0;bd=ce+1520|0;ad=ce+1512|0;$c=ce+1504|0;_c=ce+1496|0;Zc=ce+1488|0;Yc=ce+1480|0;Wc=ce+1472|0;Vc=ce+1464|0;Uc=ce+1456|0;Tc=ce+1448|0;Sc=ce+1440|0;Rc=ce+1432|0;Qc=ce+1424|0;Pc=ce+1416|0;Nc=ce+1408|0;Mc=ce+1400|0;Lc=ce+1392|0;Kc=ce+1384|0;Jc=ce+1376|0;Ic=ce+1368|0;Hc=ce+1360|0;Gc=ce+1352|0;Fc=ce+1344|0;Ec=ce+1336|0;Dc=ce+1328|0;Bc=ce+1320|0;Ac=ce+1312|0;zc=ce+1304|0;yc=ce+1296|0;xc=ce+1288|0;wc=ce+1280|0;vc=ce+1272|0;uc=ce+1264|0;sc=ce+1256|0;rc=ce+1248|0;qc=ce+1240|0;pc=ce+1232|0;oc=ce+1224|0;nc=ce+1216|0;mc=ce+1208|0;lc=ce+1200|0;jc=ce+1192|0;ic=ce+1184|0;hc=ce+1176|0;gc=ce+1168|0;fc=ce+1160|0;ec=ce+1152|0;dc=ce+1144|0;cc=ce+1136|0;bc=ce+1128|0;$b=ce+1120|0;_b=ce+1112|0;Zb=ce+1104|0;Yb=ce+1096|0;Xb=ce+1088|0;Wb=ce+1080|0;Vb=ce+1072|0;Ub=ce+1064|0;Tb=ce+1056|0;Rb=ce+1048|0;Qb=ce+1040|0;Pb=ce+1032|0;Ob=ce+1024|0;Mb=ce+1016|0;Lb=ce+1008|0;Kb=ce+1e3|0;Jb=ce+992|0;Ib=ce+984|0;Gb=ce+976|0;Fb=ce+968|0;Eb=ce+960|0;Db=ce+952|0;Cb=ce+944|0;Bb=ce+936|0;Ab=ce+928|0;yb=ce+920|0;xb=ce+912|0;wb=ce+904|0;vb=ce+896|0;ub=ce+888|0;tb=ce+880|0;sb=ce+872|0;rb=ce+864|0;qb=ce+856|0;pb=ce+848|0;nb=ce+840|0;mb=ce+832|0;lb=ce+824|0;kb=ce+816|0;jb=ce+808|0;ib=ce+800|0;hb=ce+792|0;gb=ce+784|0;fb=ce+776|0;eb=ce+768|0;db=ce+760|0;cb=ce+752|0;ab=ce+744|0;$a=ce+736|0;_a=ce+728|0;Za=ce+720|0;Ya=ce+712|0;Xa=ce+704|0;Wa=ce+696|0;Va=ce+688|0;Ua=ce+680|0;Sa=ce+672|0;Ra=ce+664|0;Qa=ce+656|0;Pa=ce+648|0;Oa=ce+640|0;Na=ce+632|0;Ma=ce+624|0;Ka=ce+616|0;Ja=ce+608|0;Ia=ce+600|0;Ha=ce+592|0;Ga=ce+584|0;Fa=ce+576|0;Ea=ce+568|0;Da=ce+560|0;Ba=ce+552|0;Aa=ce+544|0;za=ce+536|0;ya=ce+528|0;xa=ce+520|0;wa=ce+512|0;va=ce+504|0;ua=ce+496|0;ta=ce+488|0;sa=ce+480|0;ra=ce+472|0;qa=ce+464|0;pa=ce+456|0;na=ce+448|0;ma=ce+440|0;la=ce+432|0;ka=ce+424|0;ja=ce+416|0;ia=ce+408|0;da=ce+400|0;ca=ce+392|0;$=ce+384|0;_=ce+376|0;Z=ce+368|0;Y=ce+360|0;_d=ce+352|0;Zd=ce+344|0;Yd=ce+336|0;Xd=ce+328|0;Vd=ce+320|0;Ud=ce+312|0;Td=ce+304|0;Sd=ce+296|0;Rd=ce+288|0;Qd=ce+280|0;Pd=ce+272|0;Od=ce+264|0;Nd=ce+256|0;Ld=ce+248|0;Kd=ce+240|0;Jd=ce+232|0;Id=ce+224|0;Hd=ce+216|0;Gd=ce+208|0;Fd=ce+200|0;Cd=ce+192|0;rd=ce+184|0;ed=ce+176|0;Xc=ce+168|0;Oc=ce+160|0;Cc=ce+152|0;tc=ce+144|0;kc=ce+136|0;ac=ce+128|0;Sb=ce+120|0;Hb=ce+112|0;zb=ce+104|0;ob=ce+96|0;bb=ce+88|0;Ta=ce+80|0;La=ce+72|0;Ca=ce+64|0;oa=ce+56|0;ba=ce+48|0;Wd=ce+40|0;Md=ce+32|0;xd=ce+24|0;Nb=ce+16|0;X=ce+8|0;W=ce;V=ce+1776|0;S=ce+1852|0;U=ce+1760|0;y=ce+1848|0;z=ce+1844|0;A=ce+1840|0;B=ce+1836|0;C=ce+1832|0;D=ce+1828|0;E=ce+1824|0;F=ce+1820|0;H=ce+1816|0;I=ce+1812|0;J=ce+1808|0;K=ce+1804|0;L=ce+1800|0;M=ce+1796|0;N=ce+1792|0;O=ce+1788|0;P=ce+1784|0;Q=ce+1780|0;T=b+12|0;g=c[T>>2]|0;a:do if(g>>>0<e>>>0){m=b+36|0;o=b+76|0;l=b+4|0;t=b+64|0;k=b+68|0;u=b+96|0;v=b+116|0;n=b+88|0;w=b+100|0;x=b+120|0;f=0;b:while(1){if((nu(b,V,317907)|0)==1)break;i=c[m>>2]|0;h=c[(c[i>>2]|0)+212>>2]|0;j=c[V>>2]|0;c[S>>2]=j;c[R>>2]=c[S>>2];if(fa[h&511](i,R)|0){$d=5;break}if(!(Dm(j,c[o>>2]|0)|0)){$d=7;break}c:do switch(j|0){case 0:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+496>>2]&127](j)|0){$d=10;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=12;break b}break}case 2:{c[R>>2]=0;g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=14;break b}c[T>>2]=(c[T>>2]|0)+g;h=c[R>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{g=(c[o>>2]|0)+4|0;$d=19;break}case -24:{g=c[o>>2]|0;$d=19;break}case -17:{g=(c[o>>2]|0)+9|0;$d=19;break}default:{p=0;$d=20}}if(($d|0)==19){p=(a[g>>0]|0)!=0;$d=20}if(($d|0)==20?($d=0,!((h|0)==-64|p)):0){if(!((h|0)>-1?(a[(c[o>>2]|0)+6>>0]|0)!=0:0)){$d=23;break b}if((c[n>>2]|0)>>>0<=h>>>0){$d=23;break b}}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+284>>2]&511](j,h)|0){$d=25;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+252>>2]&511](j,h)|0){$d=27;break b}break}case 3:{c[R>>2]=0;g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=29;break b}c[T>>2]=(c[T>>2]|0)+g;h=c[R>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{g=(c[o>>2]|0)+4|0;$d=34;break}case -24:{g=c[o>>2]|0;$d=34;break}case -17:{g=(c[o>>2]|0)+9|0;$d=34;break}default:{r=0;$d=35}}if(($d|0)==34){r=(a[g>>0]|0)!=0;$d=35}if(($d|0)==35?($d=0,!((h|0)==-64|r)):0){if(!((h|0)>-1?(a[(c[o>>2]|0)+6>>0]|0)!=0:0)){$d=38;break b}if((c[n>>2]|0)>>>0<=h>>>0){$d=38;break b}}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+388>>2]&511](j,h)|0){$d=40;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+252>>2]&511](j,h)|0){$d=42;break b}break}case 4:{c[R>>2]=0;g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=44;break b}c[T>>2]=(c[T>>2]|0)+g;h=c[R>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{g=(c[o>>2]|0)+4|0;$d=49;break}case -24:{g=c[o>>2]|0;$d=49;break}case -17:{g=(c[o>>2]|0)+9|0;$d=49;break}default:{s=0;$d=50}}if(($d|0)==49){s=(a[g>>0]|0)!=0;$d=50}if(($d|0)==50?($d=0,!((h|0)==-64|s)):0){if(!((h|0)>-1?(a[(c[o>>2]|0)+6>>0]|0)!=0:0)){$d=53;break b}if((c[n>>2]|0)>>>0<=h>>>0){$d=53;break b}}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+368>>2]&511](j,h)|0){$d=55;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+252>>2]&511](j,h)|0){$d=57;break b}break}case 5:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+328>>2]&127](j)|0){$d=59;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=61;break b}break}case 21:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+472>>2]&127](j)|0){$d=63;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=65;break b}break}case 12:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=67;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+288>>2]&511](j,g)|0){$d=69;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=71;break b}break}case 13:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=73;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+292>>2]&511](j,g)|0){$d=75;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=77;break b}break}case 14:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=79;break b}g=(c[T>>2]|0)+g|0;c[T>>2]=g;j=c[R>>2]|0;h=c[t>>2]|0;i=(c[k>>2]|0)-h>>2;if(j>>>0<=i>>>0){if(j>>>0<i>>>0)c[k>>2]=h+(j<<2);if(!j)h=1;else $d=85}else{qu(t,j-i|0);g=c[T>>2]|0;$d=85}if(($d|0)==85){$d=0;h=0;while(1){i=c[l>>2]|0;g=_l(i+g|0,i+(c[b>>2]|0)|0,R)|0;if(!g){$d=88;break b}g=(c[T>>2]|0)+g|0;c[T>>2]=g;c[(c[t>>2]|0)+(h<<2)>>2]=c[R>>2];h=h+1|0;if(h>>>0>=j>>>0){h=0;break}}}i=c[l>>2]|0;g=_l(i+g|0,i+(c[b>>2]|0)|0,R)|0;if(!g){$d=90;break b}c[T>>2]=(c[T>>2]|0)+g;if(h)g=0;else g=c[t>>2]|0;i=c[m>>2]|0;if(ha[c[(c[i>>2]|0)+300>>2]&127](i,j,g,c[R>>2]|0)|0){$d=94;break b}break}case 15:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+460>>2]&127](j)|0){$d=96;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=98;break b}break}case 1:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+452>>2]&127](j)|0){$d=100;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=102;break b}break}case 20:{j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+324>>2]&127](j)|0){$d=104;break b}j=c[m>>2]|0;if(ea[c[(c[j>>2]|0)+216>>2]&127](j)|0){$d=106;break b}break}case 11:{g=c[m>>2]|0;h=c[g>>2]|0;if((c[T>>2]|0)==(e|0))if(!(ea[c[h+336>>2]&127](g)|0)){f=1;break c}else{$d=109;break b}else if(!(ea[c[h+332>>2]&127](g)|0))break c;else{$d=111;break b}}case 52:{g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=113;break b}c[T>>2]=(c[T>>2]|0)+g;j=c[m>>2]|0;g=c[R>>2]|0;if(fa[c[(c[j>>2]|0)+360>>2]&511](j,g)|0){$d=115;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+220>>2]&511](j,g)|0){$d=117;break b}break}case 53:{g=c[l>>2]|0;g=am(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=120;break b}c[T>>2]=(c[T>>2]|0)+g;j=c[m>>2]|0;h=R;g=c[h>>2]|0;h=c[h+4>>2]|0;if(ga[c[(c[j>>2]|0)+364>>2]&127](j,g,h)|0){$d=122;break b}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+236>>2]&127](j,g,h)|0){$d=124;break b}break}case 54:{g=c[T>>2]|0;h=g+4|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=127;break b}g=(c[l>>2]|0)+g|0;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;c[T>>2]=h;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+340>>2]&511](j,g)|0){$d=129;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+240>>2]&511](j,g)|0){$d=131;break b}break}case 55:{g=c[T>>2]|0;i=g+8|0;if(i>>>0>(c[b>>2]|0)>>>0){$d=133;break b}h=(c[l>>2]|0)+g|0;g=h;g=d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24;h=h+4|0;h=d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24;c[T>>2]=i;j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+344>>2]&127](j,g,h)|0){$d=135;break b}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+244>>2]&127](j,g,h)|0){$d=137;break b}break}case 213:{c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;g=c[T>>2]|0;h=g+16|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=139;break b}j=G;g=(c[l>>2]|0)+g|0;i=j+16|0;do{a[j>>0]=a[g>>0]|0;j=j+1|0;g=g+1|0}while((j|0)<(i|0));c[T>>2]=h;j=c[m>>2]|0;i=c[(c[j>>2]|0)+348>>2]|0;c[R>>2]=c[G>>2];c[R+4>>2]=c[G+4>>2];c[R+8>>2]=c[G+8>>2];c[R+12>>2]=c[G+12>>2];if(fa[i&511](j,R)|0){$d=141;break b}j=c[m>>2]|0;i=c[(c[j>>2]|0)+248>>2]|0;c[R>>2]=c[G>>2];c[R+4>>2]=c[G+4>>2];c[R+8>>2]=c[G+8>>2];c[R+12>>2]=c[G+12>>2];if(fa[i&511](j,R)|0){$d=143;break b}break}case 25:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=146;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+352>>2]&511](j,g)|0){$d=148;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=150;break b}break}case 22:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=152;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+376>>2]&511](j,g)|0){$d=154;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=156;break b}break}case 26:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=158;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+356>>2]&511](j,g)|0){$d=160;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=162;break b}break}case 23:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=164;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+380>>2]&511](j,g)|0){$d=166;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=168;break b}break}case 16:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=170;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;if(g>>>0>=((c[v>>2]|0)+(c[u>>2]|0)|0)>>>0){$d=172;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+304>>2]&511](j,g)|0){$d=174;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=176;break b}break}case 17:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=178;break b}g=(c[T>>2]|0)+g|0;c[T>>2]=g;i=c[R>>2]|0;if(i>>>0>=(c[n>>2]|0)>>>0){$d=180;break b}if(!(a[(c[o>>2]|0)+9>>0]|0)){h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=187;break b}j=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(!(j<<24>>24))g=0;else{$d=189;break b}}else{j=c[l>>2]|0;g=_l(j+g|0,j+(c[b>>2]|0)|0,R)|0;if(!g){$d=183;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;if(g>>>0>=((c[x>>2]|0)+(c[w>>2]|0)|0)>>>0){$d=185;break b}}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+308>>2]&127](j,i,g)|0){$d=191;break b}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+232>>2]&127](j,i,g)|0){$d=193;break b}break}case 18:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=195;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;if(g>>>0>=((c[v>>2]|0)+(c[u>>2]|0)|0)>>>0){$d=197;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+464>>2]&511](j,g)|0){$d=199;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=201;break b}break}case 19:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=203;break b}g=(c[T>>2]|0)+g|0;c[T>>2]=g;i=c[R>>2]|0;if(i>>>0>=(c[n>>2]|0)>>>0){$d=205;break b}if(!(a[(c[o>>2]|0)+9>>0]|0)){h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=212;break b}j=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(!(j<<24>>24))g=0;else{$d=214;break b}}else{j=c[l>>2]|0;g=_l(j+g|0,j+(c[b>>2]|0)|0,R)|0;if(!g){$d=208;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;if(g>>>0>=((c[x>>2]|0)+(c[w>>2]|0)|0)>>>0){$d=210;break b}}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+468>>2]&127](j,i,g)|0){$d=216;break b}j=c[m>>2]|0;if(ga[c[(c[j>>2]|0)+232>>2]&127](j,i,g)|0){$d=218;break b}break}case 24:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=220;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+384>>2]&511](j,g)|0){$d=222;break b}j=c[m>>2]|0;if(fa[c[(c[j>>2]|0)+224>>2]&511](j,g)|0){$d=224;break b}break}case 211:case 30:case 29:case 28:case 27:case 40:case 39:case 38:case 37:case 36:case 35:case 34:case 33:case 32:case 31:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=226;break b}i=(c[T>>2]|0)+g|0;c[T>>2]=i;g=c[l>>2]|0;g=_l(g+i|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=228;break b}c[T>>2]=(c[T>>2]|0)+g;i=c[m>>2]|0;de=c[(c[i>>2]|0)+372>>2]|0;c[y>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[y>>2];if(ha[de&127](i,R,g,h)|0){$d=230;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=232;break b}break}case 212:case 44:case 43:case 42:case 41:case 49:case 48:case 47:case 46:case 45:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=236;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=238;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+476>>2]|0;c[z>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[z>>2];if(ha[i&127](de,R,g,h)|0){$d=240;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=242;break b}break}case 50:{g=c[T>>2]|0;h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=246;break b}de=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=248;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+412>>2]&127](de)|0){$d=250;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,0)|0){$d=252;break b}break}case 51:{g=c[T>>2]|0;h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=254;break b}de=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=256;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+404>>2]&127](de)|0){$d=258;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,0)|0){$d=260;break b}break}case 350:case 338:case 329:case 339:case 330:case 337:case 328:case 336:case 327:case 341:case 332:case 340:case 331:case 279:case 278:case 277:case 321:case 320:case 312:case 311:case 299:case 298:case 286:case 285:case 319:case 310:case 297:case 284:case 305:case 304:case 292:case 291:case 302:case 301:case 289:case 288:case 315:case 306:case 293:case 323:case 314:case 303:case 290:case 322:case 313:case 300:case 287:case 153:case 152:case 151:case 150:case 149:case 148:case 147:case 139:case 138:case 137:case 136:case 135:case 134:case 133:case 124:case 125:case 122:case 123:case 121:case 120:case 119:case 118:case 117:case 116:case 115:case 114:case 113:case 112:case 111:case 106:case 107:case 104:case 105:case 103:case 102:case 101:case 100:case 99:case 98:case 97:case 96:case 95:case 94:case 93:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+280>>2]|0;c[A>>2]=j;c[R>>2]=c[A>>2];if(fa[i&511](de,R)|0){$d=262;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=264;break b}break}case 275:case 269:case 263:case 262:case 253:case 252:case 243:case 242:case 273:case 267:case 259:case 258:case 249:case 248:case 239:case 238:case 274:case 268:case 261:case 260:case 251:case 250:case 241:case 240:case 272:case 266:case 257:case 256:case 247:case 246:case 237:case 236:case 271:case 265:case 255:case 245:case 235:case 270:case 264:case 254:case 244:case 234:case 89:case 87:case 88:case 86:case 85:case 84:case 83:case 81:case 82:case 80:case 79:case 78:case 77:case 73:case 76:case 72:case 75:case 71:case 74:case 70:case 69:case 68:case 66:case 62:case 65:case 61:case 64:case 60:case 63:case 59:case 58:case 57:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+316>>2]|0;c[B>>2]=j;c[R>>2]=c[B>>2];if(fa[i&511](de,R)|0){$d=266;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=268;break b}break}case 335:case 326:case 333:case 324:case 334:case 325:case 318:case 309:case 296:case 283:case 317:case 308:case 295:case 282:case 276:case 316:case 307:case 294:case 281:case 231:case 228:case 225:case 222:case 218:case 214:case 146:case 145:case 144:case 143:case 142:case 141:case 140:case 132:case 131:case 130:case 129:case 128:case 127:case 126:case 110:case 109:case 108:case 92:case 91:case 90:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+488>>2]|0;c[C>>2]=j;c[R>>2]=c[C>>2];if(fa[i&511](de,R)|0){$d=270;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=272;break b}break}case 280:{de=c[m>>2]|0;j=c[(c[de>>2]|0)+492>>2]|0;c[D>>2]=280;c[R>>2]=c[D>>2];if(fa[j&511](de,R)|0){$d=274;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=276;break b}break}case 233:case 230:case 227:case 224:case 221:case 217:case 232:case 229:case 226:case 223:case 220:case 219:case 216:case 215:{g=c[T>>2]|0;h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=278;break b}g=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;de=c[m>>2]|0;i=c[(c[de>>2]|0)+508>>2]|0;c[E>>2]=j;g=g&255;c[R>>2]=c[E>>2];if(ha[i&127](de,R,g,0)|0){$d=280;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+236>>2]&127](de,g,0)|0){$d=282;break b}break}case 351:{g=c[T>>2]|0;h=g+16|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=284;break b}j=U;g=(c[l>>2]|0)+g|0;i=j+16|0;do{a[j>>0]=a[g>>0]|0;j=j+1|0;g=g+1|0}while((j|0)<(i|0));c[T>>2]=h;de=c[m>>2]|0;j=c[(c[de>>2]|0)+512>>2]|0;c[F>>2]=351;c[G>>2]=c[F>>2];c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];if(ga[j&127](de,G,R)|0){$d=286;break b}de=c[m>>2]|0;j=c[(c[de>>2]|0)+248>>2]|0;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2];if(fa[j&511](de,R)|0){$d=288;break b}break}case 355:case 354:case 353:case 352:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=291;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=293;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+516>>2]|0;c[H>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[H>>2];if(ha[i&127](de,R,g,h)|0){$d=295;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=297;break b}break}case 345:case 344:case 343:case 342:case 349:case 348:case 347:case 346:case 67:case 56:case 176:case 175:case 178:case 174:case 173:case 172:case 171:case 170:case 177:case 169:case 168:case 167:case 166:case 165:case 160:case 159:case 164:case 162:case 163:case 161:case 154:case 158:case 156:case 157:case 155:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+320>>2]|0;c[I>>2]=j;c[R>>2]=c[I>>2];if(fa[i&511](de,R)|0){$d=301;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=303;break b}break}case 6:{c[R>>2]=0;g=c[l>>2]|0;g=$l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=305;break b}c[T>>2]=(c[T>>2]|0)+g;h=c[R>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{g=(c[o>>2]|0)+4|0;$d=310;break}case -24:{g=c[o>>2]|0;$d=310;break}case -17:{g=(c[o>>2]|0)+9|0;$d=310;break}default:{q=0;$d=311}}if(($d|0)==310){q=(a[g>>0]|0)!=0;$d=311}if(($d|0)==311?($d=0,!((h|0)==-64|q)):0){if(!((h|0)>-1?(a[(c[o>>2]|0)+6>>0]|0)!=0:0)){$d=314;break b}if((c[n>>2]|0)>>>0<=h>>>0){$d=314;break b}}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+484>>2]&511](de,h)|0){$d=316;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+252>>2]&511](de,h)|0){$d=318;break b}break}case 7:{de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+312>>2]&127](de)|0){$d=320;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=322;break b}break}case 9:{de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+456>>2]&127](de)|0){$d=324;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=326;break b}break}case 8:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=328;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+480>>2]&511](de,g)|0){$d=330;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+224>>2]&511](de,g)|0){$d=332;break b}break}case 10:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=334;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;h=c[R>>2]|0;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=336;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+296>>2]&127](de,h,g)|0){$d=338;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+228>>2]&127](de,h,g)|0){$d=340;break b}break}case 183:case 182:case 181:case 180:case 179:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+488>>2]|0;c[J>>2]=j;c[R>>2]=c[J>>2];if(fa[i&511](de,R)|0){$d=342;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=344;break b}break}case 196:case 195:case 194:case 193:case 192:case 191:case 190:case 189:{de=c[m>>2]|0;i=c[(c[de>>2]|0)+320>>2]|0;c[K>>2]=j;c[R>>2]=c[K>>2];if(fa[i&511](de,R)|0){$d=346;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=348;break b}break}case 356:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=350;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=352;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;j=c[(c[de>>2]|0)+276>>2]|0;c[L>>2]=356;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[L>>2];if(ha[j&127](de,R,g,h)|0){$d=354;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=356;break b}break}case 358:case 357:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=360;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=362;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+272>>2]|0;c[M>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[M>>2];if(ha[i&127](de,R,g,h)|0){$d=364;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=366;break b}break}case 360:case 359:case 365:case 364:case 363:case 362:case 361:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=370;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=372;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+256>>2]|0;c[N>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[N>>2];if(ha[i&127](de,R,g,h)|0){$d=374;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=376;break b}break}case 367:case 366:case 372:case 371:case 370:case 369:case 368:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=380;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=382;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+260>>2]|0;c[O>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[O>>2];if(ha[i&127](de,R,g,h)|0){$d=384;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=386;break b}break}case 414:case 413:case 412:case 411:case 410:case 409:case 408:case 407:case 406:case 405:case 404:case 403:case 402:case 401:case 400:case 399:case 398:case 397:case 396:case 395:case 394:case 393:case 392:case 391:case 390:case 389:case 388:case 387:case 386:case 385:case 384:case 383:case 382:case 381:case 380:case 379:case 378:case 377:case 376:case 375:case 374:case 373:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=390;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=392;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+264>>2]|0;c[P>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[P>>2];if(ha[i&127](de,R,g,h)|0){$d=394;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=396;break b}break}case 421:case 420:case 419:case 418:case 417:case 416:case 415:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,G)|0;if(!g){$d=400;break b}de=(c[T>>2]|0)+g|0;c[T>>2]=de;g=c[l>>2]|0;g=_l(g+de|0,g+(c[b>>2]|0)|0,U)|0;if(!g){$d=402;break b}c[T>>2]=(c[T>>2]|0)+g;de=c[m>>2]|0;i=c[(c[de>>2]|0)+268>>2]|0;c[Q>>2]=j;g=c[G>>2]|0;h=c[U>>2]|0;c[R>>2]=c[Q>>2];if(ha[i&127](de,R,g,h)|0){$d=404;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,h)|0){$d=406;break b}break}case 201:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=410;break b}i=(c[T>>2]|0)+g|0;c[T>>2]=i;g=c[R>>2]|0;h=i+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=412;break b}de=a[(c[l>>2]|0)+i>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=414;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+424>>2]&511](de,g)|0){$d=416;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,0)|0){$d=418;break b}break}case 197:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=420;break b}i=(c[T>>2]|0)+g|0;c[T>>2]=i;g=c[R>>2]|0;h=i+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=422;break b}de=a[(c[l>>2]|0)+i>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=424;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+408>>2]&511](de,g)|0){$d=426;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,g,0)|0){$d=428;break b}break}case 202:case 198:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=430;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;h=c[m>>2]|0;i=c[h>>2]|0;if((j|0)==198){if(fa[c[i+396>>2]&511](h,g)|0){$d=433;break b}}else if(fa[c[i+420>>2]&511](h,g)|0){$d=435;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=437;break b}break}case 200:{g=c[T>>2]|0;h=g+1|0;if(h>>>0>(c[b>>2]|0)>>>0){$d=439;break b}de=a[(c[l>>2]|0)+g>>0]|0;c[T>>2]=h;if(de<<24>>24){$d=441;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+400>>2]&127](de)|0){$d=443;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,0)|0){$d=445;break b}break}case 199:{g=c[T>>2]|0;j=g+1|0;h=c[b>>2]|0;if(j>>>0>h>>>0){$d=447;break b}i=c[l>>2]|0;de=a[i+g>>0]|0;c[T>>2]=j;if(de<<24>>24){$d=449;break b}g=g+2|0;if(g>>>0>h>>>0){$d=451;break b}de=a[i+j>>0]|0;c[T>>2]=g;if(de<<24>>24){$d=453;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+392>>2]&127](de)|0){$d=455;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,0,0)|0){$d=457;break b}break}case 203:{g=c[T>>2]|0;j=g+1|0;h=c[b>>2]|0;if(j>>>0>h>>>0){$d=459;break b}i=c[l>>2]|0;de=a[i+g>>0]|0;c[T>>2]=j;if(de<<24>>24){$d=461;break b}g=g+2|0;if(g>>>0>h>>>0){$d=463;break b}de=a[i+j>>0]|0;c[T>>2]=g;if(de<<24>>24){$d=465;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+416>>2]&127](de)|0){$d=467;break b}de=c[m>>2]|0;if(ga[c[(c[de>>2]|0)+232>>2]&127](de,0,0)|0){$d=469;break b}break}case 204:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=471;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+428>>2]&511](de,g)|0){$d=473;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=475;break b}break}case 205:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=477;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+432>>2]&511](de,g)|0){$d=479;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=481;break b}break}case 206:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=483;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+436>>2]&511](de,g)|0){$d=485;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=487;break b}break}case 207:{g=c[l>>2]|0;g=_l(g+(c[T>>2]|0)|0,g+(c[b>>2]|0)|0,R)|0;if(!g){$d=489;break b}c[T>>2]=(c[T>>2]|0)+g;g=c[R>>2]|0;de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+440>>2]&511](de,g)|0){$d=491;break b}de=c[m>>2]|0;if(fa[c[(c[de>>2]|0)+220>>2]&511](de,g)|0){$d=493;break b}break}case 208:{de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+444>>2]&127](de)|0){$d=495;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=497;break b}break}case 209:{de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+448>>2]&127](de)|0){$d=499;break b}de=c[m>>2]|0;if(ea[c[(c[de>>2]|0)+216>>2]&127](de)|0){$d=501;break b}break}default:{$d=502;break b}}while(0);g=c[T>>2]|0;if(g>>>0>=e>>>0)break a}switch($d|0){case 5:{eu(b,319296,W);break}case 7:{pu(b,j,0);break}case 10:{eu(b,319321,X);break}case 12:{eu(b,319355,Nb);break}case 14:{c[xd>>2]=319384;eu(b,314399,xd);break}case 23:{eu(b,319405,Md);break}case 25:{eu(b,319441,Wd);break}case 27:{eu(b,319469,ba);break}case 29:{c[oa>>2]=319502;eu(b,314399,oa);break}case 38:{eu(b,319405,Ca);break}case 40:{eu(b,319522,La);break}case 42:{eu(b,319469,Ta);break}case 44:{c[bb>>2]=319549;eu(b,314399,bb);break}case 53:{eu(b,319405,ob);break}case 55:{eu(b,319567,zb);break}case 57:{eu(b,319469,Hb);break}case 59:{eu(b,319592,Sb);break}case 61:{eu(b,319355,ac);break}case 63:{eu(b,319619,kc);break}case 65:{eu(b,319355,tc);break}case 67:{c[Cc>>2]=319648;eu(b,312904,Cc);break}case 69:{eu(b,319657,Oc);break}case 71:{eu(b,319682,Xc);break}case 73:{c[ed>>2]=319712;eu(b,312904,ed);break}case 75:{eu(b,319724,rd);break}case 77:{eu(b,319682,Cd);break}case 79:{c[Fd>>2]=319751;eu(b,312904,Fd);break}case 88:{c[Gd>>2]=319773;eu(b,312904,Gd);break}case 90:{c[Hd>>2]=319795;eu(b,312904,Hd);break}case 94:{eu(b,319825,Id);break}case 96:{eu(b,319855,Jd);break}case 98:{eu(b,319355,Kd);break}case 100:{eu(b,319884,Ld);break}case 102:{eu(b,319355,Nd);break}case 104:{eu(b,319910,Od);break}case 106:{eu(b,319355,Pd);break}case 109:{eu(b,319937,Qd);break}case 111:{eu(b,319963,Rd);break}case 113:{c[Sd>>2]=319989;eu(b,314399,Sd);break}case 115:{eu(b,320005,Td);break}case 117:{eu(b,320036,Ud);break}case 120:{c[Vd>>2]=320067;eu(b,320083,Vd);break}case 122:{eu(b,320113,Xd);break}case 124:{eu(b,320144,Yd);break}case 127:{c[Zd>>2]=320191;c[Zd+4>>2]=320175;eu(b,312701,Zd);break}case 129:{eu(b,320197,_d);break}case 131:{eu(b,320228,Y);break}case 133:{c[Z>>2]=320272;c[Z+4>>2]=320256;eu(b,312701,Z);break}case 135:{eu(b,320279,_);break}case 137:{eu(b,320310,$);break}case 139:{c[ca>>2]=330963;c[ca+4>>2]=320338;eu(b,312701,ca);break}case 141:{eu(b,320355,da);break}case 143:{eu(b,320387,ia);break}case 146:{c[ja>>2]=320416;eu(b,312904,ja);break}case 148:{eu(b,320440,ka);break}case 150:{eu(b,319682,la);break}case 152:{c[ma>>2]=320472;eu(b,312904,ma);break}case 154:{eu(b,320494,na);break}case 156:{eu(b,319682,pa);break}case 158:{c[qa>>2]=320525;eu(b,312904,qa);break}case 160:{eu(b,320549,ra);break}case 162:{eu(b,319682,sa);break}case 164:{c[ta>>2]=320581;eu(b,312904,ta);break}case 166:{eu(b,320603,ua);break}case 168:{eu(b,319682,va);break}case 170:{c[wa>>2]=320634;eu(b,312904,wa);break}case 172:{c[xa>>2]=g;eu(b,320654,xa);break}case 174:{eu(b,320686,ya);break}case 176:{eu(b,319682,za);break}case 178:{c[Aa>>2]=320713;eu(b,312904,Aa);break}case 180:{eu(b,320743,Ba);break}case 183:{c[Da>>2]=320781;eu(b,312904,Da);break}case 185:{eu(b,320807,Ea);break}case 187:{c[Fa>>2]=315712;c[Fa+4>>2]=320841;eu(b,312701,Fa);break}case 189:{eu(b,320864,Ga);break}case 191:{eu(b,320903,Ha);break}case 193:{eu(b,320938,Ia);break}case 195:{c[Ja>>2]=331218;eu(b,312904,Ja);break}case 197:{c[Ka>>2]=g;eu(b,320975,Ka);break}case 199:{eu(b,321014,Ma);break}case 201:{eu(b,319682,Na);break}case 203:{c[Oa>>2]=331230;eu(b,312904,Oa);break}case 205:{eu(b,321047,Pa);break}case 208:{c[Qa>>2]=321092;eu(b,312904,Qa);break}case 210:{eu(b,321125,Ra);break}case 212:{c[Sa>>2]=315712;c[Sa+4>>2]=321166;eu(b,312701,Sa);break}case 214:{eu(b,321196,Ua);break}case 216:{eu(b,321242,Va);break}case 218:{eu(b,320938,Wa);break}case 220:{c[Xa>>2]=321283;eu(b,312904,Xa);break}case 222:{eu(b,321305,Ya);break}case 224:{eu(b,319682,Za);break}case 226:{c[_a>>2]=321336;eu(b,312904,_a);break}case 228:{c[$a>>2]=321351;eu(b,312904,$a);$d=233;break}case 230:{eu(b,321363,ab);$d=233;break}case 232:{eu(b,320938,cb);$d=233;break}case 236:{c[db>>2]=321390;eu(b,312904,db);break}case 238:{c[eb>>2]=321406;eu(b,312904,eb);$d=243;break}case 240:{eu(b,321419,fb);$d=243;break}case 242:{eu(b,320938,gb);$d=243;break}case 246:{c[hb>>2]=315712;c[hb+4>>2]=321447;eu(b,312701,hb);break}case 248:{eu(b,321468,ib);break}case 250:{eu(b,321505,jb);break}case 252:{eu(b,320036,kb);break}case 254:{c[lb>>2]=315712;c[lb+4>>2]=321538;eu(b,312701,lb);break}case 256:{eu(b,321559,mb);break}case 258:{eu(b,321596,nb);break}case 260:{eu(b,320036,pb);break}case 262:{eu(b,321629,qb);break}case 264:{eu(b,319355,rb);break}case 266:{eu(b,321658,sb);break}case 268:{eu(b,319355,tb);break}case 270:{eu(b,321688,ub);break}case 272:{eu(b,319355,vb);break}case 274:{eu(b,321716,wb);break}case 276:{eu(b,319355,xb);break}case 278:{c[yb>>2]=315712;c[yb+4>>2]=321746;eu(b,312701,yb);break}case 280:{eu(b,321755,Ab);break}case 282:{eu(b,320144,Bb);break}case 284:{c[Cb>>2]=330963;c[Cb+4>>2]=321788;eu(b,312701,Cb);break}case 286:{eu(b,321802,Db);break}case 288:{eu(b,320387,Eb);break}case 291:{c[Fb>>2]=321336;eu(b,312904,Fb);break}case 293:{c[Gb>>2]=321351;eu(b,312904,Gb);$d=298;break}case 295:{eu(b,321838,Ib);$d=298;break}case 297:{eu(b,320938,Jb);$d=298;break}case 301:{eu(b,321870,Kb);break}case 303:{eu(b,319355,Lb);break}case 305:{c[Mb>>2]=321900;eu(b,314399,Mb);break}case 314:{eu(b,319405,Ob);break}case 316:{eu(b,321919,Pb);break}case 318:{eu(b,319469,Qb);break}case 320:{eu(b,321945,Rb);break}case 322:{eu(b,319355,Tb);break}case 324:{eu(b,321973,Ub);break}case 326:{eu(b,319355,Vb);break}case 328:{c[Wb>>2]=322003;eu(b,312904,Wb);break}case 330:{eu(b,322015,Xb);break}case 332:{eu(b,319682,Yb);break}case 334:{c[Zb>>2]=322043;eu(b,312904,Zb);break}case 336:{c[_b>>2]=322003;eu(b,312904,_b);break}case 338:{eu(b,322059,$b);break}case 340:{eu(b,322089,bc);break}case 342:{eu(b,321688,cc);break}case 344:{eu(b,319355,dc);break}case 346:{eu(b,321870,ec);break}case 348:{eu(b,319355,fc);break}case 350:{c[gc>>2]=321336;eu(b,312904,gc);break}case 352:{c[hc>>2]=321351;eu(b,312904,hc);$d=357;break}case 354:{eu(b,322124,ic);$d=357;break}case 356:{eu(b,320938,jc);$d=357;break}case 360:{c[lc>>2]=321336;eu(b,312904,lc);break}case 362:{c[mc>>2]=321351;eu(b,312904,mc);$d=367;break}case 364:{eu(b,322159,nc);$d=367;break}case 366:{eu(b,320938,oc);$d=367;break}case 370:{c[pc>>2]=321336;eu(b,312904,pc);break}case 372:{c[qc>>2]=321351;eu(b,312904,qc);$d=377;break}case 374:{eu(b,322192,rc);$d=377;break}case 376:{eu(b,320938,sc);$d=377;break}case 380:{c[uc>>2]=321390;eu(b,312904,uc);break}case 382:{c[vc>>2]=321406;eu(b,312904,vc);$d=387;break}case 384:{eu(b,322225,wc);$d=387;break}case 386:{eu(b,320938,xc);$d=387;break}case 390:{c[yc>>2]=322259;eu(b,312904,yc);break}case 392:{c[zc>>2]=322276;eu(b,312904,zc);$d=397;break}case 394:{eu(b,322290,Ac);$d=397;break}case 396:{eu(b,320938,Bc);$d=397;break}case 400:{c[Dc>>2]=322259;eu(b,312904,Dc);break}case 402:{c[Ec>>2]=322276;eu(b,312904,Ec);$d=407;break}case 404:{eu(b,322322,Fc);$d=407;break}case 406:{eu(b,320938,Gc);$d=407;break}case 410:{c[Hc>>2]=322361;eu(b,312904,Hc);break}case 412:{c[Ic>>2]=315712;c[Ic+4>>2]=322380;eu(b,312701,Ic);break}case 414:{eu(b,322401,Jc);break}case 416:{eu(b,322426,Kc);break}case 418:{eu(b,320938,Lc);break}case 420:{c[Mc>>2]=322361;eu(b,312904,Mc);break}case 422:{c[Nc>>2]=315712;c[Nc+4>>2]=322458;eu(b,312701,Nc);break}case 424:{eu(b,322401,Pc);break}case 426:{eu(b,322480,Qc);break}case 428:{eu(b,320938,Rc);break}case 430:{c[Sc>>2]=322513;eu(b,312904,Sc);break}case 433:{eu(b,322527,Tc);break}case 435:{eu(b,322558,Uc);break}case 437:{eu(b,320036,Vc);break}case 439:{c[Wc>>2]=315712;c[Wc+4>>2]=322458;eu(b,312701,Wc);break}case 441:{eu(b,322401,Yc);break}case 443:{eu(b,322589,Zc);break}case 445:{eu(b,320036,_c);break}case 447:{c[$c>>2]=315712;c[$c+4>>2]=322458;eu(b,312701,$c);break}case 449:{eu(b,322401,ad);break}case 451:{c[bd>>2]=315712;c[bd+4>>2]=322458;eu(b,312701,bd);break}case 453:{eu(b,322401,cd);break}case 455:{eu(b,322622,dd);break}case 457:{eu(b,320938,fd);break}case 459:{c[gd>>2]=315712;c[gd+4>>2]=322380;eu(b,312701,gd);break}case 461:{eu(b,322401,hd);break}case 463:{c[id>>2]=315712;c[id+4>>2]=322380;eu(b,312701,id);break}case 465:{eu(b,322401,jd);break}case 467:{eu(b,322655,kd);break}case 469:{eu(b,320938,ld);break}case 471:{c[md>>2]=322687;eu(b,312904,md);break}case 473:{eu(b,322699,nd);break}case 475:{eu(b,320036,od);break}case 477:{c[pd>>2]=322687;eu(b,312904,pd);break}case 479:{eu(b,322730,qd);break}case 481:{eu(b,320036,sd);break}case 483:{c[td>>2]=322687;eu(b,312904,td);break}case 485:{eu(b,322761,ud);break}case 487:{eu(b,320036,vd);break}case 489:{c[wd>>2]=322687;eu(b,312904,wd);break}case 491:{eu(b,322793,yd);break}case 493:{eu(b,320036,zd);break}case 495:{eu(b,322825,Ad);break}case 497:{eu(b,319355,Bd);break}case 499:{eu(b,322855,Dd);break}case 501:{eu(b,319355,Ed);break}case 502:{pu(b,j,0);break}}de=1;aa=ce;return de|0}else f=0;while(0);if((g|0)!=(e|0)){eu(b,322887,ae);de=1;aa=ce;return de|0}if(f){de=0;aa=ce;return de|0}eu(b,322924,be);de=1;aa=ce;return de|0}function pu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=aa;aa=aa+48|0;n=q+8|0;p=q;o=q+36|0;k=q+24|0;m=q+12|0;g=_A(32)|0;c[o>>2]=g;c[o+8>>2]=-2147483616;c[o+4>>2]=17;h=g;i=322963;j=h+17|0;do{a[h>>0]=a[i>>0]|0;h=h+1|0;i=i+1|0}while((h|0)<(j|0));a[g+17>>0]=0;if(f|0){wB(o,32);vB(o,f)|0}vB(o,322981)|0;Fm(k,e);l=c[k>>2]|0;j=k+4|0;g=c[j>>2]|0;if((l|0)!=(g|0)){h=m+11|0;i=m+4|0;f=l;do{c[n>>2]=d[f>>0];Ij(m,322983,n);r=a[h>>0]|0;k=r<<24>>24<0;e=c[m>>2]|0;uB(o,k?e:m,k?c[i>>2]|0:r&255)|0;if(k)$A(e);f=f+1|0}while((f|0)!=(g|0))}g=o+11|0;c[p>>2]=(a[g>>0]|0)<0?c[o>>2]|0:o;eu(b,330905,p);if(l|0){c[j>>2]=l;$A(l)}if((a[g>>0]|0)>=0){aa=q;return}$A(c[o>>2]|0);aa=q;return}function qu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+8|0;e=c[k>>2]|0;j=a+4|0;d=c[j>>2]|0;if(e-d>>2>>>0>=b>>>0){uC(d|0,0,b<<2|0)|0;c[j>>2]=d+(b<<2);return}i=c[a>>2]|0;g=d-i|0;f=g>>2;d=f+b|0;if(d>>>0>1073741823)HB();m=e-i|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{l=_A(e<<2)|0;h=l;break}else{h=0;l=0}while(0);d=l+(f<<2)|0;uC(d|0,0,b<<2|0)|0;if((g|0)>0)sC(h|0,i|0,g|0)|0;c[a>>2]=l;c[j>>2]=d+(b<<2);c[k>>2]=l+(e<<2);if(!i)return;$A(i);return}function ru(a){a=a|0;return}function su(a){a=a|0;$A(a);return}function tu(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+8>>2]&511](a,b)|0}function uu(a,b){a=a|0;b=b|0;c[a+4>>2]=b;a=c[a+12>>2]|0;na[c[(c[a>>2]|0)+12>>2]&31](a,b);return}function vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,330005,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;b=fa[c[(c[h>>2]|0)+16>>2]&511](h,b)|0;aa=i;return b|0}function wu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329994,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+20>>2]&127](g)|0;aa=h;return g|0}function xu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[a+12>>2]|0;return ha[c[(c[a>>2]|0)+24>>2]&127](a,b,d,e)|0}function yu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;j=k+8|0;h=k;i=a+16|0;e=c[i>>2]|0;if(e>>>0<=142){f=a+8|0;if(!e)e=f;else g=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[i>>2]|0;g=6}if((g|0)==6){Qn(c[f>>2]|0,17104,e,0,0);e=f}f=c[e>>2]|0;g=c[d>>2]|0;c[j>>2]=c[d+4>>2];c[j+4>>2]=g;c[j+8>>2]=b;Pn(f,329955,j);c[i>>2]=(c[i>>2]|0)+2;a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+28>>2]|0;f=d;g=c[f+4>>2]|0;d=h;c[d>>2]=c[f>>2];c[d+4>>2]=g;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];j=ga[i&127](a,b,j)|0;aa=k;return j|0}function zu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329937,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+32>>2]&127](g)|0;aa=h;return g|0}function Au(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329914,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+36>>2]&511](h,b)|0;aa=i;return h|0}function Bu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329897,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+40>>2]&511](h,b)|0;aa=i;return h|0}function Cu(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=aa;aa=aa+80|0;u=v+64|0;t=v+56|0;s=v+48|0;r=v+40|0;q=v+32|0;p=v+24|0;o=v+16|0;n=v+8|0;m=v;j=a+16|0;h=c[j>>2]|0;if(h>>>0<=142){i=a+8|0;if(!h)l=i;else k=6}else{i=a+8|0;do{Qn(c[i>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[j>>2]|0;k=6}if((k|0)==6){Qn(c[i>>2]|0,17104,h,0,0);l=i}k=c[l>>2]|0;c[m>>2]=b;Pn(k,329856,m);Pn(c[l>>2]|0,329883,n);if(d|0){i=d+-1|0;j=a+8|0;h=0;do{_x(c[j>>2]|0,c[e+(h<<2)>>2]|0);if((h|0)!=(i|0))Pn(c[l>>2]|0,330984,o);h=h+1|0}while((h|0)!=(d|0))}Pn(c[l>>2]|0,330908,p);Pn(c[l>>2]|0,329885,q);Pn(c[l>>2]|0,329883,r);if(!f){s=c[l>>2]|0;Pn(s,330908,t);t=c[l>>2]|0;Pn(t,326855,u);u=a+12|0;u=c[u>>2]|0;t=c[u>>2]|0;t=t+44|0;t=c[t>>2]|0;u=ja[t&31](u,b,d,e,f,g)|0;aa=v;return u|0}i=f+-1|0;j=a+8|0;h=0;do{_x(c[j>>2]|0,c[g+(h<<2)>>2]|0);if((h|0)!=(i|0))Pn(c[l>>2]|0,330984,s);h=h+1|0}while((h|0)!=(f|0));s=c[l>>2]|0;Pn(s,330908,t);t=c[l>>2]|0;Pn(t,326855,u);u=a+12|0;u=c[u>>2]|0;t=c[u>>2]|0;t=t+44|0;t=c[t>>2]|0;u=ja[t&31](u,b,d,e,f,g)|0;aa=v;return u|0}function Du(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329840,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+48>>2]&127](g)|0;aa=h;return g|0}function Eu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329815,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+52>>2]&511](h,b)|0;aa=i;return h|0}function Fu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329796,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+56>>2]&511](h,b)|0;aa=i;return h|0}function Gu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+48|0;m=n+16|0;l=n+40|0;j=n+8|0;k=n;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;o=c[d+4>>2]|0;f=c[d>>2]|0;h=c[e+4>>2]|0;g=c[e>>2]|0;c[m>>2]=b;c[m+4>>2]=o;c[m+8>>2]=f;c[m+12>>2]=h;c[m+16>>2]=g;Pn(i,329744,m);a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+60>>2]|0;g=d;d=c[g+4>>2]|0;h=j;c[h>>2]=c[g>>2];c[h+4>>2]=d;h=e;e=c[h+4>>2]|0;d=k;c[d>>2]=c[h>>2];c[d+4>>2]=e;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];m=ha[i&127](a,b,l,m)|0;aa=n;return m|0}function Hu(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;o=p+16|0;n=p+32|0;l=p+8|0;m=p;j=a+16|0;i=c[j>>2]|0;if(i>>>0<=142){h=a+8|0;if(i)k=6}else{h=a+8|0;do{Qn(c[h>>2]|0,17104,142,0,0);i=i+-142|0}while(i>>>0>142);i=c[j>>2]|0;k=6}if((k|0)==6)Qn(c[h>>2]|0,17104,i,0,0);k=c[h>>2]|0;c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=g;Pn(k,329681,o);a=c[a+12>>2]|0;k=c[(c[a>>2]|0)+64>>2]|0;i=d;d=c[i+4>>2]|0;j=l;c[j>>2]=c[i>>2];c[j+4>>2]=d;j=e;e=c[j+4>>2]|0;d=m;c[d>>2]=c[j>>2];c[d+4>>2]=e;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];o=ja[k&31](a,b,n,o,f,g)|0;aa=p;return o|0}function Iu(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;t=aa;aa=aa+176|0;s=t+144|0;r=t+160|0;m=t+136|0;l=t+120|0;q=t;o=t+112|0;p=t+104|0;k=i;j=c[k>>2]|0;k=c[k+4>>2]|0;if(!(a[i+16>>0]|0)){l=m;c[l>>2]=j;c[l+4>>2]=k;Sz(q,100,329111,m)|0}else{u=i+8|0;v=c[u>>2]|0;u=c[u+4>>2]|0;m=l;c[m>>2]=j;c[m+4>>2]=k;m=l+8|0;c[m>>2]=v;c[m+4>>2]=u;Sz(q,100,329086,l)|0}l=b+16|0;k=c[l>>2]|0;if(k>>>0<=142){j=b+8|0;if(k)n=9}else{j=b+8|0;do{Qn(c[j>>2]|0,17104,142,0,0);k=k+-142|0}while(k>>>0>142);k=c[l>>2]|0;n=9}if((n|0)==9)Qn(c[j>>2]|0,17104,k,0,0);j=c[j>>2]|0;do switch(h|0){case -1:{k=330980;break}case -2:{k=330976;break}case -3:{k=330972;break}case -4:{k=330968;break}case -5:{k=330963;break}case -16:{k=330955;break}case -32:{k=330950;break}case -24:{k=330939;break}case -64:{k=330934;break}case 0:{k=330930;break}case -17:{k=330923;break}default:k=330910}while(0);c[s>>2]=d;c[s+4>>2]=g;c[s+8>>2]=k;c[s+12>>2]=q;Pn(j,329612,s);v=c[b+12>>2]|0;u=c[(c[v>>2]|0)+68>>2]|0;q=e;b=c[q+4>>2]|0;e=o;c[e>>2]=c[q>>2];c[e+4>>2]=b;e=c[f+4>>2]|0;b=p;c[b>>2]=c[f>>2];c[b+4>>2]=e;c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];c[s>>2]=c[p>>2];c[s+4>>2]=c[p+4>>2];v=ka[u&31](v,d,r,s,g,h,i)|0;aa=t;return v|0}function Ju(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;s=aa;aa=aa+176|0;r=s+144|0;q=s+160|0;l=s+136|0;k=s+120|0;p=s;n=s+112|0;o=s+104|0;j=h;i=c[j>>2]|0;j=c[j+4>>2]|0;if(!(a[h+16>>0]|0)){k=l;c[k>>2]=i;c[k+4>>2]=j;Sz(p,100,329111,l)|0}else{t=h+8|0;u=c[t>>2]|0;t=c[t+4>>2]|0;l=k;c[l>>2]=i;c[l+4>>2]=j;l=k+8|0;c[l>>2]=u;c[l+4>>2]=t;Sz(p,100,329086,k)|0}k=b+16|0;j=c[k>>2]|0;if(j>>>0<=142){i=b+8|0;if(j)m=9}else{i=b+8|0;do{Qn(c[i>>2]|0,17104,142,0,0);j=j+-142|0}while(j>>>0>142);j=c[k>>2]|0;m=9}if((m|0)==9)Qn(c[i>>2]|0,17104,j,0,0);u=c[i>>2]|0;c[r>>2]=d;c[r+4>>2]=g;c[r+8>>2]=p;Pn(u,329556,r);u=c[b+12>>2]|0;t=c[(c[u>>2]|0)+72>>2]|0;p=e;b=c[p+4>>2]|0;e=n;c[e>>2]=c[p>>2];c[e+4>>2]=b;e=c[f+4>>2]|0;b=o;c[b>>2]=c[f>>2];c[b+4>>2]=e;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[r>>2]=c[o>>2];c[r+4>>2]=c[o+4>>2];u=ja[t&31](u,d,q,r,g,h)|0;aa=s;return u|0}function Ku(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+48|0;p=q+16|0;o=q+32|0;m=q+8|0;n=q;k=a+16|0;j=c[k>>2]|0;if(j>>>0<=142){i=a+8|0;if(j)l=6}else{i=a+8|0;do{Qn(c[i>>2]|0,17104,142,0,0);j=j+-142|0}while(j>>>0>142);j=c[k>>2]|0;l=6}if((l|0)==6)Qn(c[i>>2]|0,17104,j,0,0);i=c[i>>2]|0;do switch(g|0){case -1:{j=330980;break}case -2:{j=330976;break}case -3:{j=330972;break}case -4:{j=330968;break}case -5:{j=330963;break}case -16:{j=330955;break}case -32:{j=330950;break}case -24:{j=330939;break}case -64:{j=330934;break}case 0:{j=330930;break}case -17:{j=330923;break}default:j=330910}while(0);c[p>>2]=b;c[p+4>>2]=f;c[p+8>>2]=j;c[p+12>>2]=h?326111:326116;Pn(i,329481,p);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+76>>2]|0;j=d;d=c[j+4>>2]|0;k=m;c[k>>2]=c[j>>2];c[k+4>>2]=d;k=e;e=c[k+4>>2]|0;d=n;c[d>>2]=c[k>>2];c[d+4>>2]=e;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];g=ka[l&31](a,b,o,p,f,g,h)|0;aa=q;return g|0}function Lu(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;o=p+16|0;n=p+32|0;l=p+8|0;m=p;j=a+16|0;i=c[j>>2]|0;if(i>>>0<=142){h=a+8|0;if(i)k=6}else{h=a+8|0;do{Qn(c[h>>2]|0,17104,142,0,0);i=i+-142|0}while(i>>>0>142);i=c[j>>2]|0;k=6}if((k|0)==6)Qn(c[h>>2]|0,17104,i,0,0);k=c[h>>2]|0;c[o>>2]=b;c[o+4>>2]=f;c[o+8>>2]=g;Pn(k,329416,o);a=c[a+12>>2]|0;k=c[(c[a>>2]|0)+80>>2]|0;i=d;d=c[i+4>>2]|0;j=l;c[j>>2]=c[i>>2];c[j+4>>2]=d;j=e;e=c[j+4>>2]|0;d=m;c[d>>2]=c[j>>2];c[d+4>>2]=e;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];o=ja[k&31](a,b,n,o,f,g)|0;aa=p;return o|0}function Mu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329398,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+84>>2]&127](g)|0;aa=h;return g|0}function Nu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329371,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+88>>2]&511](h,b)|0;aa=i;return h|0}function Ou(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329350,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+92>>2]&511](h,b)|0;aa=i;return h|0}function Pu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,329312,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+96>>2]&127](i,b,d)|0;aa=j;return i|0}function Qu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329292,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+100>>2]&127](g)|0;aa=h;return g|0}function Ru(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329268,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+104>>2]&511](h,b)|0;aa=i;return h|0}function Su(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329250,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+108>>2]&511](h,b)|0;aa=i;return h|0}function Tu(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=aa;aa=aa+144|0;m=n+128|0;j=n+120|0;i=n+104|0;l=n;h=f;g=c[h>>2]|0;h=c[h+4>>2]|0;if(!(a[f+16>>0]|0)){i=j;c[i>>2]=g;c[i+4>>2]=h;Sz(l,100,329111,j)|0}else{o=f+8|0;p=c[o>>2]|0;o=c[o+4>>2]|0;j=i;c[j>>2]=g;c[j+4>>2]=h;j=i+8|0;c[j>>2]=p;c[j+4>>2]=o;Sz(l,100,329086,i)|0}i=b+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=b+8|0;if(h)k=9}else{g=b+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;k=9}if((k|0)==9)Qn(c[g>>2]|0,17104,h,0,0);g=c[g>>2]|0;do switch(e|0){case -1:{h=330980;break}case -2:{h=330976;break}case -3:{h=330972;break}case -4:{h=330968;break}case -5:{h=330963;break}case -16:{h=330955;break}case -32:{h=330950;break}case -24:{h=330939;break}case -64:{h=330934;break}case 0:{h=330930;break}case -17:{h=330923;break}default:h=330910}while(0);c[m>>2]=d;c[m+4>>2]=h;c[m+8>>2]=l;Pn(g,329211,m);p=c[b+12>>2]|0;p=ha[c[(c[p>>2]|0)+112>>2]&127](p,d,e,f)|0;aa=n;return p|0}function Uu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329194,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+116>>2]&127](g)|0;aa=h;return g|0}function Vu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329169,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+120>>2]&511](h,b)|0;aa=i;return h|0}function Wu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329150,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+124>>2]&511](h,b)|0;aa=i;return h|0}function Xu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+144|0;l=m+128|0;i=m+120|0;h=m+104|0;k=m;g=e;f=c[g>>2]|0;g=c[g+4>>2]|0;if(!(a[e+16>>0]|0)){h=i;c[h>>2]=f;c[h+4>>2]=g;Sz(k,100,329111,i)|0}else{n=e+8|0;o=c[n>>2]|0;n=c[n+4>>2]|0;i=h;c[i>>2]=f;c[i+4>>2]=g;i=h+8|0;c[i>>2]=o;c[i+4>>2]=n;Sz(k,100,329086,h)|0}h=b+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=b+8|0;if(g)j=9}else{f=b+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;j=9}if((j|0)==9)Qn(c[f>>2]|0,17104,g,0,0);o=c[f>>2]|0;c[l>>2]=d;c[l+4>>2]=k;Pn(o,329125,l);o=c[b+12>>2]|0;o=ga[c[(c[o>>2]|0)+128>>2]&127](o,d,e)|0;aa=m;return o|0}function Yu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,329068,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+132>>2]&127](g)|0;aa=h;return g|0}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,329043,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+136>>2]&511](h,b)|0;aa=i;return h|0}function _u(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,329024,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+140>>2]&511](h,b)|0;aa=i;return h|0}function $u(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);f=c[f>>2]|0;do switch(d|0){case -1:{g=330980;break}case -2:{g=330976;break}case -3:{g=330972;break}case -4:{g=330968;break}case -5:{g=330963;break}case -16:{g=330955;break}case -32:{g=330950;break}case -24:{g=330939;break}case -64:{g=330934;break}case 0:{g=330930;break}case -17:{g=330923;break}default:g=330910}while(0);c[j>>2]=b;c[j+4>>2]=g;c[j+8>>2]=e?326111:326116;Pn(f,328977,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+144>>2]&127](j,b,d,e)|0;aa=k;return j|0}function av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328952,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+148>>2]&511](h,b)|0;aa=i;return h|0}function bv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328929,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+152>>2]&511](h,b)|0;aa=i;return h|0}function cv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328914,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+156>>2]&511](h,b)|0;aa=i;return h|0}function dv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,328896,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+160>>2]&127](g)|0;aa=h;return g|0}function ev(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,328871,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+164>>2]&511](h,b)|0;aa=i;return h|0}function fv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328852,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+168>>2]&511](h,b)|0;aa=i;return h|0}function gv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);g=c[g>>2]|0;if((d|0)<5)h=c[64+(d<<2)>>2]|0;else h=328778;i=c[f+4>>2]|0;j=c[f>>2]|0;c[l>>2]=b;c[l+4>>2]=h;c[l+8>>2]=e;c[l+12>>2]=i;c[l+16>>2]=j;Pn(g,328791,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+172>>2]|0;h=f;i=c[h+4>>2]|0;f=k;c[f>>2]=c[h>>2];c[f+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,d,e,l)|0;aa=m;return l|0}function hv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,328760,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+176>>2]&127](g)|0;aa=h;return g|0}function iv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,328736,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+180>>2]&511](h,b)|0;aa=i;return h|0}function jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328715,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+184>>2]&511](h,b)|0;aa=i;return h|0}function kv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,328698,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+188>>2]&127](g)|0;aa=h;return g|0}function lv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,328675,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+192>>2]&511](h,b)|0;aa=i;return h|0}function mv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328650,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+196>>2]&511](h,b)|0;aa=i;return h|0}function nv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,328617,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+200>>2]&127](i,b,d)|0;aa=j;return i|0}function ov(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328595,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+204>>2]&511](h,b)|0;aa=i;return h|0}function pv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);f=c[f>>2]|0;do switch(e|0){case -1:{g=330980;break}case -2:{g=330976;break}case -3:{g=330972;break}case -4:{g=330968;break}case -5:{g=330963;break}case -16:{g=330955;break}case -32:{g=330950;break}case -24:{g=330939;break}case -64:{g=330934;break}case 0:{g=330930;break}case -17:{g=330923;break}default:g=330910}while(0);c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=g;Pn(f,328550,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+208>>2]&127](j,b,d,e)|0;aa=k;return j|0}function qv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=aa;aa=aa+16|0;e=d+4|0;g=d;a=c[a+12>>2]|0;f=c[(c[a>>2]|0)+212>>2]|0;c[g>>2]=c[b>>2];c[e>>2]=c[g>>2];a=fa[f&511](a,e)|0;aa=d;return a|0}function rv(a){a=a|0;a=c[a+12>>2]|0;return ea[c[(c[a>>2]|0)+216>>2]&127](a)|0}function sv(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+220>>2]&511](a,b)|0}function tv(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+224>>2]&511](a,b)|0}function uv(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+12>>2]|0;return ga[c[(c[a>>2]|0)+228>>2]&127](a,b,d)|0}function vv(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+12>>2]|0;return ga[c[(c[a>>2]|0)+232>>2]&127](a,b,d)|0}function wv(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+12>>2]|0;return ga[c[(c[a>>2]|0)+236>>2]&127](a,b,d)|0}function xv(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+240>>2]&511](a,b)|0}function yv(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+12>>2]|0;return ga[c[(c[a>>2]|0)+244>>2]&127](a,b,d)|0}function zv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=aa;aa=aa+16|0;e=d;a=c[a+12>>2]|0;f=c[(c[a>>2]|0)+248>>2]|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];b=fa[f&511](a,e)|0;aa=d;return b|0}function Av(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return fa[c[(c[a>>2]|0)+252>>2]&511](a,b)|0}function Bv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328485,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+256>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Cv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328419,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+260>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Dv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328355,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+264>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Ev(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328284,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+268>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Fv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328219,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+272>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Gv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,328152,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+276>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,328127,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+280>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Iv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);Pn(c[d>>2]|0,328109,h);_x(c[d>>2]|0,b);Pn(c[d>>2]|0,326855,i);i=c[a+12>>2]|0;i=fa[c[(c[i>>2]|0)+284>>2]&511](i,b)|0;aa=j;return i|0}function Jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328088,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+288>>2]&511](h,b)|0;aa=i;return h|0}function Kv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,328065,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+292>>2]&511](h,b)|0;aa=i;return h|0}function Lv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,328022,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+296>>2]&127](i,b,d)|0;aa=j;return i|0}function Mv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+32|0;l=n+24|0;k=n+16|0;m=n+8|0;j=n;h=a+16|0;f=c[h>>2]|0;if(f>>>0<=142){g=a+8|0;if(f)i=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[g>>2]|0,17104,f,0,0);f=c[g>>2]|0;c[j>>2]=b;Pn(f,327964,j);f=c[g>>2]|0;if(b){i=b+-1|0;h=0;do{c[k>>2]=c[d+(h<<2)>>2];Pn(f,331596,k);if((h|0)!=(i|0))Pn(c[g>>2]|0,330984,l);h=h+1|0;f=c[g>>2]|0}while((h|0)!=(b|0))}c[m>>2]=e;Pn(f,328005,m);m=c[a+12>>2]|0;m=ha[c[(c[m>>2]|0)+300>>2]&127](m,b,d,e)|0;aa=n;return m|0}function Nv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327936,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+304>>2]&511](h,b)|0;aa=i;return h|0}function Ov(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,327884,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+308>>2]&127](i,b,d)|0;aa=j;return i|0}function Pv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327871,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+312>>2]&127](g)|0;aa=h;return g|0}function Qv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,327845,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+316>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Rv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,327819,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+320>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Sv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327807,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+324>>2]&127](g)|0;aa=h;return g|0}function Tv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327795,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+328>>2]&127](g)|0;aa=h;return g|0}function Uv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327784,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+332>>2]&127](g)|0;aa=h;return g|0}function Vv(a){a=a|0;a=c[a+12>>2]|0;return ea[c[(c[a>>2]|0)+336>>2]&127](a)|0}function Wv(a,b){a=a|0;b=b|0;var d=0,e=0,i=0,j=0,k=0.0,l=0,m=0;m=aa;aa=aa+16|0;l=m;k=(c[h>>2]=b,+f[h>>2]);i=a+16|0;e=c[i>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)j=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[d>>2]|0,17104,e,0,0);j=c[d>>2]|0;g[l>>3]=k;c[l+8>>2]=b;Pn(j,327755,l);l=c[a+12>>2]|0;l=fa[c[(c[l>>2]|0)+340>>2]&511](l,b)|0;aa=m;return l|0}function Xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,i=0,j=0,k=0.0,l=0,m=0;m=aa;aa=aa+16|0;l=m;c[h>>2]=b;c[h+4>>2]=d;k=+g[h>>3];i=a+16|0;f=c[i>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)j=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[e>>2]|0,17104,f,0,0);j=c[e>>2]|0;g[l>>3]=k;i=l+8|0;c[i>>2]=b;c[i+4>>2]=d;Pn(j,327724,l);l=c[a+12>>2]|0;l=ga[c[(c[l>>2]|0)+344>>2]&127](l,b,d)|0;aa=m;return l|0}function Yv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;d=c[b+4>>2]|0;e=c[b+8>>2]|0;f=c[b+12>>2]|0;c[h>>2]=c[b>>2];c[h+4>>2]=d;c[h+8>>2]=e;c[h+12>>2]=f;Pn(g,327678,h);a=c[a+12>>2]|0;g=c[(c[a>>2]|0)+348>>2]|0;c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];h=fa[g&511](a,h)|0;aa=i;return h|0}function Zv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327650,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+352>>2]&511](h,b)|0;aa=i;return h|0}function _v(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327622,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+356>>2]&511](h,b)|0;aa=i;return h|0}function $v(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;c[h+4>>2]=b;Pn(g,327595,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+360>>2]&511](h,b)|0;aa=i;return h|0}function aw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;g=i;c[g>>2]=b;c[g+4>>2]=d;g=i+8|0;c[g>>2]=b;c[g+4>>2]=d;Pn(h,327564,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+364>>2]&127](i,b,d)|0;aa=j;return i|0}function bw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);Pn(c[d>>2]|0,327549,h);_x(c[d>>2]|0,b);Pn(c[d>>2]|0,326855,i);i=c[a+12>>2]|0;i=fa[c[(c[i>>2]|0)+368>>2]&511](i,b)|0;aa=j;return i|0}function cw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,327490,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+372>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function dw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327463,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+376>>2]&511](h,b)|0;aa=i;return h|0}function ew(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327436,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+380>>2]&511](h,b)|0;aa=i;return h|0}function fw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327409,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+384>>2]&511](h,b)|0;aa=i;return h|0}function gw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);Pn(c[d>>2]|0,327392,h);_x(c[d>>2]|0,b);Pn(c[d>>2]|0,326855,i);i=c[a+12>>2]|0;i=fa[c[(c[i>>2]|0)+388>>2]&511](i,b)|0;aa=j;return i|0}function hw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327374,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+392>>2]&127](g)|0;aa=h;return g|0}function iw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327354,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+396>>2]&511](h,b)|0;aa=i;return h|0}function jw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327336,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+400>>2]&127](g)|0;aa=h;return g|0}function kw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327318,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+404>>2]&127](g)|0;aa=h;return g|0}function lw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327296,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+408>>2]&511](h,b)|0;aa=i;return h|0}function mw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327278,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+412>>2]&127](g)|0;aa=h;return g|0}function nw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327261,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+416>>2]&127](g)|0;aa=h;return g|0}function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327241,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+420>>2]&511](h,b)|0;aa=i;return h|0}function pw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327220,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+424>>2]&511](h,b)|0;aa=i;return h|0}function qw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327200,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+428>>2]&511](h,b)|0;aa=i;return h|0}function rw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327180,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+432>>2]&511](h,b)|0;aa=i;return h|0}function sw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327159,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+436>>2]&511](h,b)|0;aa=i;return h|0}function tw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327138,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+440>>2]&511](h,b)|0;aa=i;return h|0}function uw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327123,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+444>>2]&127](g)|0;aa=h;return g|0}function vw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327106,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+448>>2]&127](g)|0;aa=h;return g|0}function ww(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327095,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+452>>2]&127](g)|0;aa=h;return g|0}function xw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327080,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+456>>2]&127](g)|0;aa=h;return g|0}function yw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,327066,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+460>>2]&127](g)|0;aa=h;return g|0}function zw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,327032,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+464>>2]&511](h,b)|0;aa=i;return h|0}function Aw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,326974,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+468>>2]&127](i,b,d)|0;aa=j;return i|0}function Bw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,326960,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+472>>2]&127](g)|0;aa=h;return g|0}function Cw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,326900,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+476>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Dw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326870,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+480>>2]&511](h,b)|0;aa=i;return h|0}function Ew(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);Pn(c[d>>2]|0,326839,h);_x(c[d>>2]|0,b);Pn(c[d>>2]|0,326855,i);i=c[a+12>>2]|0;i=fa[c[(c[i>>2]|0)+484>>2]&511](i,b)|0;aa=j;return i|0}function Fw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,326815,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+488>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Gw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+48|0;i=k;j=k+8|0;h=k+44|0;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;b=c[b>>2]|0;Am(j,b);f=c[j>>2]|0;Am(j,b);j=c[j+28>>2]|0;c[i>>2]=f;c[i+4>>2]=j;Pn(g,326789,i);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+492>>2]|0;c[h>>2]=b;c[i>>2]=c[h>>2];a=fa[j&511](a,i)|0;aa=k;return a|0}function Hw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=c[e>>2]|0;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,326770,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+496>>2]&127](g)|0;aa=h;return g|0}function Iw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326749,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+500>>2]&511](h,b)|0;aa=i;return h|0}function Jw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,326733,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+504>>2]&127](g)|0;aa=h;return g|0}function Kw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;j=l+8|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;h=k;c[h>>2]=d;c[h+4>>2]=e;Pn(i,326702,k);a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+508>>2]|0;c[j>>2]=c[b>>2];c[k>>2]=c[j>>2];a=ha[i&127](a,k,d,e)|0;aa=l;return a|0}function Lw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+32|0;k=l;j=l+20|0;i=l+16|0;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;e=c[d+4>>2]|0;f=c[d+8>>2]|0;g=c[d+12>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=e;c[k+8>>2]=f;c[k+12>>2]=g;Pn(h,326651,k);a=c[a+12>>2]|0;h=c[(c[a>>2]|0)+512>>2]|0;c[i>>2]=c[b>>2];c[j>>2]=c[i>>2];c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];k=ga[h&127](a,j,k)|0;aa=l;return k|0}function Mw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m;l=m+16|0;j=m+52|0;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;b=c[b>>2]|0;Am(l,b);h=c[l>>2]|0;Am(l,b);l=c[l+28>>2]|0;c[k>>2]=h;c[k+4>>2]=l;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,326587,k);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+516>>2]|0;c[j>>2]=b;c[k>>2]=c[j>>2];a=ha[l&127](a,k,d,e)|0;aa=m;return a|0}function Nw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,326564,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+520>>2]&511](h,b)|0;aa=i;return h|0}function Ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326540,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+524>>2]&511](h,b)|0;aa=i;return h|0}function Pw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);g=c[g>>2]|0;h=e?326111:326116;do switch(f|0){case -1:{i=330980;break}case -2:{i=330976;break}case -3:{i=330972;break}case -4:{i=330968;break}case -5:{i=330963;break}case -16:{i=330955;break}case -32:{i=330950;break}case -24:{i=330939;break}case -64:{i=330934;break}case 0:{i=330930;break}case -17:{i=330923;break}default:i=330910}while(0);c[k>>2]=b;c[k+4>>2]=d;c[k+8>>2]=h;c[k+12>>2]=i;Pn(g,326466,k);k=c[a+12>>2]|0;k=ia[c[(c[k>>2]|0)+528>>2]&31](k,b,d,e,f)|0;aa=l;return k|0}function Qw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326436,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+532>>2]&511](h,b)|0;aa=i;return h|0}function Rw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326408,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+536>>2]&511](h,b)|0;aa=i;return h|0}function Sw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,326358,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+540>>2]&127](i,b,d)|0;aa=j;return i|0}function Tw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326323,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+544>>2]&511](h,b)|0;aa=i;return h|0}function Uw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,326265,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+548>>2]&127](i,b,d)|0;aa=j;return i|0}function Vw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326245,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+552>>2]&511](h,b)|0;aa=i;return h|0}function Ww(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,326229,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+556>>2]&127](g)|0;aa=h;return g|0}function Xw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,326206,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+560>>2]&511](h,b)|0;aa=i;return h|0}function Yw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326182,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+564>>2]&511](h,b)|0;aa=i;return h|0}function Zw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e?326111:326116;Pn(i,326122,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+568>>2]&127](j,b,d,e)|0;aa=k;return j|0}function _w(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326081,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+572>>2]&511](h,b)|0;aa=i;return h|0}function $w(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,326053,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+576>>2]&511](h,b)|0;aa=i;return h|0}function ax(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=e;Pn(i,326015,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+580>>2]&127](j,b,d,e)|0;aa=k;return j|0}function bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325995,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+584>>2]&511](h,b)|0;aa=i;return h|0}function cx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325979,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+588>>2]&127](g)|0;aa=h;return g|0}function dx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325951,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+592>>2]&511](h,b)|0;aa=i;return h|0}function ex(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325934,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+596>>2]&511](h,b)|0;aa=i;return h|0}function fx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325913,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+600>>2]&127](g)|0;aa=h;return g|0}function gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325889,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+604>>2]&511](h,b)|0;aa=i;return h|0}function hx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e;Pn(i,325832,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+608>>2]&127](j,b,d,e)|0;aa=k;return j|0}function ix(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;e=c[b>>2]|0;c[i>>2]=c[b+4>>2];c[i+4>>2]=e;Pn(g,325804,i);a=c[a+12>>2]|0;g=c[(c[a>>2]|0)+612>>2]|0;e=b;f=c[e+4>>2]|0;b=h;c[b>>2]=c[e>>2];c[b+4>>2]=f;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];i=fa[g&511](a,i)|0;aa=j;return i|0}function jx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e;Pn(i,325745,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+616>>2]&127](j,b,d,e)|0;aa=k;return j|0}function kx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325719,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+620>>2]&511](h,b)|0;aa=i;return h|0}function lx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;j=k+8|0;i=k;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;g=c[d+4>>2]|0;f=c[d>>2]|0;c[j>>2]=b;c[j+4>>2]=g;c[j+8>>2]=f;Pn(h,325678,j);a=c[a+12>>2]|0;h=c[(c[a>>2]|0)+624>>2]|0;f=d;g=c[f+4>>2]|0;d=i;c[d>>2]=c[f>>2];c[d+4>>2]=g;c[j>>2]=c[i>>2];c[j+4>>2]=c[i+4>>2];j=ga[h&127](a,b,j)|0;aa=k;return j|0}function mx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;c[j+4>>2]=d;c[j+8>>2]=e;Pn(i,325622,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+628>>2]&127](j,b,d,e)|0;aa=k;return j|0}function nx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325592,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+632>>2]&511](h,b)|0;aa=i;return h|0}function ox(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,325547,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+636>>2]&127](i,b,d)|0;aa=j;return i|0}function px(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+32|0;k=l+8|0;j=l;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;h=c[e+4>>2]|0;g=c[e>>2]|0;c[k>>2]=b;c[k+4>>2]=d;c[k+8>>2]=h;c[k+12>>2]=g;Pn(i,325487,k);a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+640>>2]|0;g=e;h=c[g+4>>2]|0;e=j;c[e>>2]=c[g>>2];c[e+4>>2]=h;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];k=ha[i&127](a,b,d,k)|0;aa=l;return k|0}function qx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325470,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+644>>2]&127](g)|0;aa=h;return g|0}function rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325446,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+648>>2]&511](h,b)|0;aa=i;return h|0}function sx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,325408,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+652>>2]&127](i,b,d)|0;aa=j;return i|0}function tx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);g=c[g>>2]|0;if((b|0)<13)h=c[96+(b<<2)>>2]|0;else h=325334;c[k>>2]=h;c[k+4>>2]=d;c[k+8>>2]=e;c[k+12>>2]=f;Pn(g,325353,k);k=c[a+12>>2]|0;k=ia[c[(c[k>>2]|0)+656>>2]&31](k,b,d,e,f)|0;aa=l;return k|0}function ux(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325317,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+660>>2]&127](g)|0;aa=h;return g|0}function vx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325292,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+664>>2]&511](h,b)|0;aa=i;return h|0}function wx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;c[k>>2]=b;c[k+4>>2]=d;c[k+8>>2]=e;c[k+12>>2]=f;Pn(j,325216,k);k=c[a+12>>2]|0;k=ia[c[(c[k>>2]|0)+668>>2]&31](k,b,d,e,f)|0;aa=l;return k|0}function xx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325191,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+672>>2]&511](h,b)|0;aa=i;return h|0}function yx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j+8|0;h=j;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;e=c[b>>2]|0;c[i>>2]=c[b+4>>2];c[i+4>>2]=e;Pn(g,325163,i);a=c[a+12>>2]|0;g=c[(c[a>>2]|0)+676>>2]|0;e=b;f=c[e+4>>2]|0;b=h;c[b>>2]=c[e>>2];c[b+4>>2]=f;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];i=fa[g&511](a,i)|0;aa=j;return i|0}function zx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,325145,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+680>>2]&127](g)|0;aa=h;return g|0}function Ax(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,325119,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+684>>2]&511](h,b)|0;aa=i;return h|0}function Bx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,325100,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+688>>2]&511](h,b)|0;aa=i;return h|0}function Cx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);f=c[f>>2]|0;switch(d|0){case 0:{g=330950;break}case 2:{g=330254;break}case 1:{g=330223;break}case 3:{g=325060;break}case 4:{g=330237;break}default:g=325040}c[j>>2]=g;c[j+4>>2]=e;Pn(f,325068,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+692>>2]&127](j,b,d,e)|0;aa=k;return j|0}function Dx(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+32|0;n=o+8|0;m=o;k=a+16|0;j=c[k>>2]|0;if(j>>>0<=142){i=a+8|0;if(j)l=6}else{i=a+8|0;do{Qn(c[i>>2]|0,17104,142,0,0);j=j+-142|0}while(j>>>0>142);j=c[k>>2]|0;l=6}if((l|0)==6)Qn(c[i>>2]|0,17104,j,0,0);l=c[i>>2]|0;j=c[e>>2]|0;c[n>>2]=c[e+4>>2];c[n+4>>2]=j;c[n+8>>2]=d;Pn(l,325002,n);a=c[a+12>>2]|0;l=c[(c[a>>2]|0)+696>>2]|0;j=e;k=c[j+4>>2]|0;e=m;c[e>>2]=c[j>>2];c[e+4>>2]=k;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];n=ka[l&31](a,b,d,n,f,g,h)|0;aa=o;return n|0} +function Ex(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;h=c[e>>2]|0;c[l>>2]=c[e+4>>2];c[l+4>>2]=h;c[l+8>>2]=d;c[l+12>>2]=f;Pn(j,324950,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+700>>2]|0;h=e;i=c[h+4>>2]|0;e=k;c[e>>2]=c[h>>2];c[e+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,d,l,f)|0;aa=m;return l|0}function Fx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;h=c[e>>2]|0;c[l>>2]=c[e+4>>2];c[l+4>>2]=h;c[l+8>>2]=d;c[l+12>>2]=f;Pn(j,324900,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+704>>2]|0;h=e;i=c[h+4>>2]|0;e=k;c[e>>2]=c[h>>2];c[e+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,d,l,f)|0;aa=m;return l|0}function Gx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=d;c[j+4>>2]=e;Pn(i,324860,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+708>>2]&127](j,b,d,e)|0;aa=k;return j|0}function Hx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;h=c[e>>2]|0;c[l>>2]=c[e+4>>2];c[l+4>>2]=h;c[l+8>>2]=d;c[l+12>>2]=f;Pn(j,324811,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+712>>2]|0;h=e;i=c[h+4>>2]|0;e=k;c[e>>2]=c[h>>2];c[e+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,d,l,f)|0;aa=m;return l|0}function Ix(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,324787,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+716>>2]&511](h,b)|0;aa=i;return h|0}function Jx(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+32|0;l=m+8|0;k=m;i=a+16|0;h=c[i>>2]|0;if(h>>>0<=142){g=a+8|0;if(h)j=6}else{g=a+8|0;do{Qn(c[g>>2]|0,17104,142,0,0);h=h+-142|0}while(h>>>0>142);h=c[i>>2]|0;j=6}if((j|0)==6)Qn(c[g>>2]|0,17104,h,0,0);j=c[g>>2]|0;i=c[d+4>>2]|0;h=c[d>>2]|0;c[l>>2]=b;c[l+4>>2]=i;c[l+8>>2]=h;c[l+12>>2]=e;c[l+16>>2]=f;Pn(j,324729,l);a=c[a+12>>2]|0;j=c[(c[a>>2]|0)+720>>2]|0;h=d;i=c[h+4>>2]|0;d=k;c[d>>2]=c[h>>2];c[d+4>>2]=i;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];l=ia[j&31](a,b,l,e,f)|0;aa=m;return l|0}function Kx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,324704,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+724>>2]&511](h,b)|0;aa=i;return h|0}function Lx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=d;c[i+4>>2]=b;Pn(h,324671,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+728>>2]&127](i,b,d)|0;aa=j;return i|0}function Mx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,324652,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+732>>2]&511](h,b)|0;aa=i;return h|0}function Nx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+32|0;k=l+8|0;j=l;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;g=c[b>>2]|0;c[k>>2]=c[b+4>>2];c[k+4>>2]=g;c[k+8>>2]=d;c[k+12>>2]=e;Pn(i,324609,k);a=c[a+12>>2]|0;i=c[(c[a>>2]|0)+736>>2]|0;g=b;h=c[g+4>>2]|0;b=j;c[b>>2]=c[g>>2];c[b+4>>2]=h;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];k=ha[i&127](a,k,d,e)|0;aa=l;return k|0}function Ox(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,324573,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+740>>2]&127](i,b,d)|0;aa=j;return i|0}function Px(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,324554,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+744>>2]&127](g)|0;aa=h;return g|0}function Qx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=a+16|0;d=c[g>>2]|0;if(d>>>0<=142){e=a+8|0;if(!d)d=e;else f=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[g>>2]|0;f=6}if((f|0)==6){Qn(c[e>>2]|0,17104,d,0,0);d=e}f=c[d>>2]|0;c[h>>2]=b;Pn(f,324530,h);c[g>>2]=(c[g>>2]|0)+2;h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+748>>2]&511](h,b)|0;aa=i;return h|0}function Rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+16|0;e=c[f>>2]|0;if(e>>>0<=142){d=a+8|0;if(e)g=6}else{d=a+8|0;do{Qn(c[d>>2]|0,17104,142,0,0);e=e+-142|0}while(e>>>0>142);e=c[f>>2]|0;g=6}if((g|0)==6)Qn(c[d>>2]|0,17104,e,0,0);g=c[d>>2]|0;c[h>>2]=b;Pn(g,324512,h);h=c[a+12>>2]|0;h=fa[c[(c[h>>2]|0)+752>>2]&511](h,b)|0;aa=i;return h|0}function Sx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,324473,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+756>>2]&127](i,b,d)|0;aa=j;return i|0}function Tx(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;e=a+16|0;d=(c[e>>2]|0)+-2|0;c[e>>2]=d;if(d>>>0<=142){b=a+8|0;if(d)f=6}else{b=a+8|0;do{Qn(c[b>>2]|0,17104,142,0,0);d=d+-142|0}while(d>>>0>142);d=c[e>>2]|0;f=6}if((f|0)==6)Qn(c[b>>2]|0,17104,d,0,0);Pn(c[b>>2]|0,324456,g);g=c[a+12>>2]|0;g=ea[c[(c[g>>2]|0)+760>>2]&127](g)|0;aa=h;return g|0}function Ux(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,i=0,j=0,k=0,l=0.0,m=0,n=0;n=aa;aa=aa+32|0;m=n;l=(c[h>>2]=d,+f[h>>2]);j=a+16|0;i=c[j>>2]|0;if(i>>>0<=142){e=a+8|0;if(i)k=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);i=i+-142|0}while(i>>>0>142);i=c[j>>2]|0;k=6}if((k|0)==6)Qn(c[e>>2]|0,17104,i,0,0);k=c[e>>2]|0;c[m>>2]=b;g[m+8>>3]=l;c[m+16>>2]=d;Pn(k,324401,m);m=c[a+12>>2]|0;m=ga[c[(c[m>>2]|0)+764>>2]&127](m,b,d)|0;aa=n;return m|0}function Vx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0,l=0.0,m=0,n=0;n=aa;aa=aa+32|0;m=n;c[h>>2]=d;c[h+4>>2]=e;l=+g[h>>3];j=a+16|0;i=c[j>>2]|0;if(i>>>0<=142){f=a+8|0;if(i)k=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);i=i+-142|0}while(i>>>0>142);i=c[j>>2]|0;k=6}if((k|0)==6)Qn(c[f>>2]|0,17104,i,0,0);k=c[f>>2]|0;c[m>>2]=b;g[m+8>>3]=l;j=m+16|0;c[j>>2]=d;c[j+4>>2]=e;Pn(k,324345,m);m=c[a+12>>2]|0;m=ha[c[(c[m>>2]|0)+768>>2]&127](m,b,d,e)|0;aa=n;return m|0}function Wx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+32|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;k=c[d>>2]|0;e=c[d+4>>2]|0;f=c[d+8>>2]|0;g=c[d+12>>2]|0;c[i>>2]=b;c[i+4>>2]=k;c[i+8>>2]=e;c[i+12>>2]=f;c[i+16>>2]=g;Pn(h,324271,i);a=c[a+12>>2]|0;h=c[(c[a>>2]|0)+772>>2]|0;c[i>>2]=c[d>>2];c[i+4>>2]=c[d+4>>2];c[i+8>>2]=c[d+8>>2];c[i+12>>2]=c[d+12>>2];i=ga[h&127](a,b,i)|0;aa=j;return i|0}function Xx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,324217,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+776>>2]&127](i,b,d)|0;aa=j;return i|0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a+16|0;f=c[g>>2]|0;if(f>>>0<=142){e=a+8|0;if(f)h=6}else{e=a+8|0;do{Qn(c[e>>2]|0,17104,142,0,0);f=f+-142|0}while(f>>>0>142);f=c[g>>2]|0;h=6}if((h|0)==6)Qn(c[e>>2]|0,17104,f,0,0);h=c[e>>2]|0;c[i>>2]=b;c[i+4>>2]=d;Pn(h,324171,i);i=c[a+12>>2]|0;i=ga[c[(c[i>>2]|0)+780>>2]&127](i,b,d)|0;aa=j;return i|0}function Zx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;h=a+16|0;g=c[h>>2]|0;if(g>>>0<=142){f=a+8|0;if(g)i=6}else{f=a+8|0;do{Qn(c[f>>2]|0,17104,142,0,0);g=g+-142|0}while(g>>>0>142);g=c[h>>2]|0;i=6}if((i|0)==6)Qn(c[f>>2]|0,17104,g,0,0);i=c[f>>2]|0;c[j>>2]=b;h=j+8|0;c[h>>2]=d;c[h+4>>2]=e;Pn(i,324123,j);j=c[a+12>>2]|0;j=ha[c[(c[j>>2]|0)+784>>2]&127](j,b,d,e)|0;aa=k;return j|0}function _x(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f+8|0;d=f;if((b|0)>-1){c[d>>2]=b;Pn(a,326858,d);aa=f;return}do switch(b|0){case -1:{b=330980;break}case -2:{b=330976;break}case -3:{b=330972;break}case -4:{b=330968;break}case -5:{b=330963;break}case -16:{b=330955;break}case -32:{b=330950;break}case -24:{b=330939;break}case -64:{b=330934;break}case -17:{b=330923;break}default:b=330910}while(0);c[e>>2]=b;Pn(a,330905,e);aa=f;return}function $x(a,b,d){a=a|0;b=b|0;d=d|0;c[a+4>>2]=0;c[a>>2]=290948;c[a+8>>2]=b;c[a+12>>2]=d;c[a+16>>2]=0;return}function ay(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;e=h+24|0;g=h;if(!(c[a+12>>2]|0)){aa=h;return}c[e>>2]=0;f=e+4|0;c[f>>2]=0;c[e+8>>2]=0;by(a,e);d=c[e>>2]|0;cy(d,c[f>>2]|0);a=c[b+16>>2]|0;do if(a)if((b|0)==(a|0)){b=g+16|0;c[b>>2]=g;na[c[(c[a>>2]|0)+12>>2]&31](a,g);a=b;break}else{b=ea[c[(c[a>>2]|0)+8>>2]&127](a)|0;a=g+16|0;c[a>>2]=b;break}else{a=g+16|0;c[a>>2]=0}while(0);dy(e,g);a=c[a>>2]|0;if((g|0)!=(a|0)){if(a|0)ma[c[(c[a>>2]|0)+20>>2]&255](a)}else ma[c[(c[a>>2]|0)+16>>2]&255](a);if(d|0){c[f>>2]=d;$A(d)}aa=h;return}function by(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+16|0;r=s;b=c[b+8>>2]|0;e=c[b>>2]|0;if(!e){aa=s;return}p=d+4|0;q=d+8|0;m=1;o=e;while(1){i=b;l=i+8|0;h=o;n=h+8|0;f=a[l+11>>0]|0;k=f<<24>>24<0;f=f&255;i=k?c[i+12>>2]|0:f;j=a[n+11>>0]|0;e=j<<24>>24<0;a:do if((i|0)==((e?c[h+12>>2]|0:j&255)|0)){g=c[l>>2]|0;j=k?g:l;e=e?c[n>>2]|0:n;h=(i|0)==0;g=g&255;b:do if(k){if(!h?Tz(j,e,i)|0:0){b=o;e=1;break a}}else if(!h){if((a[e>>0]|0)!=g<<24>>24){b=o;e=1;break a}g=l;while(1){f=f+-1|0;g=g+1|0;if(!f)break b;e=e+1|0;if((a[g>>0]|0)!=(a[e>>0]|0)){b=o;e=1;break a}}}while(0);if(m){c[r>>2]=l;e=c[p>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[e>>2]=l;c[p>>2]=(c[p>>2]|0)+4}else hy(d,r)}c[r>>2]=n;e=c[p>>2]|0;if(e>>>0<(c[q>>2]|0)>>>0){c[e>>2]=n;c[p>>2]=(c[p>>2]|0)+4}else hy(d,r);e=0}else{b=o;e=1}while(0);o=c[o>>2]|0;if(!o)break;else m=e}aa=s;return}function cy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;a:while(1){r=b;d=b+-4|0;q=b+-8|0;b:while(1){p=a;f=r-p|0;e=f>>2;switch(e|0){case 2:{q=4;break a}case 3:{q=8;break a}case 4:{q=26;break a}case 5:{q=27;break a}case 1:case 0:{q=144;break a}default:{}}if((f|0)<124){q=29;break a}m=a+(((e|0)/2|0)<<2)|0;do if((f|0)>3996){e=(e|0)/4|0;e=fy(a,a+(e<<2)|0,m,m+(e<<2)|0,d)|0}else{h=c[m>>2]|0;n=c[a>>2]|0;i=c[h+20>>2]|0;l=n+20|0;e=c[l>>2]|0;k=h;o=n;if((i|0)>=(e|0))if((i|0)==(e|0))g=(c[h+24>>2]|0)<(c[n+24>>2]|0);else g=0;else g=1;e=c[d>>2]|0;f=c[e+20>>2]|0;j=e;if((f|0)>=(i|0))if((f|0)==(i|0))e=(c[e+24>>2]|0)<(c[h+24>>2]|0);else e=0;else e=1;if(!g){if(!e){e=0;break}c[m>>2]=j;c[d>>2]=k;e=c[m>>2]|0;f=c[a>>2]|0;g=c[e+20>>2]|0;h=c[f+20>>2]|0;i=f;j=e;if((g|0)>=(h|0)){if((g|0)!=(h|0)){e=1;break}if((c[e+24>>2]|0)>=(c[f+24>>2]|0)){e=1;break}}c[a>>2]=j;c[m>>2]=i;e=2;break}if(e){c[a>>2]=j;c[d>>2]=o;e=1;break}c[a>>2]=k;c[m>>2]=o;g=c[d>>2]|0;h=c[g+20>>2]|0;e=c[l>>2]|0;f=g;if((h|0)>=(e|0)){if((h|0)!=(e|0)){e=1;break}if((c[g+24>>2]|0)>=(c[n+24>>2]|0)){e=1;break}}c[m>>2]=f;c[d>>2]=o;e=2}while(0);l=c[a>>2]|0;f=c[m>>2]|0;n=c[l+20>>2]|0;j=c[f+20>>2]|0;k=l;do if((n|0)<(j|0))g=d;else{if((n|0)==(j|0)?(c[l+24>>2]|0)<(c[f+24>>2]|0):0){g=d;break}if((a|0)==(q|0)){i=q;q=87;break b}i=f+24|0;g=q;while(1){f=c[g>>2]|0;h=c[f+20>>2]|0;if((h|0)<(j|0))break;if((h|0)==(j|0)?(c[f+24>>2]|0)<(c[i>>2]|0):0)break;g=g+-4|0;if((a|0)==(g|0)){i=a;q=87;break b}}c[a>>2]=f;c[g>>2]=k;e=e+1|0}while(0);f=a+4|0;c:do if(f>>>0<g>>>0)while(1){k=c[m>>2]|0;j=c[k+20>>2]|0;k=k+24|0;l=f;while(1){f=c[l>>2]|0;h=c[f+20>>2]|0;if((h|0)>=(j|0)){if((h|0)!=(j|0))break;if((c[f+24>>2]|0)>=(c[k>>2]|0))break}l=l+4|0}h=g+-4|0;i=c[h>>2]|0;g=c[i+20>>2]|0;d:do if((g|0)>=(j|0))do{if((g|0)==(j|0)?(c[i+24>>2]|0)<(c[k>>2]|0):0)break d;h=h+-4|0;i=c[h>>2]|0;g=c[i+20>>2]|0}while((g|0)>=(j|0));while(0);if(l>>>0>h>>>0){f=l;break c}c[l>>2]=c[h>>2];c[h>>2]=f;f=l+4|0;g=h;m=(m|0)==(l|0)?h:m;e=e+1|0}while(0);do if((f|0)!=(m|0)){g=c[m>>2]|0;h=c[f>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0))break;if((c[g+24>>2]|0)>=(c[h+24>>2]|0))break}c[f>>2]=l;c[m>>2]=k;e=e+1|0}while(0);if(!e){g=gy(a,f)|0;e=f+4|0;if(gy(e,b)|0){q=137;break}if(g){a=e;d=2;q=142;break}}o=f;if((o-p|0)>=(r-o|0)){q=141;break}cy(a,f);a=f+4|0}e:do if((q|0)==87){a=i+4|0;e=c[d>>2]|0;f=c[e+20>>2]|0;h=e;do if((n|0)>=(f|0)){if((n|0)==(f|0)?(c[l+24>>2]|0)<(c[e+24>>2]|0):0)break;if((a|0)==(d|0)){q=144;break a}g=l+24|0;while(1){e=c[a>>2]|0;f=c[e+20>>2]|0;if((n|0)<(f|0))break;if((n|0)==(f|0)?(c[g>>2]|0)<(c[e+24>>2]|0):0)break;a=a+4|0;if((a|0)==(d|0)){q=144;break a}}c[a>>2]=h;c[d>>2]=e;a=a+4|0}while(0);if((a|0)==(d|0)){q=144;break a}while(1){g=c[i>>2]|0;f=c[a>>2]|0;h=c[g+20>>2]|0;e=c[f+20>>2]|0;g=g+24|0;f:do if((h|0)>=(e|0))do{if((h|0)==(e|0)?(c[g>>2]|0)<(c[f+24>>2]|0):0)break f;a=a+4|0;f=c[a>>2]|0;e=c[f+20>>2]|0}while((h|0)>=(e|0));while(0);while(1){d=d+-4|0;e=c[d>>2]|0;f=c[e+20>>2]|0;if((h|0)>=(f|0)){if((h|0)!=(f|0))break;if((c[g>>2]|0)>=(c[e+24>>2]|0))break}}if(a>>>0>=d>>>0){d=4;q=142;break e}r=c[a>>2]|0;c[a>>2]=e;c[d>>2]=r;a=a+4|0}}else if((q|0)==137){b=g?b:f;d=g?1:2;q=142}else if((q|0)==141){q=0;cy(f+4|0,b);b=f}while(0);if((q|0)==142)switch(d&7){case 2:case 4:case 0:break;default:{q=144;break a}}}if((q|0)==4){b=c[d>>2]|0;e=c[a>>2]|0;f=c[b+20>>2]|0;g=c[e+20>>2]|0;h=e;i=b;if((f|0)>=(g|0)){if((f|0)!=(g|0))return;if((c[b+24>>2]|0)>=(c[e+24>>2]|0))return}c[a>>2]=i;c[d>>2]=h;return}else if((q|0)==8){n=a+4|0;i=c[n>>2]|0;m=c[a>>2]|0;f=c[i+20>>2]|0;k=m+20|0;b=c[k>>2]|0;j=i;l=m;if((f|0)>=(b|0))if((f|0)==(b|0))g=(c[i+24>>2]|0)<(c[m+24>>2]|0);else g=0;else g=1;b=c[d>>2]|0;e=c[b+20>>2]|0;h=b;if((e|0)>=(f|0))if((e|0)==(f|0))b=(c[b+24>>2]|0)<(c[i+24>>2]|0);else b=0;else b=1;if(!g){if(!b)return;c[n>>2]=h;c[d>>2]=j;b=c[n>>2]|0;d=c[a>>2]|0;e=c[b+20>>2]|0;f=c[d+20>>2]|0;g=d;h=b;if((e|0)>=(f|0)){if((e|0)!=(f|0))return;if((c[b+24>>2]|0)>=(c[d+24>>2]|0))return}c[a>>2]=h;c[n>>2]=g;return}if(b){c[a>>2]=h;c[d>>2]=l;return}c[a>>2]=j;c[n>>2]=l;e=c[d>>2]|0;f=c[e+20>>2]|0;a=c[k>>2]|0;b=e;if((f|0)>=(a|0)){if((f|0)!=(a|0))return;if((c[e+24>>2]|0)>=(c[m+24>>2]|0))return}c[n>>2]=b;c[d>>2]=l;return}else if((q|0)==26){ey(a,a+4|0,a+8|0,d)|0;return}else if((q|0)==27){fy(a,a+4|0,a+8|0,a+12|0,d)|0;return}else if((q|0)==29){i=a+8|0;o=a+4|0;d=c[o>>2]|0;p=c[a>>2]|0;h=c[d+20>>2]|0;k=p+20|0;e=c[k>>2]|0;f=d;m=p;if((h|0)>=(e|0))if((h|0)==(e|0))g=(c[d+24>>2]|0)<(c[p+24>>2]|0);else g=0;else g=1;n=c[i>>2]|0;j=n+20|0;e=c[j>>2]|0;l=n;if((e|0)>=(h|0))if((e|0)==(h|0))e=(c[n+24>>2]|0)<(c[d+24>>2]|0);else e=0;else e=1;do if(!g)if(e){c[o>>2]=l;c[i>>2]=f;g=c[j>>2]|0;e=c[k>>2]|0;if((g|0)>=(e|0)){if((g|0)!=(e|0))break;if((c[n+24>>2]|0)>=(c[p+24>>2]|0))break}c[a>>2]=l;c[o>>2]=m}else{f=l;d=n}else{if(e){c[a>>2]=l;c[i>>2]=m;f=m;d=p;break}c[a>>2]=f;c[o>>2]=m;e=c[j>>2]|0;d=c[k>>2]|0;if((e|0)>=(d|0)){if((e|0)!=(d|0)){f=l;d=n;break}if((c[n+24>>2]|0)>=(c[p+24>>2]|0)){f=l;d=n;break}}c[o>>2]=l;c[i>>2]=m;f=m;d=p}while(0);e=a+12|0;if((e|0)==(b|0))return;m=e;while(1){e=c[m>>2]|0;k=e+20|0;g=c[k>>2]|0;h=c[d+20>>2]|0;l=e;if((g|0)>=(h|0)){if((g|0)==(h|0)?(s=e+24|0,(c[s>>2]|0)<(c[d+24>>2]|0)):0){j=s;q=53}}else{j=e+24|0;q=53}if((q|0)==53){q=0;c[m>>2]=f;g:do if((i|0)==(a|0))d=a;else{e=i;while(1){d=e;e=e+-4|0;f=c[e>>2]|0;g=c[k>>2]|0;h=c[f+20>>2]|0;i=f;if((g|0)>=(h|0)){if((g|0)!=(h|0))break g;if((c[j>>2]|0)>=(c[f+24>>2]|0))break g}c[d>>2]=i;if((e|0)==(a|0)){d=a;break}}}while(0);c[d>>2]=l}e=m+4|0;if((e|0)==(b|0))break;f=c[m>>2]|0;i=m;d=f;m=e}return}else if((q|0)==144)return}function dy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=c[b>>2]|0;p=b+4|0;o=c[p>>2]|0;if((f|0)==(o|0))return;n=d+16|0;d=f;e=o;while(1){a:do if((d|0)!=(e|0)){l=c[f>>2]|0;m=a[l+11>>0]|0;k=m<<24>>24<0;m=k?c[l+4>>2]|0:m&255;g=(m|0)==0;if(k){if(g)while(1){l=c[d>>2]|0;m=a[l+11>>0]|0;if(!((m<<24>>24<0?c[l+4>>2]|0:m&255)|0)){e=d;break a}d=d+4|0;if((d|0)==(e|0))break a}do{h=c[d>>2]|0;j=a[h+11>>0]|0;k=j<<24>>24<0;j=j&255;do if(((k?c[h+4>>2]|0:j)|0)==(m|0)){i=c[h>>2]|0;g=c[l>>2]|0;if(k)if(!(Tz(i,g,m)|0)){e=d;break a}else break;if((a[g>>0]|0)==(i&255)<<24>>24){i=j;do{i=i+-1|0;h=h+1|0;if(!i){e=d;break a}g=g+1|0}while((a[h>>0]|0)==(a[g>>0]|0))}}while(0);d=d+4|0}while((d|0)!=(e|0))}else{if(g)while(1){l=c[d>>2]|0;m=a[l+11>>0]|0;if(!((m<<24>>24<0?c[l+4>>2]|0:m&255)|0)){e=d;break a}d=d+4|0;if((d|0)==(e|0))break a}do{g=c[d>>2]|0;i=a[g+11>>0]|0;j=i<<24>>24<0;i=i&255;do if(((j?c[g+4>>2]|0:i)|0)==(m|0)){h=c[g>>2]|0;if(j)if(!(Tz(h,l,m)|0)){e=d;break a}else break;if((a[l>>0]|0)==(h&255)<<24>>24){h=l;do{i=i+-1|0;g=g+1|0;if(!i){e=d;break a}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);d=d+4|0}while((d|0)!=(e|0))}}while(0);if((e|0)!=(f|0)){d=c[n>>2]|0;if(!d){d=34;break}oa[c[(c[d>>2]|0)+24>>2]&15](d,c[e>>2]|0,c[f>>2]|0)}f=f+4|0;if((f|0)==(o|0)){d=3;break}d=c[b>>2]|0;e=c[p>>2]|0}if((d|0)==3)return;else if((d|0)==34)U()}function ey(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=c[b>>2]|0;m=c[a>>2]|0;f=n+20|0;h=c[f>>2]|0;q=m+20|0;g=c[q>>2]|0;p=n;o=m;if((h|0)>=(g|0))if((h|0)==(g|0))i=(c[n+24>>2]|0)<(c[m+24>>2]|0);else i=0;else i=1;k=c[d>>2]|0;l=k+20|0;g=c[l>>2]|0;j=k;if((g|0)>=(h|0))if((g|0)==(h|0))g=(c[k+24>>2]|0)<(c[n+24>>2]|0);else g=0;else g=1;do if(!i)if(g){c[b>>2]=j;c[d>>2]=p;g=c[b>>2]|0;h=c[a>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0)){k=n;j=p;m=1;break}if((c[g+24>>2]|0)>=(c[h+24>>2]|0)){k=n;j=p;m=1;break}}c[a>>2]=l;c[b>>2]=k;f=c[d>>2]|0;k=f;j=f;f=f+20|0;m=2}else{f=l;m=0}else{if(g){c[a>>2]=j;c[d>>2]=o;k=m;j=o;f=q;m=1;break}c[a>>2]=p;c[b>>2]=o;g=c[d>>2]|0;f=g+20|0;h=c[f>>2]|0;i=c[q>>2]|0;j=g;if((h|0)>=(i|0)){if((h|0)!=(i|0)){k=g;m=1;break}if((c[g+24>>2]|0)>=(c[m+24>>2]|0)){k=g;m=1;break}}c[b>>2]=j;c[d>>2]=o;k=m;j=o;f=q;m=2}while(0);h=c[e>>2]|0;i=c[h+20>>2]|0;f=c[f>>2]|0;g=h;if((i|0)>=(f|0)){if((i|0)!=(f|0)){b=m;return b|0}if((c[h+24>>2]|0)>=(c[k+24>>2]|0)){b=m;return b|0}}c[d>>2]=g;c[e>>2]=j;l=m+1|0;f=c[d>>2]|0;g=c[b>>2]|0;h=c[f+20>>2]|0;i=c[g+20>>2]|0;j=g;k=f;if((h|0)>=(i|0)){if((h|0)!=(i|0)){b=l;return b|0}if((c[f+24>>2]|0)>=(c[g+24>>2]|0)){b=l;return b|0}}c[b>>2]=k;c[d>>2]=j;l=m+2|0;f=c[b>>2]|0;g=c[a>>2]|0;h=c[f+20>>2]|0;i=c[g+20>>2]|0;j=g;k=f;if((h|0)>=(i|0)){if((h|0)!=(i|0)){b=l;return b|0}if((c[f+24>>2]|0)>=(c[g+24>>2]|0)){b=l;return b|0}}c[a>>2]=k;c[b>>2]=j;b=m+3|0;return b|0}function fy(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=ey(a,b,d,e)|0;g=c[f>>2]|0;h=c[e>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0))return m|0;if((c[g+24>>2]|0)>=(c[h+24>>2]|0))return m|0}c[e>>2]=l;c[f>>2]=k;f=m+1|0;k=c[e>>2]|0;l=c[d>>2]|0;g=c[k+20>>2]|0;h=c[l+20>>2]|0;i=l;j=k;if((g|0)>=(h|0)){if((g|0)!=(h|0)){m=f;return m|0}if((c[k+24>>2]|0)>=(c[l+24>>2]|0)){m=f;return m|0}}c[d>>2]=j;c[e>>2]=i;f=m+2|0;g=c[d>>2]|0;h=c[b>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0)){m=f;return m|0}if((c[g+24>>2]|0)>=(c[h+24>>2]|0)){m=f;return m|0}}c[b>>2]=l;c[d>>2]=k;f=m+3|0;g=c[b>>2]|0;h=c[a>>2]|0;i=c[g+20>>2]|0;j=c[h+20>>2]|0;k=h;l=g;if((i|0)>=(j|0)){if((i|0)!=(j|0)){m=f;return m|0}if((c[g+24>>2]|0)>=(c[h+24>>2]|0)){m=f;return m|0}}c[a>>2]=l;c[b>>2]=k;m=m+4|0;return m|0}function gy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;switch(b-a>>2|0){case 2:{j=b+-4|0;d=c[j>>2]|0;e=c[a>>2]|0;f=c[d+20>>2]|0;g=c[e+20>>2]|0;h=e;i=d;if((f|0)>=(g|0)){if((f|0)!=(g|0)){a=1;return a|0}if((c[d+24>>2]|0)>=(c[e+24>>2]|0)){a=1;return a|0}}c[a>>2]=i;c[j>>2]=h;a=1;return a|0}case 3:{o=a+4|0;n=b+-4|0;i=c[o>>2]|0;m=c[a>>2]|0;f=c[i+20>>2]|0;k=m+20|0;d=c[k>>2]|0;j=i;l=m;if((f|0)>=(d|0))if((f|0)==(d|0))h=(c[i+24>>2]|0)<(c[m+24>>2]|0);else h=0;else h=1;d=c[n>>2]|0;e=c[d+20>>2]|0;g=d;if((e|0)>=(f|0))if((e|0)==(f|0))d=(c[d+24>>2]|0)<(c[i+24>>2]|0);else d=0;else d=1;if(!h){if(!d){a=1;return a|0}c[o>>2]=g;c[n>>2]=j;d=c[o>>2]|0;e=c[a>>2]|0;f=c[d+20>>2]|0;g=c[e+20>>2]|0;h=e;i=d;if((f|0)>=(g|0)){if((f|0)!=(g|0)){a=1;return a|0}if((c[d+24>>2]|0)>=(c[e+24>>2]|0)){a=1;return a|0}}c[a>>2]=i;c[o>>2]=h;a=1;return a|0}if(d){c[a>>2]=g;c[n>>2]=l;a=1;return a|0}c[a>>2]=j;c[o>>2]=l;f=c[n>>2]|0;g=c[f+20>>2]|0;d=c[k>>2]|0;e=f;if((g|0)>=(d|0)){if((g|0)!=(d|0)){a=1;return a|0}if((c[f+24>>2]|0)>=(c[m+24>>2]|0)){a=1;return a|0}}c[o>>2]=e;c[n>>2]=l;a=1;return a|0}case 4:{ey(a,a+4|0,a+8|0,b+-4|0)|0;a=1;return a|0}case 5:{fy(a,a+4|0,a+8|0,a+12|0,b+-4|0)|0;a=1;return a|0}case 1:case 0:{a=1;return a|0}default:{e=a+8|0;o=a+4|0;d=c[o>>2]|0;p=c[a>>2]|0;h=c[d+20>>2]|0;k=p+20|0;f=c[k>>2]|0;g=d;m=p;if((h|0)>=(f|0))if((h|0)==(f|0))i=(c[d+24>>2]|0)<(c[p+24>>2]|0);else i=0;else i=1;n=c[e>>2]|0;j=n+20|0;f=c[j>>2]|0;l=n;if((f|0)>=(h|0))if((f|0)==(h|0))f=(c[n+24>>2]|0)<(c[d+24>>2]|0);else f=0;else f=1;do if(!i)if(f){c[o>>2]=l;c[e>>2]=g;h=c[j>>2]|0;f=c[k>>2]|0;if((h|0)>=(f|0)){if((h|0)!=(f|0))break;if((c[n+24>>2]|0)>=(c[p+24>>2]|0))break}c[a>>2]=l;c[o>>2]=m}else{g=l;d=n}else{if(f){c[a>>2]=l;c[e>>2]=m;g=m;d=p;break}c[a>>2]=g;c[o>>2]=m;f=c[j>>2]|0;d=c[k>>2]|0;if((f|0)>=(d|0)){if((f|0)!=(d|0)){g=l;d=n;break}if((c[n+24>>2]|0)>=(c[p+24>>2]|0)){g=l;d=n;break}}c[o>>2]=l;c[e>>2]=m;g=m;d=p}while(0);f=a+12|0;if((f|0)==(b|0)){a=1;return a|0}k=d;d=0;while(1){h=c[f>>2]|0;m=h+20|0;i=c[m>>2]|0;j=c[k+20>>2]|0;n=h;if((i|0)>=(j|0)){if((i|0)==(j|0)?(q=h+24|0,(c[q>>2]|0)<(c[k+24>>2]|0)):0){l=q;r=50}}else{l=h+24|0;r=50}if((r|0)==50){r=0;c[f>>2]=g;a:do if((e|0)!=(a|0)){g=e;while(1){e=g;g=g+-4|0;h=c[g>>2]|0;i=c[m>>2]|0;j=c[h+20>>2]|0;k=h;if((i|0)>=(j|0)){if((i|0)!=(j|0))break a;if((c[l>>2]|0)>=(c[h+24>>2]|0))break a}c[e>>2]=k;if((g|0)==(a|0)){e=a;break}}}while(0);c[e>>2]=n;d=d+1|0;if((d|0)==8)break}e=f+4|0;if((e|0)==(b|0)){d=1;r=60;break}g=c[f>>2]|0;p=f;k=g;f=e;e=p}if((r|0)==60)return d|0;a=(f+4|0)==(b|0);return a|0}}return 0}function hy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function iy(a,b){a=a|0;b=b|0;do if((c[b+20>>2]|0)==1){a=Lg(a,b+24|0)|0;if(!a){b=-1;return b|0}else{a=a+40|0;break}}else a=b+24|0;while(0);b=c[a>>2]|0;return b|0}function jy(a){a=a|0;if((a|0)>=112){a=330060;return a|0}a=c[279392+(a<<2)>>2]|0;return a|0}function ky(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;return}function ly(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;c[a+24>>2]=e;return}function my(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;c[a+24>>2]=e;c[a+28>>2]=f;return}function ny(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;c[a+24>>2]=e;return}function oy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=d;d=a+24|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];return}function py(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;e=h;f=c[d+20>>2]|0;if(f>>>0<42){e=c[279392+(f<<2)>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Uz(e)|0;if(f>>>0>4294967279)aB();if(f>>>0<11){a[b+11>>0]=f;if(f)g=7}else{d=f+16&-16;g=_A(d)|0;c[b>>2]=g;c[b+8>>2]=d|-2147483648;c[b+4>>2]=f;b=g;g=7}if((g|0)==7)sC(b|0,e|0,f|0)|0;a[b+f>>0]=0;aa=h;return}if((f+-42|0)>>>0<3){Wn(b,c[d+28>>2]|0,c[d+32>>2]|0);aa=h;return}if((f+-45|0)>>>0<60){Am(e,c[d+24>>2]|0);e=c[e>>2]|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Uz(e)|0;if(f>>>0>4294967279)aB();if(f>>>0<11){a[b+11>>0]=f;if(f)g=17}else{d=f+16&-16;g=_A(d)|0;c[b>>2]=g;c[b+8>>2]=d|-2147483648;c[b+4>>2]=f;b=g;g=17}if((g|0)==17)sC(b|0,e|0,f|0)|0;a[b+f>>0]=0;aa=h;return}e=d+24|0;if((f+-105|0)>>>0<6){Wn(b,c[e>>2]|0,c[d+28>>2]|0);aa=h;return}do switch(c[e>>2]|0){case -1:{e=330980;break}case -2:{e=330976;break}case -3:{e=330972;break}case -4:{e=330968;break}case -5:{e=330963;break}case -16:{e=330955;break}case -32:{e=330950;break}case -24:{e=330939;break}case -64:{e=330934;break}case 0:{e=330930;break}case -17:{e=330923;break}default:e=330910}while(0);c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=Uz(e)|0;if(f>>>0>4294967279)aB();if(f>>>0<11){a[b+11>>0]=f;if(f)g=38}else{d=f+16&-16;g=_A(d)|0;c[b>>2]=g;c[b+8>>2]=d|-2147483648;c[b+4>>2]=f;b=g;g=38}if((g|0)==38)sC(b|0,e|0,f|0)|0;a[b+f>>0]=0;aa=h;return}function qy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+32|0;f=g+12|0;e=g;py(f,d);h=a[f+11>>0]|0;d=h<<24>>24<0;if((d?c[f+4>>2]|0:h&255)>>>0<=80){c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;aa=g;return}jB(e,f,0,77);vB(e,330828)|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;if(!d){aa=g;return}$A(c[f>>2]|0);aa=g;return}function ry(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;c[b>>2]=d;i=b+4|0;c[i>>2]=0;m=b+8|0;c[m>>2]=0;h=b+12|0;c[h>>2]=0;k=e+4|0;d=(c[k>>2]|0)-(c[e>>2]|0)|0;j=d>>2;if(d|0){if(j>>>0>1073741823)HB();l=_A(d)|0;c[m>>2]=l;c[i>>2]=l;c[h>>2]=l+(j<<2);h=c[e>>2]|0;d=(c[k>>2]|0)-h|0;if((d|0)>0){sC(l|0,h|0,d|0)|0;c[m>>2]=l+(d>>>2<<2)}}i=b+16|0;c[i>>2]=0;e=b+20|0;c[e>>2]=0;h=b+24|0;c[h>>2]=0;k=f+4|0;d=(c[k>>2]|0)-(c[f>>2]|0)|0;j=d>>2;if(!d){f=b+28|0;c[f>>2]=g;b=b+32|0;a[b>>0]=0;return}if(j>>>0>1073741823)HB();l=_A(d)|0;c[e>>2]=l;c[i>>2]=l;c[h>>2]=l+(j<<2);h=c[f>>2]|0;d=(c[k>>2]|0)-h|0;if((d|0)<=0){f=b+28|0;c[f>>2]=g;b=b+32|0;a[b>>0]=0;return}sC(l|0,h|0,d|0)|0;c[e>>2]=l+(d>>>2<<2);f=b+28|0;c[f>>2]=g;b=b+32|0;a[b>>0]=0;return}function sy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+176|0;i=j+160|0;f=j+144|0;h=j+128|0;e=j;g=a+16|0;if(!(c[g>>2]|0)){aa=j;return}c[f>>2]=d;c[h>>2]=c[f>>2];a=(Vz(e,128,b,f)|0)+1|0;if(a>>>0>128){e=aa;aa=aa+((1*a|0)+15&-16)|0;Vz(e,a,b,h)|0}c[i>>2]=e;e=c[g>>2]|0;if(!e)U();na[c[(c[e>>2]|0)+24>>2]&31](e,i);aa=j;return}function ty(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=b+4|0;h=c[b>>2]|0;j=((c[m>>2]|0)-h|0)/36|0;i=j+1|0;if(i>>>0>119304647)HB();n=b+8|0;l=((c[n>>2]|0)-h|0)/36|0;h=l<<1;h=l>>>0<59652323?(h>>>0<i>>>0?i:h):119304647;do if(h)if(h>>>0>119304647)U();else{k=_A(h*36|0)|0;break}else k=0;while(0);i=k+(j*36|0)|0;l=k+(h*36|0)|0;ry(i,c[d>>2]|0,e,f,c[g>>2]|0);d=i+36|0;j=c[b>>2]|0;h=c[m>>2]|0;if((h|0)==(j|0)){h=i;k=j;i=j}else{do{f=h;h=h+-36|0;c[i+-36>>2]=c[h>>2];g=i+-32|0;e=f+-32|0;c[g>>2]=0;k=i+-28|0;c[k>>2]=0;o=i+-24|0;c[o>>2]=0;c[g>>2]=c[e>>2];g=f+-28|0;c[k>>2]=c[g>>2];k=f+-24|0;c[o>>2]=c[k>>2];c[k>>2]=0;c[g>>2]=0;c[e>>2]=0;e=i+-20|0;g=f+-20|0;c[e>>2]=0;k=i+-16|0;c[k>>2]=0;o=i+-12|0;c[o>>2]=0;c[e>>2]=c[g>>2];e=f+-16|0;c[k>>2]=c[e>>2];k=f+-12|0;c[o>>2]=c[k>>2];c[k>>2]=0;c[e>>2]=0;c[g>>2]=0;g=i+-8|0;f=f+-8|0;c[g>>2]=c[f>>2];a[g+4>>0]=a[f+4>>0]|0;i=i+-36|0}while((h|0)!=(j|0));h=i;k=c[b>>2]|0;i=c[m>>2]|0}c[b>>2]=h;c[m>>2]=d;c[n>>2]=l;j=k;if((i|0)!=(j|0))do{h=c[i+-20>>2]|0;if(h|0){c[i+-16>>2]=h;$A(h)}h=c[i+-32>>2]|0;if(h|0){c[i+-28>>2]=h;$A(h)}i=i+-36|0}while((i|0)!=(j|0));if(!k)return;$A(k);return}function uy(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=aa;aa=aa+64|0;s=y+16|0;x=y+8|0;h=y;u=y+48|0;w=y+36|0;v=y+24|0;if(!d){aa=y;return}r=b+36|0;p=b+40|0;d=c[r>>2]|0;t=(c[p>>2]|0)-d|0;g=(t|0)/36|0;if(!t){c[h>>2]=0;c[h+4>>2]=g+-1;sy(b,330832,h);d=0}else d=c[d+((g+-1|0)*36|0)+28>>2]|0;c[u>>2]=0;t=u+4|0;c[t>>2]=0;n=u+8|0;c[n>>2]=0;o=b+24|0;m=b+28|0;q=((c[m>>2]|0)-(c[o>>2]|0)>>2)-d|0;l=(c[f+4>>2]|0)-(c[f>>2]|0)|0;k=l>>2;k=(l|0)==0?(q>>>0<4?q:4):q>>>0<k>>>0?q:k;q=(k|0)==(q|0);if(k|0){l=0;do{j=k-l|0;d=c[r>>2]|0;i=(c[p>>2]|0)-d|0;h=(i|0)/36|0;do if(i){g=c[o>>2]|0;i=(c[m>>2]|0)-g>>2;if((j+-1+(c[d+((h+-1|0)*36|0)+28>>2]|0)|0)>>>0<i>>>0){g=c[g+(i-j<<2)>>2]|0;c[w>>2]=g;break}else{c[w>>2]=0;g=0;break}}else{c[s>>2]=0;c[s+4>>2]=h+-1;sy(b,330832,s);g=0}while(0);d=c[t>>2]|0;if((d|0)==(c[n>>2]|0))fo(u,w);else{c[d>>2]=g;c[t>>2]=d+4}l=l+1|0}while((l|0)!=(k|0))}d=_A(32)|0;c[w>>2]=d;c[w+8>>2]=-2147483616;c[w+4>>2]=17;g=d;h=330860;i=g+17|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));a[d+17>>0]=0;vB(w,e)|0;vB(w,330878)|0;vy(v,f,0);f=v+11|0;e=a[f>>0]|0;s=e<<24>>24<0;uB(w,s?c[v>>2]|0:v,s?c[v+4>>2]|0:e&255)|0;if((a[f>>0]|0)<0)$A(c[v>>2]|0);vB(w,330890)|0;vy(v,u,q?0:330900);f=v+11|0;e=a[f>>0]|0;s=e<<24>>24<0;uB(w,s?c[v>>2]|0:v,s?c[v+4>>2]|0:e&255)|0;if((a[f>>0]|0)<0)$A(c[v>>2]|0);v=w+11|0;c[x>>2]=(a[v>>0]|0)<0?c[w>>2]|0:w;sy(b,330905,x);if((a[v>>0]|0)<0)$A(c[w>>2]|0);d=c[u>>2]|0;if(d|0){c[t>>2]=d;$A(d)}aa=y;return}function vy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;a[b+11>>0]=1;a[b>>0]=91;a[b+1>>0]=0;if(e|0)vB(b,e)|0;h=d+4|0;e=c[d>>2]|0;if((c[h>>2]|0)==(e|0)){vB(b,330908)|0;return}g=0;do{do switch(c[e+(g<<2)>>2]|0){case -1:{e=330980;break}case -2:{e=330976;break}case -3:{e=330972;break}case -4:{e=330968;break}case -5:{e=330963;break}case -16:{e=330955;break}case -32:{e=330950;break}case -24:{e=330939;break}case -64:{e=330934;break}case 0:{e=330930;break}case -17:{e=330923;break}default:e=330910}while(0);vB(b,e)|0;e=c[d>>2]|0;f=(c[h>>2]|0)-e>>2;if(g>>>0<(f+-1|0)>>>0){vB(b,330984)|0;f=c[d>>2]|0;e=f;f=(c[h>>2]|0)-f>>2}g=g+1|0}while(g>>>0<f>>>0);vB(b,330908)|0;return}function wy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=aa;aa=aa+16|0;u=v;p=d+4|0;f=c[p>>2]|0;g=c[d>>2]|0;h=f-g|0;if(!h){u=0;uy(b,u,e,d);aa=v;return u|0}s=b+36|0;q=b+40|0;t=b+24|0;r=b+28|0;m=f;o=0;f=0;h=h>>2;do{l=h-o|0;n=c[g+(o<<2)>>2]|0;h=c[s>>2]|0;k=(c[q>>2]|0)-h|0;i=(k|0)/36|0;do if(k){k=i+-1|0;i=c[t>>2]|0;j=(c[r>>2]|0)-i>>2;if((l+-1+(c[h+(k*36|0)+28>>2]|0)|0)>>>0<j>>>0){i=c[i+(j-l<<2)>>2]|0;h=0;break}else{i=0;h=(a[h+(k*36|0)+32>>0]|0)==0;break}}else{c[u>>2]=0;c[u+4>>2]=i+-1;sy(b,330832,u);m=c[p>>2]|0;g=c[d>>2]|0;i=0;h=1}while(0);f=((f|0)==1|(h|(i|0)!=0&((n|0)!=0&(i|0)!=(n|0))))&1;o=o+1|0;h=m-g>>2}while(h>>>0>o>>>0);uy(b,f,e,d);aa=v;return f|0}function xy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;n=aa;aa=aa+32|0;m=n;k=n+20|0;l=n+8|0;h=c[d>>2]|0;f=(c[d+4>>2]|0)-h|0;j=f>>2;g=c[e>>2]|0;i=g;if((j|0)==((c[e+4>>2]|0)-g>>2|0)){if(!f){m=0;aa=n;return m|0}g=0;f=0;while(1){o=c[h+(g<<2)>>2]|0;p=c[i+(g<<2)>>2]|0;f=(f|0)==1|(o|0)!=0&((p|0)!=0&(p|0)!=(o|0));g=g+1|0;if(g>>>0>=j>>>0)break;else f=f&1}if(!f){p=0;aa=n;return p|0}}vy(k,e,0);f=k+11|0;j=(a[f>>0]|0)<0?c[k>>2]|0:k;vy(l,d,0);p=l+11|0;o=(a[p>>0]|0)<0?c[l>>2]|0:l;c[m>>2]=j;c[m+4>>2]=o;sy(b,330987,m);if((a[p>>0]|0)<0)$A(c[l>>2]|0);if((a[f>>0]|0)<0)$A(c[k>>2]|0);p=1;aa=n;return p|0}function yy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+16|0;f=n;m=wy(b,d,e)|0;l=(c[d+4>>2]|0)-(c[d>>2]|0)|0;k=l>>2;e=c[b+36>>2]|0;j=(c[b+40>>2]|0)-e|0;d=(j|0)/36|0;if(!j){c[f>>2]=0;c[f+4>>2]=d+-1;sy(b,330832,f);l=1;m=(m|0)==1;m=m|l;m=m&1;aa=n;return m|0}i=d+-1|0;h=c[e+(i*36|0)+28>>2]|0;j=b+24|0;b=b+28|0;d=c[b>>2]|0;f=c[j>>2]|0;g=d-f>>2;if((h+k|0)>>>0<=g>>>0){if(!l){l=0;m=(m|0)==1;m=m|l;m=m&1;aa=n;return m|0}c[b>>2]=d+(0-k<<2);l=0;m=(m|0)==1;m=m|l;m=m&1;aa=n;return m|0}if(h>>>0<=g>>>0){if(h>>>0<g>>>0)c[b>>2]=f+(h<<2)}else hu(j,h-g|0);l=(a[e+(i*36|0)+32>>0]|0)==0;m=(m|0)==1;m=m|l;m=m&1;aa=n;return m|0}function zy(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+16|0;g=q;p=q+8|0;o=wy(b,d,f)|0;n=(c[d+4>>2]|0)-(c[d>>2]|0)|0;m=n>>2;f=c[b+36>>2]|0;l=(c[b+40>>2]|0)-f|0;d=(l|0)/36|0;do if(!l){c[g>>2]=0;c[g+4>>2]=d+-1;sy(b,330832,g);f=1}else{k=d+-1|0;d=c[f+(k*36|0)+28>>2]|0;l=b+24|0;i=b+28|0;g=c[i>>2]|0;h=c[l>>2]|0;j=g-h>>2;if((d+m|0)>>>0<=j>>>0){if(!n){f=0;break}c[i>>2]=g+(0-m<<2);f=0;break}if(d>>>0<=j>>>0){if(d>>>0<j>>>0)c[i>>2]=h+(d<<2)}else hu(l,d-j|0);f=(a[f+(k*36|0)+32>>0]|0)==0}while(0);l=((o|0)==1|f)&1;f=c[e>>2]|0;i=c[e+4>>2]|0;if((f|0)==(i|0)){aa=q;return l|0}j=b+28|0;k=b+32|0;h=b+24|0;do{d=c[f>>2]|0;c[p>>2]=d;do if((d|0)!=-64){g=c[j>>2]|0;if((g|0)==(c[k>>2]|0)){fo(h,p);break}else{c[g>>2]=d;c[j>>2]=g+4;break}}while(0);f=f+4|0}while((f|0)!=(i|0));aa=q;return l|0}function Ay(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+32|0;o=p+8|0;g=p;j=p+16|0;k=b+36|0;n=b+40|0;f=c[k>>2]|0;l=(c[n>>2]|0)-f|0;h=(l|0)/36|0;if(l){i=h+-1|0;g=c[b+24>>2]|0;h=(c[b+28>>2]|0)-g>>2;if((c[f+(i*36|0)+28>>2]|0)>>>0<h>>>0){g=c[g+(h+-1<<2)>>2]|0;f=0}else{g=0;f=(a[f+(i*36|0)+32>>0]|0)==0}f=f|(g|0)!=0&((d|0)!=0&(g|0)!=(d|0));if(f)m=7;else l=f}else{c[g>>2]=0;c[g+4>>2]=h+-1;sy(b,330832,g);f=1;m=7}if((m|0)==7){l=_A(4)|0;c[j>>2]=l;m=l+4|0;c[j+8>>2]=m;c[l>>2]=d;c[j+4>>2]=m;uy(b,1,e,j);$A(l);l=f}f=c[k>>2]|0;n=(c[n>>2]|0)-f|0;g=(n|0)/36|0;if(!n){c[o>>2]=0;c[o+4>>2]=g+-1;sy(b,330832,o);b=1;b=l|b;b=b&1;aa=p;return b|0}j=g+-1|0;d=c[f+(j*36|0)+28>>2]|0;k=b+24|0;i=b+28|0;g=c[i>>2]|0;h=c[k>>2]|0;e=g-h>>2;if((d+1|0)>>>0<=e>>>0){c[i>>2]=g+-4;b=0;b=l|b;b=b&1;aa=p;return b|0}if(d>>>0<=e>>>0){if(d>>>0<e>>>0)c[i>>2]=h+(d<<2)}else hu(k,d-e|0);b=(a[f+(j*36|0)+32>>0]|0)==0;b=l|b;b=b&1;aa=p;return b|0}function By(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+48|0;r=s+16|0;m=s+8|0;g=s;p=s+24|0;o=b+36|0;q=b+40|0;i=c[q>>2]|0;j=c[o>>2]|0;n=i-j|0;h=(n|0)/36|0;do if(n){l=j;k=h+-1|0;g=c[b+24>>2]|0;h=(c[b+28>>2]|0)-g>>2;if((c[l+(k*36|0)+28>>2]|0)>>>0<h>>>0){h=c[g+(h+-1<<2)>>2]|0;g=0;break}else{h=0;g=(a[l+(k*36|0)+32>>0]|0)==0;break}}else{c[g>>2]=0;c[g+4>>2]=h+-1;sy(b,330832,g);i=c[q>>2]|0;j=c[o>>2]|0;h=0;g=1}while(0);k=g|(h|0)!=0&((e|0)!=0&(h|0)!=(e|0));n=i-j|0;g=(n|0)/36|0;do if(n){i=g+-1|0;g=c[b+24>>2]|0;h=(c[b+28>>2]|0)-g>>2;if(((c[j+(i*36|0)+28>>2]|0)+1|0)>>>0<h>>>0){h=c[g+(h+-2<<2)>>2]|0;g=0;break}else{h=0;g=(a[j+(i*36|0)+32>>0]|0)==0;break}}else{c[m>>2]=0;c[m+4>>2]=g+-1;sy(b,330832,m);h=0;g=1}while(0);n=k|(g|(h|0)!=0&((d|0)!=0&(h|0)!=(d|0)));if(n){m=_A(8)|0;c[p>>2]=m;l=m+8|0;c[p+8>>2]=l;c[m>>2]=d;c[m+4>>2]=e;c[p+4>>2]=l;uy(b,1,f,p);$A(m)}g=c[o>>2]|0;q=(c[q>>2]|0)-g|0;h=(q|0)/36|0;if(!q){c[r>>2]=0;c[r+4>>2]=h+-1;sy(b,330832,r);b=1;b=n|b;b=b&1;aa=s;return b|0}m=h+-1|0;l=c[g+(m*36|0)+28>>2]|0;f=b+24|0;j=b+28|0;h=c[j>>2]|0;i=c[f>>2]|0;k=h-i>>2;if((l+2|0)>>>0<=k>>>0){c[j>>2]=h+-8;b=0;b=n|b;b=b&1;aa=s;return b|0}if(l>>>0<=k>>>0){if(l>>>0<k>>>0)c[j>>2]=i+(l<<2)}else hu(f,l-k|0);b=(a[g+(m*36|0)+32>>0]|0)==0;b=n|b;b=b&1;aa=s;return b|0}function Cy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+48|0;t=u+24|0;p=u+16|0;o=u+8|0;h=u;r=u+32|0;q=b+36|0;s=b+40|0;j=c[s>>2]|0;k=c[q>>2]|0;n=j-k|0;i=(n|0)/36|0;do if(n){m=k;l=i+-1|0;h=c[b+24>>2]|0;i=(c[b+28>>2]|0)-h>>2;if((c[m+(l*36|0)+28>>2]|0)>>>0<i>>>0){i=c[h+(i+-1<<2)>>2]|0;h=0;break}else{i=0;h=(a[m+(l*36|0)+32>>0]|0)==0;break}}else{c[h>>2]=0;c[h+4>>2]=i+-1;sy(b,330832,h);j=c[s>>2]|0;k=c[q>>2]|0;i=0;h=1}while(0);n=h|(i|0)!=0&((f|0)!=0&(i|0)!=(f|0));m=j-k|0;h=(m|0)/36|0;do if(m){m=k;l=h+-1|0;h=c[b+24>>2]|0;i=(c[b+28>>2]|0)-h>>2;if(((c[m+(l*36|0)+28>>2]|0)+1|0)>>>0<i>>>0){i=c[h+(i+-2<<2)>>2]|0;h=0;break}else{i=0;h=(a[m+(l*36|0)+32>>0]|0)==0;break}}else{c[o>>2]=0;c[o+4>>2]=h+-1;sy(b,330832,o);j=c[s>>2]|0;k=c[q>>2]|0;i=0;h=1}while(0);l=n|(h|(i|0)!=0&((e|0)!=0&(i|0)!=(e|0)));o=j-k|0;h=(o|0)/36|0;do if(o){j=h+-1|0;h=c[b+24>>2]|0;i=(c[b+28>>2]|0)-h>>2;if(((c[k+(j*36|0)+28>>2]|0)+2|0)>>>0<i>>>0){i=c[h+(i+-3<<2)>>2]|0;h=0;break}else{i=0;h=(a[k+(j*36|0)+32>>0]|0)==0;break}}else{c[p>>2]=0;c[p+4>>2]=h+-1;sy(b,330832,p);i=0;h=1}while(0);if(l|(h|(i|0)!=0&((d|0)!=0&(i|0)!=(d|0)))){p=_A(12)|0;c[r>>2]=p;o=p+12|0;c[r+8>>2]=o;c[p>>2]=d;c[p+4>>2]=e;c[p+8>>2]=f;c[r+4>>2]=o;uy(b,1,g,r);$A(p)}i=c[q>>2]|0;s=(c[s>>2]|0)-i|0;h=(s|0)/36|0;if(!s){c[t>>2]=0;c[t+4>>2]=h+-1;sy(b,330832,t);aa=u;return}l=c[i+((h+-1|0)*36|0)+28>>2]|0;m=b+24|0;j=b+28|0;h=c[j>>2]|0;i=c[m>>2]|0;k=h-i>>2;if((l+3|0)>>>0<=k>>>0){c[j>>2]=h+-12;aa=u;return}if(l>>>0>k>>>0){hu(m,l-k|0);aa=u;return}if(l>>>0>=k>>>0){aa=u;return}c[j>>2]=i+(l<<2);aa=u;return}function Dy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;g=h;Am(g,b);e=c[g+8>>2]|0;Am(g,b);f=c[g+12>>2]|0;Am(g,b);f=By(a,e,f,c[g>>2]|0)|0;Am(g,b);b=c[g+4>>2]|0;c[g>>2]=b;if((b|0)==-64){aa=h;return f|0}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,g);aa=h;return f|0}else{c[d>>2]=b;c[e>>2]=d+4;aa=h;return f|0}return 0}function Ey(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;Am(f,b);h=c[f+8>>2]|0;Am(f,b);d=c[f+12>>2]|0;Am(f,b);e=c[f+16>>2]|0;Am(f,b);Cy(a,h,d,e,c[f>>2]|0);Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function Fy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+32|0;l=o+16|0;n=o+12|0;m=o;h=a+24|0;f=c[h>>2]|0;g=a+28|0;c[g>>2]=f;k=a+36|0;i=c[k>>2]|0;j=a+40|0;d=c[j>>2]|0;if((d|0)==(i|0)){e=f;d=f}else{do{e=c[d+-20>>2]|0;if(e|0){c[d+-16>>2]=e;$A(e)}e=c[d+-32>>2]|0;if(e|0){c[d+-28>>2]=e;$A(e)}d=d+-36|0}while((d|0)!=(i|0));e=c[g>>2]|0;d=c[h>>2]|0}c[j>>2]=i;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[l>>2]=0;d=e-d>>2;c[n>>2]=d;if(i>>>0<(c[a+44>>2]|0)>>>0){ry(i,0,m,b,d);c[j>>2]=(c[j>>2]|0)+36;aa=o;return}else{ty(k,l,m,b,n);aa=o;return}}function Gy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,b);e=c[f+8>>2]|0;Am(f,b);Ay(a,e,c[f>>2]|0)|0;Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function Hy(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Iy(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Jy(a,b){a=a|0;b=b|0;Ey(a,b);return}function Ky(a,b){a=a|0;b=b|0;Ey(a,b);return}function Ly(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function My(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Ny(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;j=l+4|0;g=l;yy(a,b,331050)|0;c[j>>2]=1;k=a+24|0;i=a+28|0;h=(c[i>>2]|0)-(c[k>>2]|0)>>2;c[g>>2]=h;f=a+40|0;e=c[f>>2]|0;if(e>>>0<(c[a+44>>2]|0)>>>0){ry(e,1,b,d,h);c[f>>2]=(c[f>>2]|0)+36}else ty(a+36|0,j,b,d,g);e=c[b>>2]|0;h=c[b+4>>2]|0;if((e|0)==(h|0)){aa=l;return}d=a+32|0;do{f=c[e>>2]|0;c[j>>2]=f;do if((f|0)!=-64){g=c[i>>2]|0;if((g|0)==(c[d>>2]|0)){fo(k,j);break}else{c[g>>2]=f;c[i>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(h|0));aa=l;return}function Oy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k+8|0;h=k;f=b+36|0;i=b+40|0;e=c[f>>2]|0;g=((c[i>>2]|0)-e|0)/36|0;if(g>>>0<=d>>>0){c[h>>2]=d;c[h+4>>2]=g+-1;sy(b,330832,h);aa=k;return}d=g+~d|0;wy(b,(c[e+(d*36|0)>>2]|0)==2?e+(d*36|0)+4|0:e+(d*36|0)+16|0,331056)|0;d=c[f>>2]|0;i=(c[i>>2]|0)-d|0;e=(i|0)/36|0;if(!i){c[j>>2]=0;c[j+4>>2]=e+-1;sy(b,330832,j);aa=k;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;d=b+28|0;e=c[h>>2]|0;f=(c[d>>2]|0)-e>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=k;return}if(g>>>0>=f>>>0){aa=k;return}c[d>>2]=e+(g<<2);aa=k;return}function Py(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;f=k;j=k+8|0;Ay(a,-1,331059)|0;d=c[a+36>>2]|0;e=((c[a+40>>2]|0)-d|0)/36|0;if(e>>>0<=b>>>0){c[f>>2]=b;c[f+4>>2]=e+-1;sy(a,330832,f);aa=k;return}h=d;g=e+~b|0;i=h+(g*36|0)|0;d=h+(g*36|0)+4|0;g=h+(g*36|0)+16|0;yy(a,(c[i>>2]|0)==2?d:g,331059)|0;g=(c[i>>2]|0)==2?d:g;d=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(g|0)){aa=k;return}h=a+28|0;i=a+32|0;f=a+24|0;do{b=c[d>>2]|0;c[j>>2]=b;do if((b|0)!=-64){e=c[h>>2]|0;if((e|0)==(c[i>>2]|0)){fo(f,j);break}else{c[e>>2]=b;c[h>>2]=e+4;break}}while(0);d=d+4|0}while((d|0)!=(g|0));aa=k;return}function Qy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;o=aa;aa=aa+48|0;m=o+8|0;h=o;n=o+28|0;l=o+16|0;Ay(b,-24,331065)|0;f=c[b+36>>2]|0;g=((c[b+40>>2]|0)-f|0)/36|0;if(g>>>0<=d>>>0){c[h>>2]=d;c[h+4>>2]=g+-1;sy(b,330832,h);aa=o;return}i=g+~d|0;i=(c[f+(i*36|0)>>2]|0)==2?f+(i*36|0)+4|0:f+(i*36|0)+16|0;g=c[e>>2]|0;f=(c[e+4>>2]|0)-g|0;j=f>>2;d=c[i>>2]|0;h=d;if((j|0)==((c[i+4>>2]|0)-d>>2|0)){if(f|0){d=0;f=0;while(1){p=c[g+(d<<2)>>2]|0;q=c[h+(d<<2)>>2]|0;f=(f|0)==1|(p|0)!=0&((q|0)!=0&(q|0)!=(p|0));d=d+1|0;if(d>>>0>=j>>>0)break;else f=f&1}if(f)k=8}}else k=8;if((k|0)==8){vy(n,i,0);f=n+11|0;k=(a[f>>0]|0)<0?c[n>>2]|0:n;vy(l,e,0);q=l+11|0;p=(a[q>>0]|0)<0?c[l>>2]|0:l;c[m>>2]=k;c[m+4>>2]=p;sy(b,331075,m);if((a[q>>0]|0)<0)$A(c[l>>2]|0);if((a[f>>0]|0)<0)$A(c[n>>2]|0)}c[n>>2]=-24;d=b+28|0;f=c[d>>2]|0;if((f|0)==(c[b+32>>2]|0))fo(b+24|0,n);else{c[f>>2]=-24;c[d>>2]=f+4}aa=o;return}function Ry(a){a=a|0;c[a+48>>2]=0;Ay(a,-1,331129)|0;return}function Sy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=aa;aa=aa+48|0;k=l+8|0;g=l;i=l+28|0;j=l+16|0;e=c[b+36>>2]|0;f=((c[b+40>>2]|0)-e|0)/36|0;if(f>>>0<=d>>>0){c[g>>2]=d;c[g+4>>2]=f+-1;sy(b,330832,g);aa=l;return}h=f+~d|0;h=(c[e+(h*36|0)>>2]|0)==2?e+(h*36|0)+4|0:e+(h*36|0)+16|0;wy(b,h,331129)|0;d=b+48|0;e=c[d>>2]|0;if(!e){c[d>>2]=h;e=h}n=c[e+4>>2]|0;m=c[e>>2]|0;f=c[h>>2]|0;d=m;g=n;a:do if((n-m|0)==((c[h+4>>2]|0)-f|0)){if((d|0)==(g|0)){aa=l;return}while(1){if((c[d>>2]|0)!=(c[f>>2]|0))break a;d=d+4|0;if((d|0)==(g|0))break;else f=f+4|0}aa=l;return}while(0);vy(i,e,0);e=i+11|0;g=(a[e>>0]|0)<0?c[i>>2]|0:i;vy(j,h,0);n=j+11|0;m=(a[n>>0]|0)<0?c[j>>2]|0:j;c[k>>2]=g;c[k+4>>2]=m;sy(b,331138,k);if((a[n>>0]|0)<0)$A(c[j>>2]|0);if((a[e>>0]|0)<0)$A(c[i>>2]|0);aa=l;return}function Ty(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;d=c[b+36>>2]|0;h=(c[b+40>>2]|0)-d|0;e=(h|0)/36|0;if(!h){c[f>>2]=0;c[f+4>>2]=e+-1;sy(b,330832,f);aa=i;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=i;return}if(g>>>0>=f>>>0){aa=i;return}c[e>>2]=d+(g<<2);aa=i;return}function Uy(a,b,c){a=a|0;b=b|0;c=c|0;zy(a,b,c,331199)|0;return}function Vy(a,b,c){a=a|0;b=b|0;c=c|0;Ay(a,-1,331204)|0;zy(a,b,c,331204)|0;return}function Wy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+16|0;j=k+8|0;i=k;yy(b,d,331218)|0;f=b+36|0;h=b+40|0;d=c[f>>2]|0;l=(c[h>>2]|0)-d|0;g=((l|0)/36|0)+-1|0;if(!l){c[i>>2]=g;c[i+4>>2]=g;sy(b,330832,i);aa=k;return}xy(b,e,d+16|0)|0;f=c[f>>2]|0;l=(c[h>>2]|0)-f|0;d=(l|0)/36|0;if(!l){c[j>>2]=0;c[j+4>>2]=d+-1;sy(b,330832,j);aa=k;return}h=d+-1|0;a[f+(h*36|0)+32>>0]=1;e=b+24|0;h=c[f+(h*36|0)+28>>2]|0;f=b+28|0;d=c[e>>2]|0;g=(c[f>>2]|0)-d>>2;if(h>>>0>g>>>0){hu(e,h-g|0);aa=k;return}if(h>>>0>=g>>>0){aa=k;return}c[f>>2]=d+(h<<2);aa=k;return}function Xy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+16|0;j=k+8|0;i=k;Ay(b,-1,331230)|0;yy(b,d,331230)|0;f=b+36|0;h=b+40|0;d=c[f>>2]|0;l=(c[h>>2]|0)-d|0;g=((l|0)/36|0)+-1|0;if(!l){c[i>>2]=g;c[i+4>>2]=g;sy(b,330832,i);aa=k;return}xy(b,e,d+16|0)|0;f=c[f>>2]|0;l=(c[h>>2]|0)-f|0;d=(l|0)/36|0;if(!l){c[j>>2]=0;c[j+4>>2]=d+-1;sy(b,330832,j);aa=k;return}h=d+-1|0;a[f+(h*36|0)+32>>0]=1;e=b+24|0;h=c[f+(h*36|0)+28>>2]|0;f=b+28|0;d=c[e>>2]|0;g=(c[f>>2]|0)-d>>2;if(h>>>0>g>>>0){hu(e,h-g|0);aa=k;return}if(h>>>0>=g>>>0){aa=k;return}c[f>>2]=d+(h<<2);aa=k;return}function Yy(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Zy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+32|0;i=n+8|0;e=n;m=n+16|0;g=b+36|0;h=b+40|0;d=c[g>>2]|0;l=(c[h>>2]|0)-d|0;f=(l|0)/36|0;if(!l){c[e>>2]=0;c[e+4>>2]=f+-1;sy(b,330832,e);aa=n;return}l=f+-1|0;k=d+(l*36|0)|0;yy(b,d+(l*36|0)+16|0,331251)|0;f=c[g>>2]|0;j=(c[h>>2]|0)-f|0;e=(j|0)/36|0;if(j){h=b+24|0;g=b+28|0;if(((c[g>>2]|0)-(c[h>>2]|0)>>2|0)==(c[f+((e+-1|0)*36|0)+28>>2]|0)){f=h;e=g;j=g;i=h}else{c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;uy(b,1,331251,m);f=h;e=g;j=g;i=h}}else{c[i>>2]=0;c[i+4>>2]=e+-1;sy(b,330832,i);i=b+24|0;j=b+28|0;f=i;e=j}h=c[d+(l*36|0)+28>>2]|0;e=c[e>>2]|0;f=c[f>>2]|0;g=e-f>>2;if(h>>>0<=g>>>0){if(h>>>0<g>>>0){e=f+(h<<2)|0;c[j>>2]=e}}else{hu(i,h-g|0);e=c[j>>2]|0}c[k>>2]=6;a[d+(l*36|0)+32>>0]=0;c[m>>2]=-24;if((e|0)==(c[b+32>>2]|0))fo(i,m);else{c[e>>2]=-24;c[j>>2]=e+4}aa=n;return}function _y(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function $y(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,b);e=c[f+8>>2]|0;Am(f,b);Ay(a,e,c[f>>2]|0)|0;Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function az(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+32|0;e=n;l=n+20|0;m=n+8|0;d=c[b+36>>2]|0;k=(c[b+40>>2]|0)-d|0;f=(k|0)/36|0;if(k){j=f+-1|0;e=c[d+(j*36|0)+28>>2]|0;k=b+24|0;h=b+28|0;f=c[h>>2]|0;g=c[k>>2]|0;i=f-g>>2;if((e+1|0)>>>0<=i>>>0){c[h>>2]=f+-4;aa=n;return}if(e>>>0<=i>>>0){if(e>>>0<i>>>0)c[h>>2]=g+(e<<2)}else hu(k,e-i|0);if(a[d+(j*36|0)+32>>0]|0){aa=n;return}}else{c[e>>2]=0;c[e+4>>2]=f+-1;sy(b,330832,e)}c[l>>2]=1;l=_A(4)|0;c[m>>2]=l;k=l+4|0;c[m+8>>2]=k;c[l>>2]=0;c[m+4>>2]=k;uy(b,1,331261,m);$A(l);aa=n;return}function bz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+32|0;i=p+8|0;e=p;o=p+16|0;g=b+36|0;h=b+40|0;d=c[g>>2]|0;n=(c[h>>2]|0)-d|0;f=(n|0)/36|0;if(!n){c[e>>2]=0;c[e+4>>2]=f+-1;sy(b,330832,e);o=1;aa=p;return o|0}n=f+-1|0;m=d+(n*36|0)|0;j=(c[m>>2]|0)!=3;j=j|(yy(b,d+(n*36|0)+16|0,331266)|0)==1;f=c[g>>2]|0;l=(c[h>>2]|0)-f|0;e=(l|0)/36|0;if(l){h=b+24|0;g=b+28|0;e=((c[g>>2]|0)-(c[h>>2]|0)>>2|0)!=(c[f+((e+-1|0)*36|0)+28>>2]|0);if(e){c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;uy(b,1,331266,o);f=h;i=g;l=g;k=h}else{f=h;i=g;l=g;k=h}}else{c[i>>2]=0;c[i+4>>2]=e+-1;sy(b,330832,i);k=b+24|0;l=b+28|0;f=k;i=l;e=1}j=(j|e)&1;g=c[d+(n*36|0)+28>>2]|0;f=c[f>>2]|0;e=(c[i>>2]|0)-f>>2;if(g>>>0<=e>>>0){if(g>>>0<e>>>0)c[l>>2]=f+(g<<2)}else hu(k,g-e|0);e=c[d+(n*36|0)+4>>2]|0;i=c[d+(n*36|0)+8>>2]|0;if((e|0)!=(i|0)){h=b+32|0;do{f=c[e>>2]|0;c[o>>2]=f;do if((f|0)!=-64){g=c[l>>2]|0;if((g|0)==(c[h>>2]|0)){fo(k,o);break}else{c[g>>2]=f;c[l>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(i|0))}c[m>>2]=4;a[d+(n*36|0)+32>>0]=0;o=j;aa=p;return o|0}function cz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+32|0;f=p;n=p+8|0;m=b+16|0;j=(yy(a,m,d)|0)==1;o=a+40|0;d=c[a+36>>2]|0;l=(c[o>>2]|0)-d|0;g=(l|0)/36|0;if(l){h=a+24|0;f=a+28|0;d=((c[f>>2]|0)-(c[h>>2]|0)>>2|0)!=(c[d+((g+-1|0)*36|0)+28>>2]|0);if(d){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;uy(a,1,e,n);e=h;i=f;l=f;k=h}else{e=h;i=f;l=f;k=h}}else{c[f>>2]=0;c[f+4>>2]=g+-1;sy(a,330832,f);k=a+24|0;l=a+28|0;e=k;i=l;d=1}j=(j|d)&1;g=c[b+28>>2]|0;f=c[e>>2]|0;d=(c[i>>2]|0)-f>>2;if(g>>>0<=d>>>0){if(g>>>0<d>>>0)c[l>>2]=f+(g<<2)}else hu(k,g-d|0);d=c[m>>2]|0;h=c[b+20>>2]|0;if((d|0)!=(h|0)){e=a+32|0;do{f=c[d>>2]|0;c[n>>2]=f;do if((f|0)!=-64){g=c[l>>2]|0;if((g|0)==(c[e>>2]|0)){fo(k,n);break}else{c[g>>2]=f;c[l>>2]=g+4;break}}while(0);d=d+4|0}while((d|0)!=(h|0))}f=c[o>>2]|0;d=c[f+-20>>2]|0;if(d|0){c[f+-16>>2]=d;$A(d)}d=c[f+-32>>2]|0;if(!d){n=f+-36|0;c[o>>2]=n;aa=p;return j|0}c[f+-28>>2]=d;$A(d);n=f+-36|0;c[o>>2]=n;aa=p;return j|0}function dz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=aa;aa=aa+16|0;e=f;b=c[a+36>>2]|0;g=(c[a+40>>2]|0)-b|0;d=(g|0)/36|0;if(!g){c[e>>2]=0;c[e+4>>2]=d+-1;sy(a,330832,e);aa=f;return}d=b+((d+-1|0)*36|0)|0;b=c[d>>2]|0;do if((b|0)==3)if((bz(a)|0)==1){aa=f;return}else{b=c[d>>2]|0;break}while(0);g=c[279840+(b<<2)>>2]|0;cz(a,d,g,g)|0;aa=f;return}function ez(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;j=l+4|0;g=l;Ay(a,-1,331295)|0;yy(a,b,331295)|0;c[j>>2]=3;k=a+24|0;i=a+28|0;h=(c[i>>2]|0)-(c[k>>2]|0)>>2;c[g>>2]=h;f=a+40|0;e=c[f>>2]|0;if(e>>>0<(c[a+44>>2]|0)>>>0){ry(e,3,b,d,h);c[f>>2]=(c[f>>2]|0)+36}else ty(a+36|0,j,b,d,g);e=c[b>>2]|0;h=c[b+4>>2]|0;if((e|0)==(h|0)){aa=l;return}d=a+32|0;do{f=c[e>>2]|0;c[j>>2]=f;do if((f|0)!=-64){g=c[i>>2]|0;if((g|0)==(c[d>>2]|0)){fo(k,j);break}else{c[g>>2]=f;c[i>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(h|0));aa=l;return}function fz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function gz(a,b){a=a|0;b=b|0;Ay(a,b,331328)|0;return}function hz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,b);e=c[f+8>>2]|0;Am(f,b);Ay(a,e,c[f>>2]|0)|0;Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function iz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function jz(a,b){a=a|0;b=b|0;Ay(a,b,331339)|0;return}function kz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;Ay(a,b,331349)|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function lz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;j=l+4|0;g=l;yy(a,b,331290)|0;c[j>>2]=2;k=a+24|0;i=a+28|0;h=(c[i>>2]|0)-(c[k>>2]|0)>>2;c[g>>2]=h;f=a+40|0;e=c[f>>2]|0;if(e>>>0<(c[a+44>>2]|0)>>>0){ry(e,2,b,d,h);c[f>>2]=(c[f>>2]|0)+36}else ty(a+36|0,j,b,d,g);e=c[b>>2]|0;h=c[b+4>>2]|0;if((e|0)==(h|0)){aa=l;return}d=a+32|0;do{f=c[e>>2]|0;c[j>>2]=f;do if((f|0)!=-64){g=c[i>>2]|0;if((g|0)==(c[d>>2]|0)){fo(k,j);break}else{c[g>>2]=f;c[i>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(h|0));aa=l;return}function mz(a){a=a|0;Ey(a,199);return}function nz(a){a=a|0;Ey(a,200);return}function oz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,51);b=c[f+8>>2]|0;Am(f,51);Ay(a,b,c[f>>2]|0)|0;Am(f,51);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function pz(a){a=a|0;Ey(a,197);return}function qz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;c[e>>2]=-1;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-1;c[d>>2]=b+4;aa=f;return}}function rz(a){a=a|0;Ey(a,203);return}function sz(a){a=a|0;Ey(a,201);return}function tz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;Ay(a,-1,331359)|0;c[e>>2]=-17;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-17;c[d>>2]=b+4;aa=f;return}}function uz(a){a=a|0;By(a,-1,-17,331369)|0;return}function vz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;By(a,-17,-1,331379)|0;c[e>>2]=-1;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-1;c[d>>2]=b+4;aa=f;return}}function wz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;c[e>>2]=-1;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-1;c[d>>2]=b+4;aa=f;return}}function xz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;c[e>>2]=-17;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-17;c[d>>2]=b+4;aa=f;return}}function yz(a){a=a|0;var b=0,d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;Ay(a,-17,331390)|0;c[e>>2]=-1;d=a+28|0;b=c[d>>2]|0;if((b|0)==(c[a+32>>2]|0)){fo(a+24|0,e);aa=f;return}else{c[b>>2]=-1;c[d>>2]=b+4;aa=f;return}}function zz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;Ay(b,-24,331402)|0;d=c[b+36>>2]|0;h=(c[b+40>>2]|0)-d|0;e=(h|0)/36|0;if(!h){c[f>>2]=0;c[f+4>>2]=e+-1;sy(b,330832,f);aa=i;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=i;return}if(g>>>0>=f>>>0){aa=i;return}c[e>>2]=d+(g<<2);aa=i;return}function Az(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;yy(b,d,331410)|0;d=c[b+36>>2]|0;h=(c[b+40>>2]|0)-d|0;e=(h|0)/36|0;if(!h){c[f>>2]=0;c[f+4>>2]=e+-1;sy(b,330832,f);aa=i;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=i;return}if(g>>>0>=f>>>0){aa=i;return}c[e>>2]=d+(g<<2);aa=i;return}function Bz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+16|0;i=j+8|0;g=j;e=b+36|0;h=b+40|0;d=c[e>>2]|0;k=(c[h>>2]|0)-d|0;f=((k|0)/36|0)+-1|0;if(!k){c[g>>2]=f;c[g+4>>2]=f;sy(b,330832,g);aa=j;return}yy(b,d+16|0,331416)|0;e=c[e>>2]|0;k=(c[h>>2]|0)-e|0;d=(k|0)/36|0;if(!k){c[i>>2]=0;c[i+4>>2]=d+-1;sy(b,330832,i);aa=j;return}g=d+-1|0;a[e+(g*36|0)+32>>0]=1;h=b+24|0;g=c[e+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=j;return}if(g>>>0>=f>>>0){aa=j;return}c[e>>2]=d+(g<<2);aa=j;return}function Cz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+48|0;o=q+24|0;l=q+16|0;k=q+8|0;d=q;p=q+32|0;m=b+36|0;n=b+40|0;f=c[n>>2]|0;g=c[m>>2]|0;j=f-g|0;e=(j|0)/36|0;do if(j){i=g;h=e+-1|0;d=c[b+24>>2]|0;e=(c[b+28>>2]|0)-d>>2;if((c[i+(h*36|0)+28>>2]|0)>>>0<e>>>0){e=((c[d+(e+-1<<2)>>2]|0)+1|0)>>>0>1;d=0;break}else{e=0;d=(a[i+(h*36|0)+32>>0]|0)==0;break}}else{c[d>>2]=0;c[d+4>>2]=e+-1;sy(b,330832,d);f=c[n>>2]|0;g=c[m>>2]|0;e=0;d=1}while(0);j=e|d;i=f-g|0;d=(i|0)/36|0;do if(i){e=g;d=d+-1|0;h=c[b+24>>2]|0;i=(c[b+28>>2]|0)-h>>2;if(((c[e+(d*36|0)+28>>2]|0)+1|0)>>>0<i>>>0){d=0;k=c[h+(i+-2<<2)>>2]|0;break}else{d=(a[e+(d*36|0)+32>>0]|0)==0;k=0;break}}else{c[k>>2]=0;c[k+4>>2]=d+-1;sy(b,330832,k);f=c[n>>2]|0;g=c[m>>2]|0;d=1;k=0}while(0);h=j|d;j=f-g|0;d=(j|0)/36|0;do if(j){f=d+-1|0;d=c[b+24>>2]|0;e=(c[b+28>>2]|0)-d>>2;if(((c[g+(f*36|0)+28>>2]|0)+2|0)>>>0<e>>>0){e=c[d+(e+-3<<2)>>2]|0;d=0;break}else{e=0;d=(a[g+(f*36|0)+32>>0]|0)==0;break}}else{c[l>>2]=0;c[l+4>>2]=d+-1;sy(b,330832,l);e=0;d=1}while(0);if(h|(d|(e|0)!=0&((k|0)!=0&(e|0)!=(k|0)))){l=_A(12)|0;c[p>>2]=l;j=l+12|0;c[p+8>>2]=j;c[l>>2]=-1;c[l+4>>2]=k;c[l+8>>2]=k;c[p+4>>2]=j;uy(b,1,331423,p);$A(l)}e=c[m>>2]|0;n=(c[n>>2]|0)-e|0;d=(n|0)/36|0;do if(n){d=c[e+((d+-1|0)*36|0)+28>>2]|0;i=b+24|0;g=b+28|0;e=c[g>>2]|0;f=c[i>>2]|0;h=e-f>>2;if((d+3|0)>>>0<=h>>>0){c[g>>2]=e+-12;break}if(d>>>0>h>>>0){hu(i,d-h|0);break}if(d>>>0<h>>>0)c[g>>2]=f+(d<<2)}else{c[o>>2]=0;c[o+4>>2]=d+-1;sy(b,330832,o)}while(0);c[p>>2]=k;if((k|0)==-64){aa=q;return}e=b+28|0;d=c[e>>2]|0;if((d|0)==(c[b+32>>2]|0)){fo(b+24|0,p);aa=q;return}else{c[d>>2]=k;c[e>>2]=d+4;aa=q;return}}function Dz(a,b){a=a|0;b=b|0;Dy(a,b)|0;return}function Ez(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;j=l+4|0;g=l;yy(a,b,331314)|0;c[j>>2]=5;k=a+24|0;i=a+28|0;h=(c[i>>2]|0)-(c[k>>2]|0)>>2;c[g>>2]=h;f=a+40|0;e=c[f>>2]|0;if(e>>>0<(c[a+44>>2]|0)>>>0){ry(e,5,b,d,h);c[f>>2]=(c[f>>2]|0)+36}else ty(a+36|0,j,b,d,g);e=c[b>>2]|0;h=c[b+4>>2]|0;if((e|0)==(h|0)){aa=l;return}d=a+32|0;do{f=c[e>>2]|0;c[j>>2]=f;do if((f|0)!=-64){g=c[i>>2]|0;if((g|0)==(c[d>>2]|0)){fo(k,j);break}else{c[g>>2]=f;c[i>>2]=g+4;break}}while(0);e=e+4|0}while((e|0)!=(h|0));aa=l;return}function Fz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;f=g;Am(f,b);e=c[f+8>>2]|0;Am(f,b);Ay(a,e,c[f>>2]|0)|0;Am(f,b);b=c[f+4>>2]|0;c[f>>2]=b;if((b|0)==-64){aa=g;return}e=a+28|0;d=c[e>>2]|0;if((d|0)==(c[a+32>>2]|0)){fo(a+24|0,f);aa=g;return}else{c[d>>2]=b;c[e>>2]=d+4;aa=g;return}}function Gz(a,b){a=a|0;b=b|0;Ey(a,b);return}function Hz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+64|0;g=i;h=i+16|0;f=Em(b)|0;if(!(0>e>>>0|0==(e|0)&f>>>0>d>>>0)){c[g>>2]=f;f=g+8|0;c[f>>2]=d;c[f+4>>2]=e;sy(a,331430,g)}switch(b|0){case 232:case 226:case 229:case 223:case 220:case 219:case 216:case 215:{Am(h,b);d=c[h+8>>2]|0;Am(h,b);Ay(a,d,c[h>>2]|0)|0;Am(h,b);d=c[h+4>>2]|0;c[h>>2]=d;do if((d|0)!=-64){f=a+28|0;e=c[f>>2]|0;if((e|0)==(c[a+32>>2]|0)){fo(a+24|0,h);break}else{c[e>>2]=d;c[f>>2]=e+4;break}}while(0);aa=i;return}case 233:case 227:case 230:case 224:case 221:case 217:{Dy(a,b)|0;aa=i;return}default:U()}}function Iz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;K=aa;aa=aa+128|0;I=K+120|0;H=K+112|0;F=K+104|0;E=K+96|0;D=K+88|0;C=K+80|0;B=K+72|0;A=K+64|0;z=K+56|0;y=K+48|0;x=K+40|0;w=K+32|0;J=K+24|0;G=K+16|0;v=K+8|0;u=K;f=a[e>>0]|0;o=a[e+1>>0]|0;p=a[e+2>>0]|0;q=a[e+3>>0]|0;r=a[e+4>>0]|0;s=a[e+5>>0]|0;t=a[e+6>>0]|0;g=a[e+7>>0]|0;h=a[e+8>>0]|0;i=a[e+9>>0]|0;j=a[e+10>>0]|0;k=a[e+11>>0]|0;l=a[e+12>>0]|0;m=a[e+13>>0]|0;n=a[e+14>>0]|0;e=a[e+15>>0]|0;if((f&255)>31){c[u>>2]=f&255;sy(b,331473,u)}if((o&255)>31){c[v>>2]=o&255;sy(b,331473,v)}if((p&255)>31){c[G>>2]=p&255;sy(b,331473,G)}if((q&255)>31){c[J>>2]=q&255;sy(b,331473,J)}if((r&255)>31){c[w>>2]=r&255;sy(b,331473,w)}if((s&255)>31){c[x>>2]=s&255;sy(b,331473,x)}if((t&255)>31){c[y>>2]=t&255;sy(b,331473,y)}if((g&255)>31){c[z>>2]=g&255;sy(b,331473,z)}if((h&255)>31){c[A>>2]=h&255;sy(b,331473,A)}if((i&255)>31){c[B>>2]=i&255;sy(b,331473,B)}if((j&255)>31){c[C>>2]=j&255;sy(b,331473,C)}if((k&255)>31){c[D>>2]=k&255;sy(b,331473,D)}if((l&255)>31){c[E>>2]=l&255;sy(b,331473,E)}if((m&255)>31){c[F>>2]=m&255;sy(b,331473,F)}if((n&255)>31){c[H>>2]=n&255;sy(b,331473,H)}if((e&255)<=31){Dy(b,d)|0;aa=K;return}c[I>>2]=e&255;sy(b,331473,I);Dy(b,d)|0;aa=K;return}function Jz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;d=c[b+36>>2]|0;h=(c[b+40>>2]|0)-d|0;e=(h|0)/36|0;if(!h){c[f>>2]=0;c[f+4>>2]=e+-1;sy(b,330832,f);aa=i;return}g=e+-1|0;a[d+(g*36|0)+32>>0]=1;h=b+24|0;g=c[d+(g*36|0)+28>>2]|0;e=b+28|0;d=c[h>>2]|0;f=(c[e>>2]|0)-d>>2;if(g>>>0>f>>>0){hu(h,g-f|0);aa=i;return}if(g>>>0>=f>>>0){aa=i;return}c[e>>2]=d+(g<<2);aa=i;return}function Kz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;f=aa;aa=aa+16|0;e=f;b=c[a+36>>2]|0;g=(c[a+40>>2]|0)-b|0;d=(g|0)/36|0;if(!g){c[e>>2]=0;c[e+4>>2]=d+-1;sy(a,330832,e);aa=f;return}else{cz(a,b+((d+-1|0)*36|0)|0,331514,331281)|0;aa=f;return}}function Lz(b,d){b=b|0;d=d|0;var e=0,f=0;f=b+d|0;if((d|0)<=0){f=1;return f|0}a:while(1){e=a[b>>0]|0;d=c[279872+((e&255)<<2)>>2]|0;if((b+d|0)>>>0>f>>>0){b=0;d=14;break}switch(d|0){case 0:{b=0;d=14;break a}case 1:{b=b+1|0;break}case 2:{if((a[b+1>>0]&-64)<<24>>24==-128)b=b+2|0;else{b=0;d=14;break a}break}case 3:{d=a[b+1>>0]|0;if(!((d&-64)<<24>>24==-128?(a[b+2>>0]&-64)<<24>>24==-128:0)){b=0;d=14;break a}if(e<<24>>24==-32&(d&255)<160){b=0;d=14;break a}if(e<<24>>24==-19&(d&255)>159){b=0;d=14;break a}else b=b+3|0;break}case 4:{d=a[b+1>>0]|0;if(!(((d&-64)<<24>>24==-128?(a[b+2>>0]&-64)<<24>>24==-128:0)&(a[b+3>>0]&-64)<<24>>24==-128)){b=0;d=14;break a}if(e<<24>>24==-16&(d&255)<144){b=0;d=14;break a}if(e<<24>>24==-12&(d&255)>143){b=0;d=14;break a}else b=b+4|0;break}default:{}}if(b>>>0>=f>>>0){b=1;d=14;break}}if((d|0)==14)return b|0;return 0}function Mz(a){a=a|0;var b=0,d=0;b=aa;aa=aa+16|0;d=b;a=Qz(c[a+60>>2]|0)|0;c[d>>2]=a;a=Oz(T(6,d|0)|0)|0;aa=b;return a|0}function Nz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=aa;aa=aa+32|0;g=f;e=f+20|0;c[g>>2]=c[a+60>>2];c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;if((Oz(Q(140,g|0)|0)|0)<0){c[e>>2]=-1;a=-1}else a=c[e>>2]|0;aa=f;return a|0}function Oz(a){a=a|0;if(a>>>0>4294963200){c[88534]=0-a;a=-1}return a|0}function Pz(){return 354136}function Qz(a){a=a|0;return a|0}function Rz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+48|0;i=m+32|0;f=m+16|0;e=m;j=a+28|0;g=c[j>>2]|0;c[e>>2]=g;k=a+20|0;g=(c[k>>2]|0)-g|0;c[e+4>>2]=g;c[e+8>>2]=b;c[e+12>>2]=d;g=g+d|0;h=a+60|0;c[f>>2]=c[h>>2];c[f+4>>2]=e;c[f+8>>2]=2;b=Oz(R(146,f|0)|0)|0;a:do if((g|0)!=(b|0)){f=2;while(1){if((b|0)<0)break;g=g-b|0;o=c[e+4>>2]|0;n=b>>>0>o>>>0;e=n?e+8|0:e;f=f+(n<<31>>31)|0;o=b-(n?o:0)|0;c[e>>2]=(c[e>>2]|0)+o;n=e+4|0;c[n>>2]=(c[n>>2]|0)-o;c[i>>2]=c[h>>2];c[i+4>>2]=e;c[i+8>>2]=f;b=Oz(R(146,i|0)|0)|0;if((g|0)==(b|0)){l=3;break a}}c[a+16>>2]=0;c[j>>2]=0;c[k>>2]=0;c[a>>2]=c[a>>2]|32;if((f|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}else l=3;while(0);if((l|0)==3){o=c[a+44>>2]|0;c[a+16>>2]=o+(c[a+48>>2]|0);c[j>>2]=o;c[k>>2]=o}aa=m;return d|0}function Sz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=aa;aa=aa+16|0;g=f;c[g>>2]=e;e=Vz(a,b,d,g)|0;aa=f;return e|0}function Tz(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;a:do if(!d)b=0;else{while(1){e=a[b>>0]|0;f=a[c>>0]|0;if(e<<24>>24!=f<<24>>24)break;d=d+-1|0;if(!d){b=0;break a}else{b=b+1|0;c=c+1|0}}b=(e&255)-(f&255)|0}while(0);return b|0}function Uz(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3)){d=b;e=5}else{d=f;while(1){if(!(a[b>>0]|0))break a;b=b+1|0;d=b;if(!(d&3)){d=b;e=5;break}}}while(0);if((e|0)==5){while(1){b=c[d>>2]|0;if(!((b&-2139062144^-2139062144)&b+-16843009))d=d+4|0;else break}if((b&255)<<24>>24)do d=d+1|0;while((a[d>>0]|0)!=0)}return d-f|0}function Vz(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+128|0;g=m+124|0;l=m;h=l;i=291860;j=h+124|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((d+-1|0)>>>0>2147483646)if(!d){d=1;k=4}else{c[88534]=75;g=-1}else{g=b;k=4}if((k|0)==4){k=-2-g|0;k=d>>>0>k>>>0?k:d;c[l+48>>2]=k;h=l+20|0;c[h>>2]=g;c[l+44>>2]=g;g=g+k|0;d=l+16|0;c[d>>2]=g;c[l+28>>2]=g;g=Wz(l,e,f)|0;if(k){e=c[h>>2]|0;a[e+(((e|0)==(c[d>>2]|0))<<31>>31)>>0]=0}}aa=m;return g|0}function Wz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+224|0;m=q+208|0;p=q+160|0;o=q+80|0;n=q;f=p;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[m>>2]=c[e>>2];if((Xz(0,d,m,o,p)|0)<0)e=-1;else{e=c[b>>2]|0;l=e&32;if((a[b+74>>0]|0)<1)c[b>>2]=e&-33;h=b+48|0;if(!(c[h>>2]|0)){g=b+44|0;f=c[g>>2]|0;c[g>>2]=n;i=b+28|0;c[i>>2]=n;k=b+20|0;c[k>>2]=n;c[h>>2]=80;j=b+16|0;c[j>>2]=n+80;e=Xz(b,d,m,o,p)|0;if(f){ga[c[b+36>>2]&127](b,0,0)|0;e=(c[k>>2]|0)==0?-1:e;c[g>>2]=f;c[h>>2]=0;c[j>>2]=0;c[i>>2]=0;c[k>>2]=0}}else e=Xz(b,d,m,o,p)|0;p=c[b>>2]|0;c[b>>2]=p|l;e=(p&32|0)==0?e:-1}aa=q;return e|0}function Xz(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0;F=aa;aa=aa+64|0;D=F+56|0;B=F+40|0;w=F;E=F+48|0;C=F+60|0;c[D>>2]=e;A=(d|0)!=0;v=w+40|0;y=v;w=w+39|0;x=E+4|0;e=0;j=0;m=0;a:while(1){do{do if((e|0)>-1)if((j|0)>(2147483647-e|0)){c[88534]=75;e=-1;break}else{e=j+e|0;break}while(0);p=c[D>>2]|0;j=a[p>>0]|0;if(!(j<<24>>24)){u=93;break a}k=p;b:while(1){switch(j<<24>>24){case 37:{u=10;break b}case 0:{j=k;break b}default:{}}t=k+1|0;c[D>>2]=t;j=a[t>>0]|0;k=t}c:do if((u|0)==10){u=0;l=k;j=k;do{if((a[l+1>>0]|0)!=37)break c;j=j+1|0;l=l+2|0;c[D>>2]=l}while((a[l>>0]|0)==37)}while(0);j=j-p|0;if(A)Yz(d,p,j)}while((j|0)!=0);l=c[D>>2]|0;j=a[l+1>>0]|0;if(!(Zz(j)|0)){k=1;r=-1;o=m}else{o=(a[l+2>>0]|0)==36;k=o?3:1;r=o?j+-48|0:-1;o=o?1:m}k=l+k|0;c[D>>2]=k;j=a[k>>0]|0;l=(j<<24>>24)+-32|0;if(l>>>0>31|(1<<l&75913|0)==0)n=0;else{j=0;while(1){m=1<<l|j;k=k+1|0;c[D>>2]=k;j=a[k>>0]|0;l=(j<<24>>24)+-32|0;if(l>>>0>31|(1<<l&75913|0)==0){n=m;break}else j=m}}if(j<<24>>24==42){l=k+1|0;j=a[l>>0]|0;if((Zz(j)|0)!=0?(a[k+2>>0]|0)==36:0){c[i+(j+-48<<2)>>2]=10;m=1;j=k+3|0;k=c[h+((a[l>>0]|0)+-48<<3)>>2]|0}else{if(o|0){e=-1;break}if(A){m=(c[f>>2]|0)+(4-1)&~(4-1);k=c[m>>2]|0;c[f>>2]=m+4;m=0;j=l}else{m=0;j=l;k=0}}c[D>>2]=j;s=(k|0)<0;l=j;q=s?n|8192:n;t=m;s=s?0-k|0:k}else{j=_z(D)|0;if((j|0)<0){e=-1;break}l=c[D>>2]|0;q=n;t=o;s=j}do if((a[l>>0]|0)==46){j=l+1|0;if((a[j>>0]|0)!=42){c[D>>2]=j;n=_z(D)|0;j=c[D>>2]|0;break}j=l+2|0;k=a[j>>0]|0;if(Zz(k)|0?(a[l+3>>0]|0)==36:0){c[i+(k+-48<<2)>>2]=10;n=c[h+((a[j>>0]|0)+-48<<3)>>2]|0;j=l+4|0;c[D>>2]=j;break}if(t|0){e=-1;break a}if(A){o=(c[f>>2]|0)+(4-1)&~(4-1);k=c[o>>2]|0;c[f>>2]=o+4}else k=0;c[D>>2]=j;n=k}else{j=l;n=-1}while(0);o=0;while(1){if(((a[j>>0]|0)+-65|0)>>>0>57){e=-1;break a}k=j+1|0;c[D>>2]=k;l=a[(a[j>>0]|0)+-65+(280896+(o*58|0))>>0]|0;m=l&255;if((m+-1|0)>>>0<8){j=k;o=m}else break}if(!(l<<24>>24)){e=-1;break}k=(r|0)>-1;do if(l<<24>>24==19)if(k){e=-1;break a}else u=52;else{if(k){c[i+(r<<2)>>2]=m;m=h+(r<<3)|0;r=c[m+4>>2]|0;u=B;c[u>>2]=c[m>>2];c[u+4>>2]=r;u=52;break}if(!A){e=0;break a}$z(B,m,f);u=53}while(0);if((u|0)==52){u=0;if(A)u=53;else j=0}d:do if((u|0)==53){u=0;l=a[j>>0]|0;l=(o|0)!=0&(l&15|0)==3?l&-33:l;k=q&-65537;r=(q&8192|0)==0?q:k;e:do switch(l|0){case 110:switch((o&255)<<24>>24){case 0:{c[c[B>>2]>>2]=e;j=0;break d}case 1:{c[c[B>>2]>>2]=e;j=0;break d}case 2:{j=c[B>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;break d}case 3:{b[c[B>>2]>>1]=e;j=0;break d}case 4:{a[c[B>>2]>>0]=e;j=0;break d}case 6:{c[c[B>>2]>>2]=e;j=0;break d}case 7:{j=c[B>>2]|0;c[j>>2]=e;c[j+4>>2]=((e|0)<0)<<31>>31;j=0;break d}default:{j=0;break d}}case 112:{j=r|8;k=n>>>0>8?n:8;m=120;u=65;break}case 88:case 120:{j=r;k=n;m=l;u=65;break}case 111:{q=B;p=c[q>>2]|0;q=c[q+4>>2]|0;o=bA(p,q,v)|0;k=y-o|0;j=r;k=(r&8|0)==0|(n|0)>(k|0)?n:k+1|0;l=0;n=331530;u=71;break}case 105:case 100:{k=B;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)<0){j=jC(0,0,j|0,k|0)|0;k=z()|0;l=B;c[l>>2]=j;c[l+4>>2]=k;l=1;m=331530;u=70;break e}else{l=(r&2049|0)!=0&1;m=(r&2048|0)==0?((r&1|0)==0?331530:331532):331531;u=70;break e}}case 117:{k=B;j=c[k>>2]|0;k=c[k+4>>2]|0;l=0;m=331530;u=70;break}case 99:{a[w>>0]=c[B>>2];p=w;o=k;m=1;l=0;k=331530;j=y;break}case 109:{j=dA(c[88534]|0)|0;u=75;break}case 115:{j=c[B>>2]|0;j=(j|0)==0?331540:j;u=75;break}case 67:{c[E>>2]=c[B>>2];c[x>>2]=0;c[B>>2]=E;l=E;n=-1;u=80;break}case 83:if(!n){fA(d,32,s,0,r);j=0;u=90;break e}else{l=c[B>>2]|0;u=80;break e}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=hA(d,+g[B>>3],s,n,r,l)|0;break d}default:{o=r;m=n;l=0;k=331530;j=y}}while(0);f:do if((u|0)==65){q=B;p=c[q>>2]|0;q=c[q+4>>2]|0;o=aA(p,q,v,m&32)|0;n=(j&8|0)==0|(p|0)==0&(q|0)==0;l=n?0:2;n=n?331530:331530+(m>>>4)|0;u=71}else if((u|0)==70){p=j;q=k;o=cA(j,k,v)|0;j=r;k=n;n=m;u=71}else if((u|0)==75){u=0;r=eA(j,n)|0;q=(r|0)==0;p=j;o=k;m=q?n:r-j|0;l=0;k=331530;j=q?j+n|0:r}else if((u|0)==80){u=0;j=0;o=l;while(1){k=c[o>>2]|0;if(!k)break;k=gA(C,k)|0;m=(k|0)<0;if(m|k>>>0>(n-j|0)>>>0){u=84;break}j=k+j|0;if(n>>>0>j>>>0)o=o+4|0;else break}if((u|0)==84){u=0;if(m){e=-1;break a}}fA(d,32,s,j,r);if(!j){j=0;u=90}else{m=0;while(1){k=c[l>>2]|0;if(!k){u=90;break f}k=gA(C,k)|0;m=k+m|0;if((m|0)>(j|0)){u=90;break f}Yz(d,C,k);if(m>>>0>=j>>>0){u=90;break}else l=l+4|0}}}while(0);if((u|0)==71){u=0;m=(p|0)!=0|(q|0)!=0;r=(k|0)!=0|m;m=y-o+((m^1)&1)|0;p=r?o:v;o=(k|0)>-1?j&-65537:j;m=r?((k|0)>(m|0)?k:m):0;k=n;j=y}else if((u|0)==90){u=0;fA(d,32,s,j,r^8192);j=(s|0)>(j|0)?s:j;break}q=j-p|0;n=(m|0)<(q|0)?q:m;r=n+l|0;j=(s|0)<(r|0)?r:s;fA(d,32,j,r,o);Yz(d,k,l);fA(d,48,j,r,o^65536);fA(d,48,n,q,0);Yz(d,p,q);fA(d,32,j,r,o^8192)}while(0);m=t}g:do if((u|0)==93)if(!d)if(!m)e=0;else{e=1;while(1){j=c[i+(e<<2)>>2]|0;if(!j)break;$z(h+(e<<3)|0,j,f);e=e+1|0;if(e>>>0>=10){e=1;break g}}j=0;while(1){e=e+1|0;if(j|0){e=-1;break g}if(e>>>0>=10){e=1;break g}j=c[i+(e<<2)>>2]|0}}while(0);aa=F;return e|0}function Yz(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))sA(b,d,a);return}function Zz(a){a=a|0;return (a+-48|0)>>>0<10|0}function _z(b){b=b|0;var d=0,e=0,f=0;e=c[b>>2]|0;d=a[e>>0]|0;if(!(Zz(d<<24>>24)|0))d=0;else{f=d;d=0;do{d=(d*10|0)+-48+(f<<24>>24)|0;e=e+1|0;c[b>>2]=e;f=a[e>>0]|0}while((Zz(f<<24>>24)|0)!=0)}return d|0}function $z(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;e=a;c[e>>2]=b;c[e+4>>2]=0;break a}case 12:{e=(c[d>>2]|0)+(8-1)&~(8-1);b=e;f=c[b>>2]|0;b=c[b+4>>2]|0;c[d>>2]=e+8;e=a;c[e>>2]=f;c[e+4>>2]=b;break a}case 13:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&65535)<<16>>16;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 14:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&65535;c[f+4>>2]=0;break a}case 15:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;e=(e&255)<<24>>24;f=a;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;break a}case 16:{f=(c[d>>2]|0)+(4-1)&~(4-1);e=c[f>>2]|0;c[d>>2]=f+4;f=a;c[f>>2]=e&255;c[f+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);h=+g[f>>3];c[d>>2]=f+8;g[a>>3]=h;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);h=+g[f>>3];c[d>>2]=f+8;g[a>>3]=h;break a}default:break a}while(0);while(0);return}function aA(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[281360+(b&15)>>0]|0|f;b=oC(b|0,c|0,4)|0;c=z()|0}while(!((b|0)==0&(c|0)==0));return e|0}function bA(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=oC(b|0,c|0,3)|0;c=z()|0}while(!((b|0)==0&(c|0)==0));return d|0}function cA(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)do{e=b;b=mC(b|0,c|0,10,0)|0;f=c;c=z()|0;g=hC(b|0,c|0,-10,-1)|0;g=iC(e|0,f|0,g|0,z()|0)|0;z()|0;d=d+-1|0;a[d>>0]=g&255|48}while(f>>>0>9|(f|0)==9&e>>>0>4294967295);if(b)do{g=b;b=(b>>>0)/10|0;f=(g+(v(b,-10)|0)|48)&255;d=d+-1|0;a[d>>0]=f}while(g>>>0>=10);return d|0}function dA(a){a=a|0;return mA(a,354180)|0}function eA(b,d){b=b|0;d=d|0;var e=0,f=0;e=(d|0)!=0;a:do if(e&(b&3|0)!=0)while(1){if(!(a[b>>0]|0))break a;b=b+1|0;d=d+-1|0;e=(d|0)!=0;if(!(e&(b&3|0)!=0)){f=5;break}}else f=5;while(0);b:do if((f|0)==5){do if(e){if(!(a[b>>0]|0))if(!d)break;else break b;c:do if(d>>>0>3)while(1){e=c[b>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break c;b=b+4|0;d=d+-4|0;if(d>>>0<=3){f=11;break}}else f=11;while(0);if((f|0)==11)if(!d)break;while(1){if(!(a[b>>0]|0))break b;d=d+-1|0;if(!d)break;else b=b+1|0}}while(0);b=0}while(0);return b|0}function fA(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=aa;aa=aa+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;uC(f|0,b<<24>>24|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){d=e;do{Yz(a,f,256);d=d+-256|0}while(d>>>0>255);e=e&255}Yz(a,f,e)}aa=g;return}function gA(a,b){a=a|0;b=b|0;if(!a)a=0;else a=lA(a,b)|0;return a|0}function hA(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;H=aa;aa=aa+560|0;m=H+32|0;t=H+536|0;G=H;F=G;l=H+540|0;c[t>>2]=0;E=l+12|0;iA(e)|0;j=z()|0;if((j|0)<0){e=-e;iA(e)|0;j=z()|0;D=1;B=331547}else{D=(h&2049|0)!=0&1;B=(h&2048|0)==0?((h&1|0)==0?331548:331553):331550}do if(0==0&(j&2146435072|0)==2146435072){G=(i&32|0)!=0;j=D+3|0;fA(b,32,f,j,h&-65537);Yz(b,B,D);Yz(b,e!=e|0.0!=0.0?(G?331589:331574):G?331566:331570,3);fA(b,32,f,j,h^8192)}else{q=+jA(e,t)*2.0;j=q!=0.0;if(j)c[t>>2]=(c[t>>2]|0)+-1;w=i|32;if((w|0)==97){o=i&32;r=(o|0)==0?B:B+9|0;p=D|2;j=12-g|0;do if(!(g>>>0>11|(j|0)==0)){e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[r>>0]|0)==45){e=-(e+(-q-e));break}else{e=q+e-e;break}}else e=q;while(0);k=c[t>>2]|0;j=(k|0)<0?0-k|0:k;j=cA(j,((j|0)<0)<<31>>31,E)|0;if((j|0)==(E|0)){j=l+11|0;a[j>>0]=48}a[j+-1>>0]=(k>>31&2)+43;n=j+-2|0;a[n>>0]=i+15;k=(g|0)<1;l=(h&8|0)==0;j=G;while(1){D=~~e;m=j+1|0;a[j>>0]=o|d[281360+D>>0];e=(e-+(D|0))*16.0;if((m-F|0)==1?!(l&(k&e==0.0)):0){a[m>>0]=46;m=j+2|0}if(!(e!=0.0))break;else j=m}if((g|0)!=0?(-2-F+m|0)<(g|0):0){k=E;l=n;j=g+2+k-l|0}else{k=E;l=n;j=k-F-l+m|0}E=j+p|0;fA(b,32,f,E,h);Yz(b,r,p);fA(b,48,f,E,h^65536);F=m-F|0;Yz(b,G,F);G=k-l|0;fA(b,48,j-(F+G)|0,0,0);Yz(b,n,G);fA(b,32,f,E,h^8192);j=E;break}k=(g|0)<0?6:g;if(j){l=(c[t>>2]|0)+-28|0;c[t>>2]=l;e=q*268435456.0}else{l=c[t>>2]|0;e=q}C=(l|0)<0?m:m+288|0;m=C;do{y=~~e>>>0;c[m>>2]=y;m=m+4|0;e=(e-+(y>>>0))*1.0e9}while(e!=0.0);y=C;if((l|0)>0){j=C;do{o=(l|0)<29?l:29;l=m+-4|0;if(l>>>0>=j>>>0){n=0;do{s=pC(c[l>>2]|0,0,o|0)|0;s=iC(s|0,z()|0,n|0,0)|0;u=z()|0;n=mC(s|0,u|0,1e9,0)|0;x=hC(n|0,z()|0,-1e9,-1)|0;x=iC(s|0,u|0,x|0,z()|0)|0;z()|0;c[l>>2]=x;l=l+-4|0}while(l>>>0>=j>>>0);if(n){j=j+-4|0;c[j>>2]=n}}a:do if(m>>>0>j>>>0)while(1){l=m+-4|0;if(c[l>>2]|0)break a;if(l>>>0>j>>>0)m=l;else{m=l;break}}while(0);l=(c[t>>2]|0)-o|0;c[t>>2]=l}while((l|0)>0)}else j=C;if((l|0)<0){g=((k+25|0)/9|0)+1|0;s=(w|0)==102;do{r=0-l|0;r=(r|0)<9?r:9;if(j>>>0<m>>>0){o=(1<<r)+-1|0;n=1e9>>>r;p=0;l=j;do{x=c[l>>2]|0;c[l>>2]=(x>>>r)+p;p=v(x&o,n)|0;l=l+4|0}while(l>>>0<m>>>0);j=(c[j>>2]|0)==0?j+4|0:j;if(p){c[m>>2]=p;m=m+4|0}}else j=(c[j>>2]|0)==0?j+4|0:j;l=s?C:j;m=(m-l>>2|0)>(g|0)?l+(g<<2)|0:m;l=(c[t>>2]|0)+r|0;c[t>>2]=l}while((l|0)<0);s=m}else s=m;if(j>>>0<s>>>0){l=(y-j>>2)*9|0;n=c[j>>2]|0;if(n>>>0>=10){m=10;do{m=m*10|0;l=l+1|0}while(n>>>0>=m>>>0)}}else l=0;t=(w|0)==103;u=(k|0)!=0;m=k-((w|0)==102?0:l)+((u&t)<<31>>31)|0;if((m|0)<(((s-y>>2)*9|0)+-9|0)){x=m+9216|0;m=(x|0)/9|0;g=C+4+(m+-1024<<2)|0;m=x+(v(m,-9)|0)|0;if((m|0)<8){n=10;while(1){n=n*10|0;if((m|0)<7)m=m+1|0;else break}}else n=10;o=c[g>>2]|0;m=(o>>>0)/(n>>>0)|0;r=v(m,n)|0;o=o-r|0;p=(g+4|0)==(s|0);if(!(p&(o|0)==0)){q=(m&1|0)==0?9007199254740992.0:9007199254740994.0;x=n>>>1;e=o>>>0<x>>>0?.5:p&(o|0)==(x|0)?1.0:1.5;if(D){x=(a[B>>0]|0)==45;q=x?-q:q;e=x?-e:e}c[g>>2]=r;if(q+e!=q){x=r+n|0;c[g>>2]=x;if(x>>>0>999999999){l=g;while(1){m=l+-4|0;c[l>>2]=0;if(m>>>0<j>>>0){j=j+-4|0;c[j>>2]=0}x=(c[m>>2]|0)+1|0;c[m>>2]=x;if(x>>>0>999999999)l=m;else break}}else m=g;l=(y-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;l=l+1|0}while(o>>>0>=n>>>0)}}else m=g}else m=g;w=m+4|0;x=j;j=s>>>0>w>>>0?w:s}else{x=j;j=s}r=0-l|0;b:do if(j>>>0>x>>>0)while(1){m=j+-4|0;if(c[m>>2]|0){s=1;w=j;break b}if(m>>>0>x>>>0)j=m;else{s=0;w=m;break}}else{s=0;w=j}while(0);do if(t){j=k+((u^1)&1)|0;if((j|0)>(l|0)&(l|0)>-5){k=j+-1-l|0;n=i+-1|0}else{k=j+-1|0;n=i+-2|0}if(!(h&8)){if(s?(A=c[w+-4>>2]|0,(A|0)!=0):0)if(!((A>>>0)%10|0)){j=10;m=0;do{j=j*10|0;m=m+1|0}while(!((A>>>0)%(j>>>0)|0|0))}else m=0;else m=9;j=((w-y>>2)*9|0)+-9|0;if((n|32|0)==102){i=j-m|0;i=(i|0)>0?i:0;k=(k|0)<(i|0)?k:i;break}else{i=j+l-m|0;i=(i|0)>0?i:0;k=(k|0)<(i|0)?k:i;break}}}else n=i;while(0);g=(k|0)!=0;o=g?1:h>>>3&1;p=(n|32|0)==102;if(p){u=0;j=(l|0)>0?l:0}else{j=(l|0)<0?r:l;j=cA(j,((j|0)<0)<<31>>31,E)|0;m=E;if((m-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((m-j|0)<2);a[j+-1>>0]=(l>>31&2)+43;j=j+-2|0;a[j>>0]=n;u=j;j=m-j|0}j=D+1+k+o+j|0;fA(b,32,f,j,h);Yz(b,B,D);fA(b,48,f,j,h^65536);if(p){o=x>>>0>C>>>0?C:x;r=G+9|0;p=r;n=G+8|0;m=o;do{l=cA(c[m>>2]|0,0,r)|0;if((m|0)==(o|0)){if((l|0)==(r|0)){a[n>>0]=48;l=n}}else if(l>>>0>G>>>0){uC(G|0,48,l-F|0)|0;do l=l+-1|0;while(l>>>0>G>>>0)}Yz(b,l,p-l|0);m=m+4|0}while(m>>>0<=C>>>0);if(!((h&8|0)==0&(g^1)))Yz(b,331578,1);if(m>>>0<w>>>0&(k|0)>0)while(1){l=cA(c[m>>2]|0,0,r)|0;if(l>>>0>G>>>0){uC(G|0,48,l-F|0)|0;do l=l+-1|0;while(l>>>0>G>>>0)}Yz(b,l,(k|0)<9?k:9);m=m+4|0;l=k+-9|0;if(!(m>>>0<w>>>0&(k|0)>9)){k=l;break}else k=l}fA(b,48,k+9|0,9,0)}else{g=s?w:x+4|0;if(x>>>0<g>>>0&(k|0)>-1){r=G+9|0;t=(h&8|0)==0;s=r;n=0-F|0;p=G+8|0;o=x;do{l=cA(c[o>>2]|0,0,r)|0;if((l|0)==(r|0)){a[p>>0]=48;l=p}do if((o|0)==(x|0)){m=l+1|0;Yz(b,l,1);if(t&(k|0)<1){l=m;break}Yz(b,331578,1);l=m}else{if(l>>>0<=G>>>0)break;uC(G|0,48,l+n|0)|0;do l=l+-1|0;while(l>>>0>G>>>0)}while(0);F=s-l|0;Yz(b,l,(k|0)>(F|0)?F:k);k=k-F|0;o=o+4|0}while(o>>>0<g>>>0&(k|0)>-1)}fA(b,48,k+18|0,18,0);Yz(b,u,E-u|0)}fA(b,32,f,j,h^8192)}while(0);aa=H;return ((j|0)<(f|0)?f:j)|0}function iA(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;y(c[h+4>>2]|0);return b|0}function jA(a,b){a=+a;b=b|0;return +(+kA(a,b))}function kA(a,b){a=+a;b=b|0;var d=0,e=0,f=0;g[h>>3]=a;d=c[h>>2]|0;e=c[h+4>>2]|0;f=oC(d|0,e|0,52)|0;z()|0;switch(f&2047){case 0:{if(a!=0.0){a=+kA(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[h>>2]=d;c[h+4>>2]=e&-2146435073|1071644672;a=+g[h>>3]}}return +a}function lA(b,d){b=b|0;d=d|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[88545]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[88534]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[88534]=84;b=-1;break}}else b=1;while(0);return b|0}function mA(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[281376+f>>0]|0)==(b|0)){b=4;break}f=f+1|0;if((f|0)==87){f=87;b=5;break}}if((b|0)==4)if(!f)f=281472;else b=5;if((b|0)==5){b=281472;do{do{g=b;b=b+1|0}while((a[g>>0]|0)!=0);f=f+-1|0}while((f|0)!=0);f=b}return nA(f,c[e+20>>2]|0)|0}function nA(a,b){a=a|0;b=b|0;return oA(a,b)|0}function oA(a,b){a=a|0;b=b|0;if(!b)b=0;else b=pA(c[b>>2]|0,c[b+4>>2]|0,a)|0;return ((b|0)==0?a:b)|0}function pA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(c[b>>2]|0)+1794895138|0;h=qA(c[b+8>>2]|0,o)|0;f=qA(c[b+12>>2]|0,o)|0;g=qA(c[b+16>>2]|0,o)|0;a:do if((h>>>0<d>>>2>>>0?(n=d-(h<<2)|0,f>>>0<n>>>0&g>>>0<n>>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){k=h>>>1;j=l+k|0;i=j<<1;g=i+n|0;f=qA(c[b+(g<<2)>>2]|0,o)|0;g=qA(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0<d>>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=rA(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}l=f?l:j;h=f?k:h-k|0}f=i+m|0;g=qA(c[b+(f<<2)>>2]|0,o)|0;f=qA(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0<d>>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function qA(a,b){a=a|0;b=b|0;var c=0;c=qC(a|0)|0;return ((b|0)==0?a:c)|0}function rA(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24))do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));return (d&255)-(e&255)|0}function sA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=e+16|0;f=c[g>>2]|0;if(!f){if(!(tA(e)|0)){f=c[g>>2]|0;h=5}}else h=5;a:do if((h|0)==5){i=e+20|0;h=c[i>>2]|0;g=h;if((f-h|0)>>>0<d>>>0){ga[c[e+36>>2]&127](e,b,d)|0;break}b:do if((a[e+75>>0]|0)<0|(d|0)==0)f=d;else{h=d;while(1){f=h+-1|0;if((a[b+f>>0]|0)==10)break;if(!f){f=d;break b}else h=f}if((ga[c[e+36>>2]&127](e,b,h)|0)>>>0<h>>>0)break a;g=c[i>>2]|0;f=d-h|0;b=b+h|0}while(0);sC(g|0,b|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while(0);return}function tA(b){b=b|0;var d=0,e=0;d=b+74|0;e=a[d>>0]|0;a[d>>0]=e+255|e;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function uA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+20|0;f=c[e>>2]|0;a=(c[a+16>>2]|0)-f|0;a=a>>>0>d>>>0?d:a;sC(f|0,b|0,a|0)|0;c[e>>2]=(c[e>>2]|0)+a;return d|0}function vA(a){a=a|0;return ((a|0)==32|(a+-9|0)>>>0<5)&1|0}function wA(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)c=0;else{f=a[b>>0]|0;a:do if(!(f<<24>>24))f=0;else while(1){e=e+-1|0;g=a[c>>0]|0;if(!(f<<24>>24==g<<24>>24&((e|0)!=0&g<<24>>24!=0)))break a;b=b+1|0;c=c+1|0;f=a[b>>0]|0;if(!(f<<24>>24)){f=0;break}}while(0);c=(f&255)-(d[c>>0]|0)|0}return c|0}function xA(a){a=a|0;var b=0,e=0;e=aa;aa=aa+16|0;b=e;if((yA(a)|0)==0?(ga[c[a+32>>2]&127](a,b,1)|0)==1:0)b=d[b>>0]|0;else b=-1;aa=e;return b|0}function yA(b){b=b|0;var d=0,e=0;e=b+74|0;d=a[e>>0]|0;a[e>>0]=d+255|d;e=b+20|0;d=b+28|0;if((c[e>>2]|0)>>>0>(c[d>>2]|0)>>>0)ga[c[b+36>>2]&127](b,0,0)|0;c[b+16>>2]=0;c[d>>2]=0;c[e>>2]=0;d=c[b>>2]|0;if(!(d&4)){e=(c[b+44>>2]|0)+(c[b+48>>2]|0)|0;c[b+8>>2]=e;c[b+4>>2]=e;d=d<<27>>31}else{c[b>>2]=d|32;d=-1}return d|0}function zA(a){a=a|0;var b=0;c[a+104>>2]=0;b=c[a+8>>2]|0;c[a+108>>2]=b-(c[a+4>>2]|0);c[a+100>>2]=b;return}function AA(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;f=b+104|0;j=c[f>>2]|0;if((j|0)!=0?(c[b+108>>2]|0)>=(j|0):0)k=4;else{e=xA(b)|0;if((e|0)>=0){g=c[f>>2]|0;j=c[b+8>>2]|0;if(g){f=b+4|0;i=c[f>>2]|0;h=g-(c[b+108>>2]|0)|0;g=j;if((j-i|0)<(h|0))k=9;else c[b+100>>2]=i+(h+-1)}else{f=b+4|0;g=j;k=9}if((k|0)==9)c[b+100>>2]=j;if(!g)f=c[f>>2]|0;else{f=c[f>>2]|0;b=b+108|0;c[b>>2]=g+1-f+(c[b>>2]|0)}f=f+-1|0;if((e|0)!=(d[f>>0]|0|0))a[f>>0]=e}else k=4}if((k|0)==4){c[b+100>>2]=0;e=-1}return e|0}function BA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;a=aa;aa=aa+16|0;e=a;c[e>>2]=d;Wz(291736,b,e)|0;aa=a;return}function CA(a){a=a|0;return (a+-32|0)>>>0<95|0}function DA(b,e){b=b|0;e=e|0;var f=0.0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;switch(e|0){case 0:{j=24;k=-149;i=4;break}case 1:{j=53;k=-1074;i=4;break}case 2:{j=53;k=-1074;i=4;break}default:f=0.0}a:do if((i|0)==4){m=b+4|0;l=b+100|0;do{e=c[m>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[m>>2]=e+1;e=d[e>>0]|0}else e=AA(b)|0}while((vA(e)|0)!=0);b:do switch(e|0){case 43:case 45:{g=1-(((e|0)==45&1)<<1)|0;e=c[m>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[m>>2]=e+1;e=d[e>>0]|0;h=g;break b}else{e=AA(b)|0;h=g;break b}}default:h=1}while(0);g=e;e=0;while(1){if((g|32|0)!=(a[331580+e>>0]|0))break;do if(e>>>0<7){g=c[m>>2]|0;if(g>>>0<(c[l>>2]|0)>>>0){c[m>>2]=g+1;g=d[g>>0]|0;break}else{g=AA(b)|0;break}}while(0);e=e+1|0;if(e>>>0>=8){e=8;break}}c:do switch(e&2147483647|0){case 8:break;case 3:{i=23;break}default:{if(e>>>0>3)if((e|0)==8)break c;else{i=23;break c}d:do if(!e){e=0;do{if((g|32|0)!=(a[331589+e>>0]|0)){i=39;break d}do if(e>>>0<2){g=c[m>>2]|0;if(g>>>0<(c[l>>2]|0)>>>0){c[m>>2]=g+1;g=d[g>>0]|0;break}else{g=AA(b)|0;break}}while(0);e=e+1|0}while(e>>>0<3)}else i=39;while(0);e:do if((i|0)==39){switch(e|0){case 3:break e;case 0:break;default:{if(c[l>>2]|0)c[m>>2]=(c[m>>2]|0)+-1;c[88534]=22;zA(b);f=0.0;break a}}if((g|0)==48){e=c[m>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[m>>2]=e+1;e=d[e>>0]|0}else e=AA(b)|0;if((e|32|0)==120){f=+EA(b,j,k,h);break a}if(!(c[l>>2]|0))e=48;else{c[m>>2]=(c[m>>2]|0)+-1;e=48}}else e=g;f=+FA(b,e,j,k,h);break a}while(0);e=c[m>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[m>>2]=e+1;e=d[e>>0]|0}else e=AA(b)|0;if((e|0)!=40){if(!(c[l>>2]|0)){f=r;break a}c[m>>2]=(c[m>>2]|0)+-1;f=r;break a}e=1;while(1){g=c[m>>2]|0;if(g>>>0<(c[l>>2]|0)>>>0){c[m>>2]=g+1;g=d[g>>0]|0}else g=AA(b)|0;if(!((g+-48|0)>>>0<10|(g+-65|0)>>>0<26)?!((g|0)==95|(g+-97|0)>>>0<26):0)break;e=e+1|0}if((g|0)==41){f=r;break a}g=(c[l>>2]|0)==0;if(!g)c[m>>2]=(c[m>>2]|0)+-1;if(!e){f=r;break a}while(1){e=e+-1|0;if(!g)c[m>>2]=(c[m>>2]|0)+-1;if(!e){f=r;break a}}}}while(0);if((i|0)==23){g=(c[l>>2]|0)==0;if(!g)c[m>>2]=(c[m>>2]|0)+-1;if(e>>>0>3)do{if(!g)c[m>>2]=(c[m>>2]|0)+-1;e=e+-1|0}while(e>>>0>3)}f=+(h|0)*s}while(0);return +f}function EA(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0.0,h=0,i=0,j=0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0;A=a+4|0;j=c[A>>2]|0;B=a+100|0;if(j>>>0<(c[B>>2]|0)>>>0){c[A>>2]=j+1;j=d[j>>0]|0}else j=AA(a)|0;o=0;a:while(1){switch(j|0){case 46:{C=10;break a}case 48:break;default:{l=0;m=0;p=0;break a}}j=c[A>>2]|0;if(j>>>0<(c[B>>2]|0)>>>0){c[A>>2]=j+1;j=d[j>>0]|0}else j=AA(a)|0;o=1}if((C|0)==10){j=c[A>>2]|0;if(j>>>0<(c[B>>2]|0)>>>0){c[A>>2]=j+1;j=d[j>>0]|0}else j=AA(a)|0;if((j|0)==48){l=0;m=0;do{j=c[A>>2]|0;if(j>>>0<(c[B>>2]|0)>>>0){c[A>>2]=j+1;j=d[j>>0]|0}else j=AA(a)|0;l=iC(l|0,m|0,-1,-1)|0;m=z()|0}while((j|0)==48);o=1;p=1}else{l=0;m=0;p=1}}x=0;w=0;t=j;u=0;n=1.0;j=0;g=0.0;while(1){s=t+-48|0;q=t|32;if(s>>>0>=10){r=(t|0)==46;if(!(r|(q+-97|0)>>>0<6)){q=t;break}if(r)if(!p){l=w;m=x;s=w;r=x;v=1;q=u;k=n}else{q=46;break}else C=24}else C=24;if((C|0)==24){C=0;o=(t|0)>57?q+-87|0:s;do if(!((x|0)<0|(x|0)==0&w>>>0<8))if((x|0)<0|(x|0)==0&w>>>0<14){n=n*.0625;q=u;k=n;g=g+n*+(o|0);break}else{v=(u|0)!=0|(o|0)==0;q=v?u:1;k=n;g=v?g:g+n*.5;break}else{q=u;k=n;j=o+(j<<4)|0}while(0);s=iC(w|0,x|0,1,0)|0;r=z()|0;o=1;v=p}p=c[A>>2]|0;if(p>>>0<(c[B>>2]|0)>>>0){c[A>>2]=p+1;p=d[p>>0]|0}else p=AA(a)|0;x=r;w=s;t=p;p=v;u=q;n=k}do if(!o){if(c[B>>2]|0?(y=c[A>>2]|0,c[A>>2]=y+-2,p|0):0)c[A>>2]=y+-3;g=+(f|0)*0.0}else{o=(p|0)==0;p=o?w:l;o=o?x:m;if((x|0)<0|(x|0)==0&w>>>0<8){m=w;l=x;do{j=j<<4;C=m;m=iC(m|0,l|0,1,0)|0;y=l;l=z()|0}while((y|0)<0|(y|0)==0&C>>>0<7)}if(!((q|32|0)==112?(i=GA(a)|0,h=z()|0,!((i|0)==0&(h|0)==-2147483648)):0))if(!(c[B>>2]|0)){i=0;h=0}else{c[A>>2]=(c[A>>2]|0)+-1;i=0;h=0}C=pC(p|0,o|0,2)|0;C=iC(C|0,z()|0,-32,-1)|0;h=iC(C|0,z()|0,i|0,h|0)|0;i=z()|0;if(!j){g=+(f|0)*0.0;break}C=0-e|0;B=((C|0)<0)<<31>>31;if((i|0)>(B|0)|(i|0)==(B|0)&h>>>0>C>>>0){c[88534]=34;g=+(f|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}C=e+-106|0;B=((C|0)<0)<<31>>31;if((i|0)<(B|0)|(i|0)==(B|0)&h>>>0<C>>>0){c[88534]=34;g=+(f|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if((j|0)>-1){do{C=!(g>=.5);j=j<<1|(C^1)&1;g=g+(C?g:g+-1.0);h=iC(h|0,i|0,-1,-1)|0;i=z()|0}while((j|0)>-1);l=h;n=g}else{l=h;n=g}C=((b|0)<0)<<31>>31;h=jC(32,0,e|0,((e|0)<0)<<31>>31|0)|0;h=iC(h|0,z()|0,l|0,i|0)|0;e=z()|0;if((e|0)<(C|0)|(e|0)==(C|0)&h>>>0<b>>>0)if((h|0)>0)C=59;else{i=0;h=84;C=61}else{h=b;C=59}if((C|0)==59)if((h|0)<53){i=h;h=84-h|0;C=61}else{k=0.0;g=+(f|0)}if((C|0)==61){g=+(f|0);k=+IA(+HA(1.0,h),g);h=i}f=(j&1|0)==0&(n!=0.0&(h|0)<32);g=(f?0.0:n)*g+(k+g*+((j+(f&1)|0)>>>0))-k;if(!(g!=0.0))c[88534]=34;g=+KA(g,l)}while(0);return +g}function FA(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0.0,u=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0;H=aa;aa=aa+512|0;E=H;F=f+e|0;G=0-F|0;C=a+4|0;D=a+100|0;i=b;l=0;a:while(1){switch(i|0){case 46:{B=7;break a}case 48:break;default:{j=0;b=0;r=0;break a}}b=c[C>>2]|0;if(b>>>0<(c[D>>2]|0)>>>0){c[C>>2]=b+1;b=d[b>>0]|0}else b=AA(a)|0;i=b;l=1}if((B|0)==7){b=c[C>>2]|0;if(b>>>0<(c[D>>2]|0)>>>0){c[C>>2]=b+1;i=d[b>>0]|0}else i=AA(a)|0;if((i|0)==48){i=0;b=0;while(1){j=iC(i|0,b|0,-1,-1)|0;b=z()|0;i=c[C>>2]|0;if(i>>>0<(c[D>>2]|0)>>>0){c[C>>2]=i+1;i=d[i>>0]|0}else i=AA(a)|0;if((i|0)==48)i=j;else{l=1;r=1;break}}}else{j=0;b=0;r=1}}c[E>>2]=0;w=i+-48|0;m=(i|0)==46;b:do if(m|w>>>0<10){B=E+496|0;A=0;u=0;x=m;o=0;n=0;m=0;c:while(1){do if(x)if(!r){j=A;b=u;r=1}else break c;else{x=iC(A|0,u|0,1,0)|0;u=z()|0;y=(i|0)!=48;if((n|0)>=125){if(!y){A=x;break}c[B>>2]=c[B>>2]|1;A=x;break}l=E+(n<<2)|0;if(!o)i=w;else i=i+-48+((c[l>>2]|0)*10|0)|0;c[l>>2]=i;o=o+1|0;w=(o|0)==9;A=x;l=1;o=w?0:o;n=n+(w&1)|0;m=y?x:m}while(0);i=c[C>>2]|0;if(i>>>0<(c[D>>2]|0)>>>0){c[C>>2]=i+1;i=d[i>>0]|0}else i=AA(a)|0;w=i+-48|0;x=(i|0)==46;if(!(x|w>>>0<10)){B=31;break b}}r=A;i=(l|0)!=0;B=37}else{A=0;u=0;o=0;n=0;m=0;B=31}while(0);do if((B|0)==31){w=(r|0)==0;j=w?A:j;b=w?u:b;w=(l|0)!=0;if(!(w&(i|32|0)==101))if((i|0)>-1){r=A;i=w;B=37;break}else{r=A;l=u;i=w;B=39;break}l=GA(a)|0;i=z()|0;if((l|0)==0&(i|0)==-2147483648)if(!(c[D>>2]|0)){l=0;i=0}else{c[C>>2]=(c[C>>2]|0)+-1;l=0;i=0}j=iC(l|0,i|0,j|0,b|0)|0;r=A;b=z()|0;l=u;B=41}while(0);if((B|0)==37)if(c[D>>2]|0){c[C>>2]=(c[C>>2]|0)+-1;if(i){l=u;B=41}else B=40}else{l=u;B=39}if((B|0)==39)if(i)B=41;else B=40;do if((B|0)==40){c[88534]=22;zA(a);h=0.0}else if((B|0)==41){i=c[E>>2]|0;if(!i){h=+(g|0)*0.0;break}if(((l|0)<0|(l|0)==0&r>>>0<10)&((j|0)==(r|0)&(b|0)==(l|0))?(e|0)>30|(i>>>e|0)==0:0){h=+(g|0)*+(i>>>0);break}a=(f|0)/-2|0;D=((a|0)<0)<<31>>31;if((b|0)>(D|0)|(b|0)==(D|0)&j>>>0>a>>>0){c[88534]=34;h=+(g|0)*1797693134862315708145274.0e284*1797693134862315708145274.0e284;break}a=f+-106|0;D=((a|0)<0)<<31>>31;if((b|0)<(D|0)|(b|0)==(D|0)&j>>>0<a>>>0){c[88534]=34;h=+(g|0)*2.2250738585072014e-308*2.2250738585072014e-308;break}if(!o)i=n;else{if((o|0)<9){l=E+(n<<2)|0;b=o;i=c[l>>2]|0;while(1){i=i*10|0;if((b|0)>=8)break;else b=b+1|0}c[l>>2]=i}i=n+1|0}if((m|0)<9?(m|0)<=(j|0)&(j|0)<18:0){if((j|0)==9){h=+(g|0)*+((c[E>>2]|0)>>>0);break}if((j|0)<9){h=+(g|0)*+((c[E>>2]|0)>>>0)/+(c[283280+(8-j<<2)>>2]|0);break}a=e+27+(v(j,-3)|0)|0;b=c[E>>2]|0;if((a|0)>30|(b>>>a|0)==0){h=+(g|0)*+(b>>>0)*+(c[283280+(j+-10<<2)>>2]|0);break}}b=(j|0)%9|0;if(!b)l=0;else{r=(j|0)>-1?b:b+9|0;b=c[283280+(8-r<<2)>>2]|0;if(i){n=1e9/(b|0)|0;l=0;m=0;o=0;do{C=E+(o<<2)|0;D=c[C>>2]|0;a=(D>>>0)/(b>>>0)|0;D=D-(v(a,b)|0)|0;a=a+m|0;c[C>>2]=a;m=v(n,D)|0;a=(o|0)==(l|0)&(a|0)==0;j=a?j+-9|0:j;l=a?l+1&127:l;o=o+1|0}while((o|0)!=(i|0));if(!m)b=i;else{c[E+(i<<2)>>2]=m;b=i+1|0}}else{l=0;b=0}j=9-r+j|0;i=b}b=0;d:while(1){x=(j|0)<18;y=(j|0)==18;w=E+(l<<2)|0;do{if(!x){if(!y)break d;if((c[w>>2]|0)>>>0>=9007199){j=18;break d}}n=0;m=i+127|0;while(1){r=m&127;o=E+(r<<2)|0;m=pC(c[o>>2]|0,0,29)|0;m=iC(m|0,z()|0,n|0,0)|0;n=z()|0;if(n>>>0>0|(n|0)==0&m>>>0>1e9){u=mC(m|0,n|0,1e9,0)|0;a=hC(u|0,z()|0,-1e9,-1)|0;m=iC(m|0,n|0,a|0,z()|0)|0;z()|0}else u=0;c[o>>2]=m;a=(r|0)==(l|0);o=(r|0)!=(i+127&127|0)|a?i:(m|0)==0?r:i;if(a)break;else{n=u;m=r+-1|0;i=o}}b=b+-29|0}while((u|0)==0);l=l+127&127;m=o+127&127;n=E+((o+126&127)<<2)|0;if((l|0)==(o|0)){c[n>>2]=c[n>>2]|c[E+(m<<2)>>2];i=m}c[E+(l<<2)>>2]=u;j=j+9|0}e:while(1){w=i+1&127;x=E+((i+127&127)<<2)|0;while(1){r=(j|0)==18;u=(j|0)>27?9:1;while(1){o=0;while(1){m=o+l&127;if((m|0)==(i|0)){B=90;break}m=c[E+(m<<2)>>2]|0;n=c[291984+(o<<2)>>2]|0;if(m>>>0<n>>>0){B=90;break}if(m>>>0>n>>>0)break;if((o+1|0)>>>0<2)o=1;else{B=90;break}}if((B|0)==90?(B=0,r):0)break e;b=u+b|0;if((l|0)==(i|0))l=i;else break}r=(1<<u)+-1|0;o=1e9>>>u;m=l;n=0;do{C=E+(l<<2)|0;D=c[C>>2]|0;a=(D>>>u)+n|0;c[C>>2]=a;n=v(D&r,o)|0;a=(l|0)==(m|0)&(a|0)==0;j=a?j+-9|0:j;m=a?m+1&127:m;l=l+1&127}while((l|0)!=(i|0));if(n|0){if((w|0)!=(m|0))break;c[x>>2]=c[x>>2]|1}l=m}c[E+(i<<2)>>2]=n;l=m;i=w}n=0;h=0.0;j=i;while(1){m=n+l&127;i=j+1&127;if((m|0)==(j|0))c[E+(i+-1<<2)>>2]=0;else i=j;h=h*1.0e9+ +((c[E+(m<<2)>>2]|0)>>>0);n=n+1|0;if((n|0)==2)break;else j=i}s=+(g|0);k=h*s;m=b+53|0;r=m-f|0;o=(r|0)<(e|0);n=o?((r|0)>0?r:0):e;if((n|0)<53){I=+IA(+HA(1.0,105-n|0),k);p=+JA(k,+HA(1.0,53-n|0));q=I;h=p;p=I+(k-p)}else{q=0.0;h=0.0;p=k}j=l+2&127;if((j|0)!=(i|0)){j=c[E+(j<<2)>>2]|0;do if(j>>>0>=5e8){if((j|0)!=5e8){h=s*.75+h;break}if((l+3&127|0)==(i|0)){h=s*.5+h;break}else{h=s*.75+h;break}}else{if((j|0)==0?(l+3&127|0)==(i|0):0)break;h=s*.25+h}while(0);if((53-n|0)>1?!(+JA(h,1.0)!=0.0):0)k=h+1.0;else k=h}else k=h;h=p+k-q;do if((m&2147483647|0)>(-2-F|0)){F=!(+t(+h)>=9007199254740992.0);b=b+((F^1)&1)|0;h=F?h:h*.5;if((b+50|0)<=(G|0)?!(k!=0.0&(o&((n|0)!=(r|0)|F))):0)break;c[88534]=34}while(0);h=+KA(h,b)}while(0);aa=H;return +h}function GA(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=a+4|0;b=c[i>>2]|0;j=a+100|0;if(b>>>0<(c[j>>2]|0)>>>0){c[i>>2]=b+1;b=d[b>>0]|0}else b=AA(a)|0;switch(b|0){case 43:case 45:{e=(b|0)==45&1;b=c[i>>2]|0;if(b>>>0<(c[j>>2]|0)>>>0){c[i>>2]=b+1;b=d[b>>0]|0}else b=AA(a)|0;if((b+-48|0)>>>0>9)if(!(c[j>>2]|0)){e=-2147483648;b=0}else{c[i>>2]=(c[i>>2]|0)+-1;f=14}else{h=e;f=12}break}default:if((b+-48|0)>>>0>9)if(!(c[j>>2]|0)){e=-2147483648;b=0}else f=14;else{h=0;f=12}}if((f|0)==12){f=0;while(1){f=b+-48+(f*10|0)|0;b=c[i>>2]|0;if(b>>>0<(c[j>>2]|0)>>>0){c[i>>2]=b+1;e=d[b>>0]|0}else e=AA(a)|0;g=(e+-48|0)>>>0<10;if(!(g&(f|0)<214748364))break;else b=e}b=((f|0)<0)<<31>>31;if(g){do{k=hC(f|0,b|0,10,0)|0;g=z()|0;e=iC(e|0,((e|0)<0)<<31>>31|0,-48,-1)|0;f=iC(e|0,z()|0,k|0,g|0)|0;b=z()|0;e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=AA(a)|0;g=(e+-48|0)>>>0<10}while(g&((b|0)<21474836|(b|0)==21474836&f>>>0<2061584302));if(g)do{e=c[i>>2]|0;if(e>>>0<(c[j>>2]|0)>>>0){c[i>>2]=e+1;e=d[e>>0]|0}else e=AA(a)|0}while((e+-48|0)>>>0<10)}if(c[j>>2]|0)c[i>>2]=(c[i>>2]|0)+-1;j=(h|0)==0;k=jC(0,0,f|0,b|0)|0;e=z()|0;e=j?b:e;b=j?f:k}else if((f|0)==14){c[i>>2]=(c[i>>2]|0)+-1;e=-2147483648;b=0}y(e|0);return b|0} +function mm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;i=a+4|0;g=c[a>>2]|0;m=(c[i>>2]|0)-g|0;l=m>>3;e=l+1|0;if(e>>>0>536870911)HB();j=a+8|0;n=(c[j>>2]|0)-g|0;f=n>>2;f=n>>3>>>0<268435455?(f>>>0<e>>>0?e:f):536870911;do if(f)if(f>>>0>536870911)U();else{k=_A(f<<3)|0;h=k;break}else{h=0;k=0}while(0);e=k+(l<<3)|0;n=c[d>>2]|0;c[e>>2]=c[b>>2];c[k+(l<<3)+4>>2]=n;if((m|0)>0)sC(h|0,g|0,m|0)|0;c[a>>2]=k;c[i>>2]=e+8;c[j>>2]=k+(f<<3);if(!g)return;$A(g);return}function nm(a,b){a=a|0;b=b|0;var d=0;d=a<<24>>24;a=d+-48|0;do if(a>>>0>=10){if((d+-97|0)>>>0<6){a=d+-87|0;break}if((d+-65|0)>>>0<6){a=d+-55|0;break}else{b=1;return b|0}}while(0);c[b>>2]=a;b=0;return b|0}function om(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((b|0)==(d|0)){e=1;return e|0}f=a[b>>0]|0;a:do if((f<<24>>24==48?(g=b+1|0,g>>>0<d>>>0):0)?(a[g>>0]|0)==120:0){f=b+2|0;if((f|0)==(d|0)){e=1;return e|0}if(f>>>0<d>>>0){h=0;i=0;b:while(1){g=a[f>>0]|0;c:do if(g<<24>>24!=95){b=g<<24>>24;g=b+-48|0;do if(g>>>0>=10)if((b+-97|0)>>>0>=6)if((b+-65|0)>>>0<6){g=b+-55|0;break}else{b=i;g=1;break c}else{g=b+-87|0;break}while(0);if(!(h>>>0>268435455|(h|0)==268435455&i>>>0>4294967295))if((i|0)==-1&(h|0)==268435455&g>>>0>15){b=-1;h=268435455;g=1}else{b=pC(i|0,h|0,4)|0;b=iC(b|0,z()|0,g|0,0)|0;h=z()|0;g=0}else{b=i;g=1}}else{b=i;g=4}while(0);switch(g&7){case 4:case 0:break;default:break b}f=f+1|0;if(f>>>0<d>>>0)i=b;else{g=b;break a}}if(!g)g=b;else{e=1;return e|0}}else{g=0;h=0}}else j=19;while(0);d:do if((j|0)==19)if(b>>>0<d>>>0){h=0;g=0;while(1){if(f<<24>>24!=95){f=(f<<24>>24)+-48|0;if(h>>>0>429496729|(h|0)==429496729&g>>>0>2576980377|f>>>0>9){f=1;j=29;break}if((g|0)==-1717986919&(h|0)==429496729&f>>>0>5){f=1;j=29;break}g=hC(g|0,h|0,10,0)|0;g=iC(g|0,z()|0,f|0,0)|0;h=z()|0}b=b+1|0;if(b>>>0>=d>>>0){f=b;break d}f=a[b>>0]|0}if((j|0)==29)return f|0}else{g=0;h=0;f=b}while(0);if((f|0)!=(d|0)){e=1;return e|0}c[e>>2]=g;c[e+4>>2]=h;e=0;return e|0}function pm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a[b>>0]|0;switch(f<<24>>24){case 43:case 45:{g=f<<24>>24==45;f=b+1|0;break}default:{g=0;f=b}}b=h;c[b>>2]=0;c[b+4>>2]=0;d=om(f,d,h)|0;f=h;b=c[f>>2]|0;f=c[f+4>>2]|0;do if(g)if(f>>>0>2147483648|(f|0)==-2147483648&b>>>0>0){e=1;aa=i;return e|0}else{b=jC(0,0,b|0,f|0)|0;f=z()|0;c[h>>2]=b;c[h+4>>2]=f;break}while(0);c[e>>2]=b;c[e+4>>2]=f;e=d;aa=i;return e|0}function qm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a[b>>0]|0;switch(f<<24>>24){case 43:case 45:{g=f<<24>>24==45;f=b+1|0;break}default:{g=0;f=b}}if((om(f,d,h)|0)==1){e=1;aa=i;return e|0}b=h;f=c[b>>2]|0;b=c[b+4>>2]|0;do if(g)if(b>>>0>0|(b|0)==0&f>>>0>128){e=1;aa=i;return e|0}else{f=jC(256,0,f|0,b|0)|0;g=z()|0;c[h>>2]=f;c[h+4>>2]=g;f=f&255;break}else if(b>>>0>0|(b|0)==0&f>>>0>255){e=1;aa=i;return e|0}else f=f&255;while(0);a[e>>0]=f;e=0;aa=i;return e|0}function rm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a[d>>0]|0;switch(g<<24>>24){case 43:case 45:{h=g<<24>>24==45;g=d+1|0;break}default:{h=0;g=d}}if((om(g,e,i)|0)==1){f=1;aa=j;return f|0}d=i;g=c[d>>2]|0;d=c[d+4>>2]|0;do if(h)if(d>>>0>0|(d|0)==0&g>>>0>32768){f=1;aa=j;return f|0}else{g=jC(65536,0,g|0,d|0)|0;h=z()|0;c[i>>2]=g;c[i+4>>2]=h;g=g&65535;break}else if(d>>>0>0|(d|0)==0&g>>>0>65535){f=1;aa=j;return f|0}else g=g&65535;while(0);b[f>>1]=g;f=0;aa=j;return f|0}function sm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;g=a[b>>0]|0;switch(g<<24>>24){case 43:case 45:{if(!f)b=1;else{f=g<<24>>24==45;b=b+1|0;h=4}break}default:{f=0;h=4}}do if((h|0)==4)if((om(b,d,i)|0)==1)b=1;else{g=i;b=c[g>>2]|0;g=c[g+4>>2]|0;if(!f){if(g>>>0>0|(g|0)==0&b>>>0>4294967295){b=1;break}}else{if(g>>>0>0|(g|0)==0&b>>>0>2147483648){b=1;break}b=jC(0,1,b|0,g|0)|0;h=z()|0;c[i>>2]=b;c[i+4>>2]=h}c[e>>2]=b;b=0}while(0);aa=j;return b|0}function tm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;switch(b|0){case 1:case 0:{f=um(d,e,f)|0;return f|0}case 2:{switch(a[d>>0]|0){case 45:{n=-2147483648;d=d+1|0;break}case 43:{n=0;d=d+1|0;break}default:n=0}d=d+2|0;if(d>>>0<e>>>0){j=0;g=0;l=0;k=0;a:while(1){b=a[d>>0]|0;b:do switch(b<<24>>24){case 95:{i=j;h=l;b=k;break}case 46:{i=1;h=l;b=k;m=16;break}default:{b=b<<24>>24;h=b+-48|0;do if(h>>>0>=10)if((b+-97|0)>>>0>=6)if((b+-65|0)>>>0<6){h=b+-55|0;break}else{i=1;break a}else{h=b+-87|0;break}while(0);if((32-(w(l|0)|0)|0)<25){i=j;h=h+(l<<4)|0;b=j?k+-4|0:k;m=16;break b}else{i=j;g=g<<24>>24==0&(h|0)!=0?1:g;h=l;b=j?k:k+4|0;m=16;break b}}}while(0);if((m|0)==16)m=0;d=d+1|0;if(d>>>0<e>>>0){j=i;l=h;k=b}else{i=0;l=h;k=b;break}}if(l|0){if(i){b=d+1|0;switch(a[b>>0]|0){case 45:{j=1;b=d+2|0;i=0-k|0;break}case 43:{j=0;b=d+2|0;i=k;break}default:{j=0;i=0}}c:do if(b>>>0<e>>>0){d=0;do{h=a[b>>0]|0;if(h<<24>>24!=95){d=(d*10|0)+-48+(h<<24>>24)|0;if((d+i|0)>=128)break c}b=b+1|0}while(b>>>0<e>>>0)}else d=0;while(0);d=j?0-d|0:d}else d=0;i=32-(w(l|0)|0)|0;h=i+k+d|0;b=h+-1|0;if((b|0)>=-126){if((i|0)>24){d=i+-24|0;d=((g<<24>>24!=0|(1<<d&l|0)!=0?1<<i+-25:0)+l|0)>>>d;b=d>>>0>16777215?h:b}else d=l<<((i|0)==24?0:24-i|0);if((b|0)>127){f=1;return f|0}c[f>>2]=d&8388607|n|(b<<23)+1065353216;f=0;return f|0}if((i|0)>23){g=(((1<<i+-24)+-1&l|0)!=0|g&255)&255;d=l>>>(i+-23|0)}else d=l<<((i|0)==23?0:23-i|0);b=-126-h|0;if((b|0)<24){if(b){e=1<<b+-1;d=(((d&1<<b|g&255|(d&e+-1|0)!=0|0)==0?0:e)+d|0)>>>b&8388607}if(d|0){c[f>>2]=d|n;f=0;return f|0}}c[f>>2]=n;f=0;return f|0}}c[f>>2]=n;f=0;return f|0}case 3:{c[f>>2]=((a[d>>0]|0)==45&1)<<31|2139095040;f=0;return f|0}case 4:{switch(a[d>>0]|0){case 45:{i=-8388608;d=d+1|0;break}case 43:{i=2139095040;d=d+1|0;break}default:i=2139095040}do if((d+3|0)!=(e|0)){d=d+6|0;if(d>>>0>=e>>>0){f=1;return f|0}b=0;d:while(1){g=a[d>>0]|0;if(g<<24>>24!=95){h=g<<24>>24;g=h+-48|0;do if(g>>>0>=10)if((h+-97|0)>>>0>=6)if((h+-65|0)>>>0<6){g=h+-55|0;break}else{d=1;m=62;break d}else{g=h+-87|0;break}while(0);b=g+(b<<4)|0;if(b>>>0>8388607){d=1;m=62;break}}d=d+1|0;if(d>>>0>=e>>>0){m=59;break}}if((m|0)==59){if(!b)d=1;else{d=b;break}return d|0}else if((m|0)==62)return d|0}else d=4194304;while(0);c[f>>2]=d|i;f=0;return f|0}default:U()}return 0}function um(b,d,e){b=b|0;d=d|0;e=e|0;var g=0.0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;j=aa;aa=aa+((1*(1-b+d|0)|0)+15&-16)|0;if((b|0)==(d|0))b=j;else{i=b;b=j;do{h=a[i>>0]|0;if(h<<24>>24!=95){a[b>>0]=h;b=b+1|0}i=i+1|0}while((i|0)!=(d|0))}a[b>>0]=0;g=+QA(j,k);if(g==-s|(g==s?1:(c[k>>2]|0)!=(b|0))){e=1;aa=l;return e|0}f[e>>2]=g;e=0;aa=l;return e|0}function vm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;switch(b|0){case 1:case 0:{f=wm(d,e,f)|0;return f|0}case 2:{switch(a[d>>0]|0){case 45:{n=0;o=-2147483648;b=d+1|0;break}case 43:{n=0;o=0;b=d+1|0;break}default:{n=0;o=0;b=d}}b=b+2|0;if(b>>>0<e>>>0){i=0;j=0;m=0;h=0;l=0;a:while(1){d=a[b>>0]|0;b:do switch(d<<24>>24){case 95:{k=m;d=l;break}case 46:{k=1;d=l;g=16;break}default:{d=d<<24>>24;g=d+-48|0;do if(g>>>0>=10)if((d+-97|0)>>>0>=6)if((d+-65|0)>>>0<6){g=d+-55|0;break}else{m=i;g=1;break a}else{g=d+-87|0;break}while(0);k=rC(i|0,j|0,0)|0;z()|0;if((64-k|0)<54){i=pC(i|0,j|0,4)|0;i=iC(i|0,z()|0,g|0,0)|0;j=z()|0;k=m;d=m?l+-4|0:l;g=16;break b}else{k=m;h=h<<24>>24==0&(g|0)!=0?1:h;d=m?l:l+4|0;g=16;break b}}}while(0);if((g|0)==16)g=0;b=b+1|0;if(b>>>0<e>>>0){m=k;l=d}else{m=i;g=0;l=d;break}}if(!((m|0)==0&(j|0)==0)){if(g){d=b+1|0;switch(a[d>>0]|0){case 45:{k=1;d=b+2|0;i=0-l|0;break}case 43:{k=0;d=b+2|0;i=l;break}default:{k=0;i=0}}c:do if(d>>>0<e>>>0){b=0;do{g=a[d>>0]|0;if(g<<24>>24!=95){b=(b*10|0)+-48+(g<<24>>24)|0;if((b+i|0)>=1024)break c}d=d+1|0}while(d>>>0<e>>>0)}else b=0;while(0);b=k?0-b|0:b}else b=0;d=rC(m|0,j|0,0)|0;z()|0;d=64-d|0;i=d+l+b|0;b=i+-1|0;if((b|0)>=-1022){if((d|0)>53){e=d+-53|0;g=pC(1,0,e|0)|0;g=h<<24>>24!=0|((g&m|0)!=0|((z()|0)&j|0)!=0);l=pC(1,0,d+-54|0)|0;d=z()|0;m=iC((g?l:0)|0,(g?d:0)|0,m|0,j|0)|0;e=oC(m|0,z()|0,e|0)|0;m=z()|0;d=m;g=e;b=m>>>0>2097151|(m|0)==2097151&e>>>0>4294967295?i:b}else{g=pC(m|0,j|0,((d|0)==53?0:53-d|0)|0)|0;d=z()|0}if((b|0)>1023){f=1;return f|0}m=pC(b+1023|0,0,52)|0;e=d&1048575|o|(z()|0);c[f>>2]=g|n|m;c[f+4>>2]=e;f=0;return f|0}if((d|0)>52){b=pC(1,0,d+-53|0)|0;b=iC(b|0,z()|0,-1,-1)|0;h=(((b&m|0)!=0|((z()|0)&j|0)!=0)&1|h&255)&255;d=oC(m|0,j|0,d+-52|0)|0;b=z()|0}else{d=pC(m|0,j|0,((d|0)==52?0:52-d|0)|0)|0;b=z()|0}g=-1022-i|0;if((g|0)<53){if(g){l=pC(1,0,g+-1|0)|0;e=z()|0;m=iC(l|0,e|0,-1,-1)|0;m=(((d&m|0)!=0|(b&(z()|0)|0)!=0)&1|h&255|0)!=0;k=pC(1,0,g|0)|0;m=(d&k|0)!=0|(b&(z()|0)|0)!=0|m;d=iC((m?l:0)|0,(m?e:0)|0,d|0,b|0)|0;d=oC(d|0,z()|0,g|0)|0;b=(z()|0)&1048575}if(!((d|0)==0&(b|0)==0)){c[f>>2]=d|n;c[f+4>>2]=b|o;f=0;return f|0}}c[f>>2]=n;c[f+4>>2]=o;f=0;return f|0}}c[f>>2]=n;c[f+4>>2]=o;f=0;return f|0}case 3:{o=pC((a[d>>0]|0)==45|0,0,63)|0;e=z()|0|2146435072;c[f>>2]=o;c[f+4>>2]=e;f=0;return f|0}case 4:{switch(a[d>>0]|0){case 45:{j=0;k=-1048576;b=d+1|0;break}case 43:{j=0;k=2146435072;b=d+1|0;break}default:{j=0;k=2146435072;b=d}}do if((b+3|0)!=(e|0)){g=b+6|0;if(g>>>0>=e>>>0){f=1;return f|0}d=0;b=0;d:while(1){h=a[g>>0]|0;if(h<<24>>24!=95){i=h<<24>>24;h=i+-48|0;do if(h>>>0>=10)if((i+-97|0)>>>0>=6)if((i+-65|0)>>>0<6){h=i+-55|0;break}else{b=1;g=62;break d}else{h=i+-87|0;break}while(0);d=pC(d|0,b|0,4)|0;d=iC(d|0,z()|0,h|0,0)|0;b=z()|0;if(b>>>0>1048575|(b|0)==1048575&d>>>0>4294967295){b=1;g=62;break}}g=g+1|0;if(g>>>0>=e>>>0){g=59;break}}if((g|0)==59){if((d|0)==0&(b|0)==0)b=1;else break;return b|0}else if((g|0)==62)return b|0}else{d=0;b=524288}while(0);c[f>>2]=d|j;c[f+4>>2]=b|k;f=0;return f|0}default:U()}return 0}function wm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;j=aa;aa=aa+((1*(1-b+d|0)|0)+15&-16)|0;if((b|0)==(d|0))b=j;else{i=b;b=j;do{h=a[i>>0]|0;if(h<<24>>24!=95){a[b>>0]=h;b=b+1|0}i=i+1|0}while((i|0)!=(d|0))}a[b>>0]=0;f=+SA(j,k);if(f==-s|(f==s?1:(c[k>>2]|0)!=(b|0))){e=1;aa=l;return e|0}g[e>>3]=f;e=0;aa=l;return e|0}function xm(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+32|0;j=k;d=c>>>23&255;f=d+-127|0;e=c&8388607;if((c|0)<0){a[j>>0]=45;h=j+1|0}else h=j;do if((f|0)==128){if(!e){a[h>>0]=105;a[h+1>>0]=110;a[h+2>>0]=102;a[h+3>>0]=0;c=h+3|0;break}a[h>>0]=110;a[h+1>>0]=97;a[h+2>>0]=110;a[h+3>>0]=0;c=h+3|0;if((e|0)!=4194304){a[c>>0]=58;a[c+1>>0]=48;a[c+2>>0]=120;a[c+3>>0]=0;f=8;while(1){e=e<<4;d=f+-1|0;if(e>>>0>=268435456)break;else f=d}c=h+6|0;if(d){while(1){a[c>>0]=a[16672+(e>>>28)>>0]|0;d=d+-1|0;if(!d)break;else{c=c+1|0;e=e<<4}}c=h+(f+5)|0}}}else{g=(d|e|0)==0;a[h>>0]=48;a[h+1>>0]=120;e=h+3|0;a[h+2>>0]=g?48:49;c=c<<9;do if(c){if(!d){l=w(c|0)|0;c=c<<l+1;f=f-l|0;d=h+4|0;a[e>>0]=46;if(l>>>0>30|(c|0)==0){e=d;break}}else{a[e>>0]=46;d=h+4|0}while(1){e=d+1|0;a[d>>0]=a[16672+(c>>>28)>>0]|0;c=c<<4;if(!c)break;else d=e}}while(0);d=e+1|0;a[e>>0]=112;if(g){a[d>>0]=a[300521]|0;a[d+1>>0]=a[300522]|0;a[d+2>>0]=a[300523]|0;c=e+3|0;break}c=e+2|0;if((f|0)<0){a[d>>0]=45;d=0-f|0}else{a[d>>0]=43;d=f}if((d|0)<=999)if((d|0)<=99){if((d|0)>9)i=28}else i=26;else{a[c>>0]=49;c=e+3|0;i=26}if((i|0)==26){a[c>>0]=(((d>>>0)/100|0)>>>0)%10|0|48;c=c+1|0;i=28}if((i|0)==28){a[c>>0]=(((d>>>0)/10|0)>>>0)%10|0|48;c=c+1|0}a[c>>0]=((d|0)%10|0)+48;c=c+1|0}while(0);l=c-j|0;l=l>>>0<127?l:127;sC(b|0,j|0,l|0)|0;a[b+l>>0]=0;aa=k;return}function ym(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+48|0;m=n;e=oC(c|0,d|0,52)|0;z()|0;e=e&2047;h=e+-1023|0;f=d&1048575;if((d|0)<0){a[m>>0]=45;k=m+1|0}else k=m;g=(c|0)==0&(f|0)==0;do if((h|0)==1024){if(g){a[k>>0]=105;a[k+1>>0]=110;a[k+2>>0]=102;a[k+3>>0]=0;e=k+3|0;break}a[k>>0]=110;a[k+1>>0]=97;a[k+2>>0]=110;a[k+3>>0]=0;e=k+3|0;if(!((c|0)==0&(f|0)==524288)){a[e>>0]=58;a[e+1>>0]=48;a[e+2>>0]=120;a[e+3>>0]=0;h=16;while(1){c=pC(c|0,f|0,4)|0;f=z()|0;g=h+-1|0;if(!(f>>>0<268435456|(f|0)==268435456&c>>>0<0))break;else h=g}e=k+6|0;if(g){while(1){l=oC(c|0,f|0,60)|0;z()|0;a[e>>0]=a[16672+l>>0]|0;c=pC(c|0,f|0,4)|0;f=z()|0;g=g+-1|0;if(!g)break;else e=e+1|0}e=k+(h+5)|0}}}else{i=(e|0)==0;j=g&i;a[k>>0]=48;a[k+1>>0]=120;f=k+3|0;a[k+2>>0]=j?48:49;e=pC(c|0,d|0,12)|0;c=z()|0;do if((e|0)==0&(c|0)==0)g=h;else{if(i){i=rC(e|0,c|0,0)|0;g=iC(i|0,z()|0,1,0)|0;z()|0;g=pC(e|0,c|0,g|0)|0;c=z()|0;h=h-i|0;e=k+4|0;a[f>>0]=46;if(i>>>0>62|(g|0)==0&(c|0)==0){g=h;f=e;break}}else{a[f>>0]=46;g=e;e=k+4|0}while(1){k=oC(g|0,c|0,60)|0;z()|0;f=e+1|0;a[e>>0]=a[16672+k>>0]|0;g=pC(g|0,c|0,4)|0;c=z()|0;if((g|0)==0&(c|0)==0){g=h;break}else e=f}}while(0);c=f+1|0;a[f>>0]=112;if(j){a[c>>0]=a[300521]|0;a[c+1>>0]=a[300522]|0;a[c+2>>0]=a[300523]|0;e=f+3|0;break}e=f+2|0;if((g|0)<0){a[c>>0]=45;c=0-g|0}else{a[c>>0]=43;c=g}if((c|0)<=999)if((c|0)<=99){if((c|0)>9)l=28}else l=26;else{a[e>>0]=49;e=f+3|0;l=26}if((l|0)==26){a[e>>0]=(((c>>>0)/100|0)>>>0)%10|0|48;e=e+1|0;l=28}if((l|0)==28){a[e>>0]=(((c>>>0)/10|0)>>>0)%10|0|48;e=e+1|0}a[e>>0]=((c|0)%10|0)+48;e=e+1|0}while(0);l=e-m|0;l=l>>>0<127?l:127;sC(b|0,m|0,l|0)|0;a[b+l>>0]=0;aa=n;return}function zm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;p=aa;aa=aa+80|0;m=p+72|0;o=p+32|0;l=p;i=d+12|0;j=d+4|0;k=d+8|0;e=c[i>>2]|0;f=c[j>>2]|0;g=c[d>>2]|0;h=c[k>>2]|0;n=0;do{r=e;e=mC(e|0,0,10,0)|0;q=z()|0;t=hC(e|0,q|0,-10,-1)|0;r=iC(t|0,z()|0,r|0,0)|0;z()|0;c[i>>2]=e;t=h;h=mC(h|0,r|0,10,0)|0;r=z()|0;w=hC(h|0,r|0,-10,-1)|0;t=iC(w|0,z()|0,t|0,0)|0;z()|0;c[k>>2]=h;w=f;f=mC(f|0,t|0,10,0)|0;t=z()|0;v=hC(f|0,t|0,-10,-1)|0;w=iC(v|0,z()|0,w|0,0)|0;z()|0;c[j>>2]=f;v=g;g=mC(g|0,w|0,10,0)|0;s=z()|0;u=hC(g|0,s|0,-10,-1)|0;w=iC(u|0,z()|0,v|0,w|0)|0;v=z()|0;c[d>>2]=g;u=m;c[u>>2]=w;c[u+4>>2]=v;Sz(l,21,312369,m)|0;u=Uz(l)|0;sC(o+n|0,l|0,u|0)|0;n=u+n|0}while((f|g|h|e|0)!=0);e=n>>>0<128;h=e?n:127;e=e?0:n+-127|0;g=o+e|0;e=o+h+e|0;if((e|0)==(g|0)){w=b+h|0;a[w>>0]=0;aa=p;return}f=b;while(1){e=e+-1|0;a[f>>0]=a[e>>0]|0;if((e|0)==(g|0))break;else f=f+1|0}w=b+h|0;a[w>>0]=0;aa=p;return}function Am(b,d){b=b|0;d=d|0;var e=0;if(d>>>0<422){d=384+(d*36|0)|0;e=b+36|0;do{c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}while((b|0)<(e|0));return}else{e=0-d|0;c[b>>2]=c[3894];c[b+4>>2]=c[3895];c[b+8>>2]=c[3896];c[b+12>>2]=c[3897];c[b+16>>2]=c[3898];c[b+20>>2]=c[3899];a[b+24>>0]=e>>>8;d=b+25|0;a[d>>0]=a[15601]|0;a[d+1>>0]=a[15602]|0;a[d+2>>0]=a[15603]|0;c[b+28>>2]=e&255;c[b+32>>2]=e&65535;return}}function Bm(a,b){a=a|0;b=b|0;return ((b|0)==-1?1:(c[(a>>>0<422?384+(a*36|0)+20|0:15596)>>2]|0)==(b|0))|0}function Cm(a,b){a=a|0;b=b|0;if((b|0)!=-1){a=b;return a|0}a=c[a>>2]|0;a=c[(a>>>0<422?384+(a*36|0)+20|0:15596)>>2]|0;return a|0}function Dm(b,c){b=b|0;c=c|0;switch(b|0){case 10:case 9:case 8:case 7:case 6:{c=(a[c>>0]|0)!=0;break}case 18:case 19:{c=(a[c+7>>0]|0)!=0;break}case 196:case 195:case 194:case 193:case 192:case 191:case 190:case 189:{c=(a[c+2>>0]|0)!=0;break}case 183:case 182:case 181:case 180:case 179:{c=(a[c+3>>0]|0)!=0;break}case 421:case 420:case 419:case 418:case 417:case 416:case 415:case 414:case 413:case 412:case 411:case 410:case 409:case 408:case 407:case 406:case 405:case 404:case 403:case 402:case 401:case 400:case 399:case 398:case 397:case 396:case 395:case 394:case 393:case 392:case 391:case 390:case 389:case 388:case 387:case 386:case 385:case 384:case 383:case 382:case 381:case 380:case 379:case 378:case 377:case 376:case 375:case 374:case 373:case 372:case 371:case 370:case 369:case 368:case 367:case 366:case 365:case 364:case 363:case 362:case 361:case 360:case 359:case 358:case 357:case 356:{c=(a[c+5>>0]|0)!=0;break}case 355:case 354:case 353:case 352:case 351:case 350:case 345:case 344:case 343:case 342:case 349:case 348:case 347:case 346:case 335:case 326:case 338:case 329:case 339:case 330:case 337:case 328:case 336:case 327:case 341:case 332:case 340:case 331:case 333:case 324:case 334:case 325:case 275:case 269:case 263:case 262:case 253:case 252:case 243:case 242:case 273:case 267:case 259:case 258:case 249:case 248:case 239:case 238:case 274:case 268:case 261:case 260:case 251:case 250:case 241:case 240:case 272:case 266:case 257:case 256:case 247:case 246:case 237:case 236:case 271:case 265:case 255:case 245:case 235:case 270:case 264:case 254:case 244:case 234:case 318:case 309:case 296:case 283:case 317:case 308:case 295:case 282:case 280:case 276:case 279:case 278:case 277:case 321:case 320:case 312:case 311:case 299:case 298:case 286:case 285:case 319:case 310:case 297:case 284:case 305:case 304:case 292:case 291:case 302:case 301:case 289:case 288:case 316:case 307:case 294:case 281:case 315:case 306:case 293:case 323:case 314:case 303:case 290:case 322:case 313:case 300:case 287:case 233:case 230:case 227:case 224:case 221:case 217:case 232:case 229:case 226:case 223:case 220:case 219:case 216:case 215:case 231:case 228:case 225:case 222:case 218:case 214:case 212:case 211:case 213:{c=(a[c+4>>0]|0)!=0;break}case 203:case 202:case 201:case 200:case 199:case 198:case 197:{c=(a[c+8>>0]|0)!=0;break}case 209:case 208:case 207:case 206:case 205:case 204:{c=(a[c+9>>0]|0)!=0;break}case 188:case 187:case 186:case 185:case 184:{c=0;break}default:c=1}return c|0}function Em(a){a=a|0;var b=0;switch(a|0){case 217:case 216:case 215:{b=16;break}case 221:case 220:case 219:{b=8;break}case 224:case 223:case 230:case 229:{b=4;break}case 227:case 226:case 233:case 232:{b=2;break}default:U()}return b|0}function Fm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=aa;aa=aa+16|0;j=k;c[b>>2]=0;h=b+4|0;c[h>>2]=0;i=b+8|0;c[i>>2]=0;g=d>>>0<422;if(g)e=a[384+(d*36|0)+24>>0]|0;else e=(0-d|0)>>>8&255;if(!(e<<24>>24)){if(g)e=c[384+(d*36|0)+28>>2]|0;else e=0-d&255;d=_A(1)|0;j=d+1|0;a[d>>0]=e;c[b>>2]=d;c[h>>2]=j;c[i>>2]=j;aa=k;return}if(g)e=a[384+(d*36|0)+24>>0]|0;else e=(0-d|0)>>>8&255;m=_A(1)|0;f=m+1|0;l=f;a[m>>0]=e;c[b>>2]=m;c[h>>2]=l;c[i>>2]=l;if(g)e=c[384+(d*36|0)+28>>2]|0;else e=0-d&255;Gm(b,f,j,j+(Xl(j,j+5|0,e)|0)|0);aa=k;return}function Gm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=e;k=c[b>>2]|0;l=k;o=d;h=o-l|0;j=f;m=j-q|0;if((m|0)<=0)return;p=b+8|0;i=c[p>>2]|0;r=b+4|0;n=c[r>>2]|0;g=n;if((m|0)<=(i-g|0)){i=g-o|0;do if((m|0)>(i|0)){h=e+i|0;g=j-h|0;if((g|0)>0){sC(n|0,h|0,g|0)|0;g=(c[r>>2]|0)+g|0;c[r>>2]=g}else g=n;if((i|0)>0){j=g;f=h;break}else return}else j=n;while(0);i=g-(d+m)|0;g=d+i|0;if(g>>>0<n>>>0){h=j;do{a[h>>0]=a[g>>0]|0;g=g+1|0;h=(c[r>>2]|0)+1|0;c[r>>2]=h}while((g|0)!=(n|0))}if(i|0)tC(j+(0-i)|0,d|0,i|0)|0;g=f-q|0;if(!g)return;tC(d|0,e|0,g|0)|0;return}g=g-l+m|0;if((g|0)<0)HB();m=i-l|0;n=m<<1;g=m>>>0<1073741823?(n>>>0<g>>>0?g:n):2147483647;if(!g)j=0;else j=_A(g)|0;m=j+h|0;n=j+g|0;if((e|0)==(f|0)){f=k;g=m}else{i=f+(o-q-l)|0;h=m;g=e;while(1){a[h>>0]=a[g>>0]|0;g=g+1|0;if((g|0)==(f|0))break;else h=h+1|0}h=c[b>>2]|0;f=h;g=j+i|0;h=o-h|0}i=m+(0-h)|0;if((h|0)>0)sC(i|0,f|0,h|0)|0;h=(c[r>>2]|0)-o|0;if((h|0)>0){sC(g|0,d|0,h|0)|0;g=g+h|0}c[b>>2]=i;c[r>>2]=g;c[p>>2]=n;if(!f)return;$A(f);return}function Hm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+80|0;h=i;c[h>>2]=289392;c[h+4>>2]=d;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;Jj(h+20|0,h);g=h+60|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;g=Im(h,b)|0;c[h>>2]=289392;b=h+60|0;e=c[b>>2]|0;if(e|0){f=h+64|0;d=c[f>>2]|0;if((d|0)==(e|0))d=e;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(e|0));d=c[b>>2]|0}c[f>>2]=e;$A(d)}d=c[h+48>>2]|0;if(d|0){c[h+52>>2]=d;$A(d)}d=c[h+36>>2]|0;if(d|0){c[h+40>>2]=d;$A(d)}d=c[h+24>>2]|0;if(!d){aa=i;return g|0}c[h+28>>2]=d;$A(d);aa=i;return g|0}function Im(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=aa;aa=aa+112|0;D=E+104|0;B=E+96|0;A=E+88|0;z=E+80|0;x=E+72|0;t=E+64|0;s=E+56|0;r=E+48|0;v=E+40|0;u=E+32|0;q=E+24|0;o=E;C=b+12|0;c[C>>2]=d;n=b;e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=331281;c[e>>2]=o;ay(d+216|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=330254;c[e>>2]=o;ay(d+236|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=301885;c[e>>2]=o;ay(d+276|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=330351;c[e>>2]=o;ay(d+296|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=330283;c[e>>2]=o;ay(d+316|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=o+16|0;c[o>>2]=289656;c[o+4>>2]=n;c[o+8>>2]=330237;c[e>>2]=o;ay(d+196|0,o);e=c[e>>2]|0;if((o|0)!=(e|0)){if(e|0)ma[c[(c[e>>2]|0)+20>>2]&255](e)}else ma[c[(c[e>>2]|0)+16>>2]&255](e);e=c[d+76>>2]|0;j=c[d+80>>2]|0;if((e|0)!=(j|0)){l=b+16|0;k=o+16|0;h=o+4|0;i=o+8|0;m=b+20|0;do{g=c[e>>2]|0;c[l>>2]=g;do if(a[g+12>>0]|0?(p=g+16|0,(c[g+36>>2]|0)==1):0){f=iy((c[C>>2]|0)+276|0,p)|0;if((f|0)!=-1){Kl(p,f);break}f=g+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[q>>2]=301885;c[q+4>>2]=f;Jm(b,p,300571,q)}while(0);c[o>>2]=289700;c[h>>2]=g;c[i>>2]=n;c[k>>2]=o;ay(g+88|0,o);f=c[k>>2]|0;if((o|0)!=(f|0)){if(f|0)ma[c[(c[f>>2]|0)+20>>2]&255](f)}else ma[c[(c[f>>2]|0)+16>>2]&255](f);Rj(m,g)|0;c[l>>2]=0;e=e+4|0}while((e|0)!=(j|0))}e=c[d+112>>2]|0;i=c[d+116>>2]|0;a:do if((e|0)!=(i|0))while(1){h=c[e>>2]|0;b:do switch(c[h+12>>2]|0){case 0:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+216|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[u>>2]=331281;c[u+4>>2]=f;Jm(b,g,300571,u)}break}case 1:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+296|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[v>>2]=330351;c[v+4>>2]=f;Jm(b,g,300571,v)}break}case 2:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+316|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[r>>2]=330283;c[r+4>>2]=f;Jm(b,g,300571,r)}break}case 3:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+236|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[s>>2]=330254;c[s+4>>2]=f;Jm(b,g,300571,s)}break}case 4:{g=h+16|0;if((c[h+36>>2]|0)==1){f=iy((c[C>>2]|0)+196|0,g)|0;if((f|0)!=-1){Kl(g,f);break b}f=h+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[t>>2]=330237;c[t+4>>2]=f;Jm(b,g,300571,t)}break}default:{}}while(0);e=e+4|0;if((e|0)==(i|0))break a}while(0);e=c[d+88>>2]|0;f=c[d+92>>2]|0;if((e|0)!=(f|0)){g=b+20|0;do{Qj(g,(c[e>>2]|0)+20|0)|0;e=e+4|0}while((e|0)!=(f|0))}e=c[d+64>>2]|0;h=c[d+68>>2]|0;if((e|0)!=(h|0))do{f=c[e>>2]|0;do if(a[f+12>>0]|0?(w=f+16|0,(c[f+36>>2]|0)==1):0){g=iy((c[C>>2]|0)+276|0,w)|0;if((g|0)!=-1){Kl(w,g);break}f=f+40|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[x>>2]=301885;c[x+4>>2]=f;Jm(b,w,300571,x)}while(0);e=e+4|0}while((e|0)!=(h|0));e=c[d+148>>2]|0;i=c[d+152>>2]|0;if((e|0)!=(i|0)){j=b+20|0;do{h=c[e>>2]|0;g=h+12|0;do if((c[h+32>>2]|0)==1){f=iy((c[C>>2]|0)+296|0,g)|0;if((f|0)!=-1){Kl(g,f);break}f=h+36|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[z>>2]=330351;c[z+4>>2]=f;Jm(b,g,300571,z)}while(0);Qj(j,h+56|0)|0;f=c[h+68>>2]|0;h=c[h+72>>2]|0;if((f|0)!=(h|0))do{do if((c[f>>2]|0)==1?(y=f+4|0,(c[f+24>>2]|0)==1):0){g=iy((c[C>>2]|0)+216|0,y)|0;if((g|0)!=-1){Kl(y,g);break}g=f+28|0;if((a[g+11>>0]|0)<0)g=c[g>>2]|0;c[A>>2]=331281;c[A+4>>2]=g;Jm(b,y,300571,A)}while(0);f=f+40|0}while((f|0)!=(h|0));e=e+4|0}while((e|0)!=(i|0))}e=c[d+172>>2]|0;i=c[d+176>>2]|0;if((e|0)!=(i|0)){j=b+20|0;do{g=c[e>>2]|0;h=g+12|0;do if((c[g+32>>2]|0)==1){f=iy((c[C>>2]|0)+316|0,h)|0;if((f|0)!=-1){Kl(h,f);break}f=g+36|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[B>>2]=330283;c[B+4>>2]=f;Jm(b,h,300571,B)}while(0);Qj(j,g+52|0)|0;e=e+4|0}while((e|0)!=(i|0))}e=c[d+184>>2]|0;h=c[d+188>>2]|0;if((e|0)==(h|0)){c[C>>2]=0;D=b+72|0;D=c[D>>2]|0;aa=E;return D|0}do{g=c[e>>2]|0;do if((c[g+20>>2]|0)==1){f=iy((c[C>>2]|0)+216|0,g)|0;if((f|0)!=-1){Kl(g,f);break}f=g+24|0;if((a[f+11>>0]|0)<0)f=c[f>>2]|0;c[D>>2]=331281;c[D+4>>2]=f;Jm(b,g,300571,D)}while(0);e=e+4|0}while((e|0)!=(h|0));c[C>>2]=0;D=b+72|0;D=c[D>>2]|0;aa=E;return D|0}function Jm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+192|0;h=k+168|0;l=k+144|0;f=k+128|0;g=k;i=k+164|0;j=k+160|0;c[a+72>>2]=1;c[l>>2]=e;c[f>>2]=c[l>>2];c[i>>2]=g;e=(Vz(g,128,d,l)|0)+1|0;if(e>>>0>128){g=aa;aa=aa+((1*e|0)+15&-16)|0;c[i>>2]=g;Vz(g,e,d,f)|0}e=c[a+4>>2]|0;c[j>>2]=1;d=e+4|0;f=c[d>>2]|0;if(f>>>0<(c[e+8>>2]|0)>>>0){c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[h+16>>2]=c[b+16>>2];l=Uz(g)|0;c[f>>2]=1;j=f+4|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];Wn(f+24|0,g,l);c[d>>2]=(c[d>>2]|0)+36;aa=k;return}else{Tm(e,j,b,i);aa=k;return}}function Km(a){a=a|0;return}function Lm(a){a=a|0;$A(a);return}function Mm(a){a=a|0;var b=0,d=0,e=0;b=_A(12)|0;c[b>>2]=289700;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function Nm(a,b){a=a|0;b=b|0;var d=0,e=0;c[b>>2]=289700;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return}function Om(a){a=a|0;return}function Pm(a){a=a|0;$A(a);return}function Qm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=aa;aa=aa+16|0;g=f;i=c[b+4>>2]|0;h=c[b+8>>2]|0;b=(c[d+20>>2]|0)>(c[e+20>>2]|0)?d+12|0:e+12|0;e=(a[d+11>>0]|0)<0?c[d>>2]|0:d;c[g>>2]=(c[d+32>>2]|0)>>>0<(c[i+56>>2]|0)-(c[i+52>>2]|0)>>2>>>0?300660:330275;c[g+4>>2]=e;Jm(h,b,300670,g);aa=f;return}function Rm(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==300598?a+4|0:0)|0}function Sm(a){a=a|0;return 286008}function Tm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+32|0;i=o;m=b+4|0;g=c[b>>2]|0;k=((c[m>>2]|0)-g|0)/36|0;h=k+1|0;if(h>>>0>119304647)HB();n=b+8|0;l=((c[n>>2]|0)-g|0)/36|0;g=l<<1;g=l>>>0<59652323?(g>>>0<h>>>0?h:g):119304647;do if(g)if(g>>>0>119304647)U();else{j=_A(g*36|0)|0;break}else j=0;while(0);h=j+(k*36|0)|0;l=j+(g*36|0)|0;g=c[d>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];d=c[f>>2]|0;f=Uz(d)|0;c[h>>2]=g;g=j+(k*36|0)+4|0;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];Wn(j+(k*36|0)+24|0,d,f);f=h+36|0;d=c[b>>2]|0;g=c[m>>2]|0;if((g|0)==(d|0)){e=d;g=d}else{do{j=h;h=h+-36|0;k=g;g=g+-36|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];j=j+-12|0;k=k+-12|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0}while((g|0)!=(d|0));e=c[b>>2]|0;g=c[m>>2]|0}c[b>>2]=h;c[m>>2]=f;c[n>>2]=l;d=e;if((g|0)!=(d|0))do{h=g+-12|0;g=g+-36|0;if((a[h+11>>0]|0)<0)$A(c[h>>2]|0)}while((g|0)!=(d|0));if(!e){aa=o;return}$A(e);aa=o;return}function Um(a){a=a|0;$A(a);return}function Vm(a){a=a|0;var b=0,d=0,e=0;b=_A(12)|0;c[b>>2]=289656;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function Wm(a,b){a=a|0;b=b|0;var d=0,e=0;c[b>>2]=289656;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return}function Xm(a){a=a|0;return}function Ym(a){a=a|0;$A(a);return}function Zm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=aa;aa=aa+16|0;g=f;h=c[b+4>>2]|0;e=(c[d+20>>2]|0)>(c[e+20>>2]|0)?d+12|0:e+12|0;d=(a[d+11>>0]|0)<0?c[d>>2]|0:d;c[g>>2]=c[b+8>>2];c[g+4>>2]=d;Jm(h,e,300670,g);aa=f;return}function _m(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==301010?a+4|0:0)|0}function $m(a){a=a|0;return 286040}function an(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=289392;e=b+60|0;f=c[e>>2]|0;if(f|0){g=b+64|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}d=c[b+48>>2]|0;if(d|0){c[b+52>>2]=d;$A(d)}d=c[b+36>>2]|0;if(d|0){c[b+40>>2]=d;$A(d)}d=c[b+24>>2]|0;if(!d)return;c[b+28>>2]=d;$A(d);return}function bn(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=289392;e=b+60|0;f=c[e>>2]|0;if(f|0){g=b+64|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}d=c[b+48>>2]|0;if(d|0){c[b+52>>2]=d;$A(d)}d=c[b+36>>2]|0;if(d|0){c[b+40>>2]=d;$A(d)}d=c[b+24>>2]|0;if(!d){$A(b);return}c[b+28>>2]=d;$A(d);$A(b);return}function cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=d+36|0;f=b+64|0;e=c[f>>2]|0;if((e|0)==(c[b+68>>2]|0))Lc(b+60|0,g);else{cB(e,g);c[f>>2]=(c[f>>2]|0)+12}if(!(a[d+48>>0]|0)){aa=i;return 0}f=d+52|0;if((c[d+72>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+76|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=301885;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function dn(b,d){b=b|0;d=d|0;d=b+64|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function en(a,b){a=a|0;b=b|0;Hn(a,b+36|0);return 0}function fn(a,b){a=a|0;b=b|0;Hn(a,b+36|0);return 0}function gn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;Hn(b,d+36|0);f=d+72|0;if((c[d+92>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+196|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+96|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330237;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function hn(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[b+36>>2]|0;e=c[b+40>>2]|0;if((d|0)!=(e|0))do{Hn(a,d);d=d+36|0}while((d|0)!=(e|0));Hn(a,b+48|0);return 0}function jn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+216|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=331281;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function kn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i+8|0;g=i;do if(a[d+36>>0]|0?(f=d+40|0,(c[d+60>>2]|0)==1):0){e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);break}e=d+64|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301885;c[g+4>>2]=e;Jm(b,f,300571,g)}while(0);f=d+100|0;if((c[d+120>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+124|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=330351;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function ln(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+236|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330254;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function mn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+236|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330254;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function nn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=d+36|0;f=b+64|0;e=c[f>>2]|0;if((e|0)==(c[b+68>>2]|0))Lc(b+60|0,g);else{cB(e,g);c[f>>2]=(c[f>>2]|0)+12}if(!(a[d+48>>0]|0)){aa=i;return 0}f=d+52|0;if((c[d+72>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+76|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=301885;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function on(b,d){b=b|0;d=d|0;d=b+64|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=c[b+16>>2]|0;if(!e){aa=h;return 0}e=Qk(e,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;Jm(b,f,303747,g);aa=h;return 0}function qn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=c[b+16>>2]|0;if(!e){aa=h;return 0}e=Qk(e,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;Jm(b,f,303747,g);aa=h;return 0}function rn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=c[b+16>>2]|0;if(!e){aa=h;return 0}e=Qk(e,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=e;Jm(b,f,303747,g);aa=h;return 0}function sn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=d+36|0;f=b+64|0;e=c[f>>2]|0;if((e|0)==(c[b+68>>2]|0))Lc(b+60|0,g);else{cB(e,g);c[f>>2]=(c[f>>2]|0)+12}if(!(a[d+48>>0]|0)){aa=i;return 0}f=d+52|0;if((c[d+72>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+76|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=301885;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function tn(b,d){b=b|0;d=d|0;d=b+64|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function un(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+336|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301330;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function vn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+336|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301330;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function wn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+356|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301317;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function xn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+356|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301317;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function yn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330351;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function zn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330351;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function An(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330351;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function Bn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330351;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function Cn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+216|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=331281;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function Dn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i+8|0;g=i;do if(a[d+36>>0]|0?(f=d+40|0,(c[d+60>>2]|0)==1):0){e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);break}e=d+64|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=301885;c[g+4>>2]=e;Jm(b,f,300571,g)}while(0);f=d+100|0;if((c[d+120>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+296|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+124|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=330351;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function En(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;g=d+36|0;f=b+64|0;e=c[f>>2]|0;if((e|0)==(c[b+68>>2]|0))Lc(b+60|0,g);else{cB(e,g);c[f>>2]=(c[f>>2]|0)+12}if(!(a[d+48>>0]|0)){aa=i;return 0}f=d+52|0;if((c[d+72>>2]|0)!=1){aa=i;return 0}e=iy((c[b+12>>2]|0)+276|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=i;return 0}e=d+76|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[h>>2]=301885;c[h+4>>2]=e;Jm(b,f,300571,h);aa=i;return 0}function Fn(b,d){b=b|0;d=d|0;d=b+64|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function Gn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=d+36|0;if((c[d+56>>2]|0)!=1){aa=h;return 0}e=iy((c[b+12>>2]|0)+196|0,f)|0;if((e|0)!=-1){Kl(f,e);aa=h;return 0}e=d+60|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[g>>2]=330237;c[g+4>>2]=e;Jm(b,f,300571,g);aa=h;return 0}function Hn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+16|0;r=s;if((c[d+20>>2]|0)!=1){aa=s;return}l=c[b+60>>2]|0;o=(c[b+64>>2]|0)-l|0;q=(o|0)/12|0;e=q+-1|0;p=d+24|0;m=a[p+11>>0]|0;a:do if((o|0)>0){k=m<<24>>24<0;o=k?c[d+28>>2]|0:m&255;n=(o|0)==0;b:do if(k)while(1){g=l+(e*12|0)|0;h=a[g+11>>0]|0;k=h<<24>>24<0;h=h&255;do if(((k?c[l+(e*12|0)+4>>2]|0:h)|0)==(o|0)){i=c[g>>2]|0;j=k?i:g;f=c[p>>2]|0;i=i&255;if(k){if(n)break b;if(!(Tz(j,f,o)|0))break b;else break}if(n)break b;if((a[f>>0]|0)==i<<24>>24)do{h=h+-1|0;g=g+1|0;if(!h)break b;f=f+1|0}while((a[g>>0]|0)==(a[f>>0]|0))}while(0);e=e+-1|0;if((e|0)<=-1)break a}else while(1){f=l+(e*12|0)|0;h=a[f+11>>0]|0;j=h<<24>>24<0;h=h&255;do if(((j?c[l+(e*12|0)+4>>2]|0:h)|0)==(o|0)){g=c[f>>2]|0;i=j?g:f;g=g&255;if(j){if(n)break b;if(!(Tz(i,p,o)|0))break b;else break}if(n)break b;if((a[p>>0]|0)==g<<24>>24){g=p;do{h=h+-1|0;f=f+1|0;if(!h)break b;g=g+1|0}while((a[f>>0]|0)==(a[g>>0]|0))}}while(0);e=e+-1|0;if((e|0)<=-1)break a}while(0);Kl(d,q+~e|0);aa=s;return}while(0);if(m<<24>>24<0)e=c[d+24>>2]|0;else e=p;c[r>>2]=e;Jm(b,d,301343,r);aa=s;return}function In(a){a=a|0;var b=0;c[a>>2]=289744;b=a+16|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;b=c[a>>2]|0;if(b|0){c[a+4>>2]=b;$A(b)}$A(a);return}function Jn(a){a=a|0;var b=0,d=0;c[a>>2]=289744;d=a+16|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}d=c[b>>2]|0;if(d|0){c[b+4>>2]=d;$A(d)}$A(b);$A(a);return}function Kn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!f)return 0;n=f+d|0;p=b+16|0;i=c[p>>2]|0;o=i+4|0;g=c[o>>2]|0;j=c[i>>2]|0;m=g-j|0;a:do if(n>>>0>m>>>0){k=j;b=n-m|0;l=i+8|0;h=c[l>>2]|0;if((h-g|0)>>>0>=b>>>0)while(1){a[g>>0]=0;g=(c[o>>2]|0)+1|0;c[o>>2]=g;b=b+-1|0;if(!b)break a}if((n|0)<0)HB();g=h-j|0;h=g<<1;h=g>>>0<1073741823?(h>>>0<n>>>0?n:h):2147483647;if(!h)g=0;else g=_A(h)|0;uC(g+m|0,0,b|0)|0;if((m|0)>0)sC(g|0,k|0,m|0)|0;c[i>>2]=g;c[o>>2]=g+n;c[l>>2]=g+h;if(j|0)$A(k)}while(0);sC((c[c[p>>2]>>2]|0)+d|0,e|0,f|0)|0;return 0}function Ln(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!f)return 0;p=f+e|0;n=f+d|0;n=p>>>0>n>>>0?p:n;p=b+16|0;i=c[p>>2]|0;o=i+4|0;g=c[o>>2]|0;j=c[i>>2]|0;m=g-j|0;a:do if(n>>>0>m>>>0){k=j;b=n-m|0;l=i+8|0;h=c[l>>2]|0;if((h-g|0)>>>0>=b>>>0)while(1){a[g>>0]=0;g=(c[o>>2]|0)+1|0;c[o>>2]=g;b=b+-1|0;if(!b)break a}if((n|0)<0)HB();g=h-j|0;h=g<<1;h=g>>>0<1073741823?(h>>>0<n>>>0?n:h):2147483647;if(!h)g=0;else g=_A(h)|0;uC(g+m|0,0,b|0)|0;if((m|0)>0)sC(g|0,k|0,m|0)|0;c[i>>2]=g;c[o>>2]=g+n;c[l>>2]=g+h;if(j|0)$A(k)}while(0);p=c[c[p>>2]>>2]|0;tC(p+d|0,p+e|0,f|0)|0;return 0}function Mn(a,b){a=a|0;b=b|0;a=a+4|0;c[a>>2]=(c[a>>2]|0)+b;return}function Nn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=a+8|0;if((c[g>>2]|0)==1)return;h=c[a+12>>2]|0;if(h|0)On(h,d,e,b,0,f);a=ha[c[(c[a>>2]|0)+8>>2]&127](a,b,d,e)|0;c[g>>2]=a;return}function On(b,e,f,g,h,i){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;x=aa;aa=aa+32|0;w=x+24|0;v=x+16|0;u=x+8|0;t=x;s=x+28|0;r=e+f|0;if((f|0)<=0){aa=x;return}q=g-e|0;p=b+4|0;n=b+8|0;o=b+12|0;l=(h|0)==1;m=(i|0)!=0;do{c[t>>2]=q+e;Pn(b,301446,t);k=0;do{g=e+k|0;if(g>>>0<r>>>0){c[u>>2]=d[g>>0];Pn(b,301454,u)}else{a[s>>0]=32;f=c[p>>2]|0;if((c[n>>2]|0)==1){g=f;f=1}else{g=c[o>>2]|0;if(g|0)On(g,s,1,f,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,f,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}g=g+1|0;c[p>>2]=g;a[s>>0]=32;if((f|0)!=1){f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);g=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=g;g=c[p>>2]|0}c[p>>2]=g+1}j=k|1;k=k+2|0;g=e+j|0;if(g>>>0<r>>>0){c[w>>2]=d[g>>0];Pn(b,301454,w);g=c[n>>2]|0;h=c[p>>2]|0}else{a[s>>0]=32;g=c[p>>2]|0;if((c[n>>2]|0)==1)f=1;else{f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}h=g+1|0;c[p>>2]=h;a[s>>0]=32;if((f|0)==1){g=h;f=1}else{g=c[o>>2]|0;if(g|0)On(g,s,1,h,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,h,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}h=g+1|0;c[p>>2]=h;g=f}a[s>>0]=32;if((g|0)==1){f=1;g=h}else{g=c[o>>2]|0;if(g|0)On(g,s,1,h,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,h,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}g=g+1|0;c[p>>2]=g}while(j>>>0<15);h=e+16|0;if(l){a[s>>0]=32;if((f|0)==1)f=1;else{f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);f=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=f;g=c[p>>2]|0}g=g+1|0;c[p>>2]=g;if(e>>>0<r>>>0){h=f;j=0;do{k=a[e>>0]|0;y=(CA(k&255)|0)==0;a[s>>0]=y?46:k;if((h|0)==1)h=1;else{f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);h=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=h;g=c[p>>2]|0;f=h}g=g+1|0;c[p>>2]=g;j=j+1|0;e=e+1|0}while(e>>>0<r>>>0&j>>>0<16)}}else e=h;if(m&e>>>0>=r>>>0){c[v>>2]=i;Pn(b,301459,v);f=c[n>>2]|0;g=c[p>>2]|0}a[s>>0]=10;if((f|0)!=1){f=c[o>>2]|0;if(f|0)On(f,s,1,g,0,0);g=ha[c[(c[b>>2]|0)+8>>2]&127](b,g,s,1)|0;c[n>>2]=g;g=c[p>>2]|0}c[p>>2]=g+1}while(e>>>0<r>>>0);aa=x;return}function Pn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+160|0;e=i+144|0;g=i+128|0;f=i;c[e>>2]=d;c[g>>2]=c[e>>2];e=Vz(f,128,b,e)|0;d=e+1|0;if(d>>>0>128){f=aa;aa=aa+((1*d|0)+15&-16)|0;h=f;g=Vz(f,d,b,g)|0}else{h=f;g=e}b=a+4|0;d=c[b>>2]|0;e=a+8|0;if((c[e>>2]|0)==1){a=d;a=a+g|0;c[b>>2]=a;aa=i;return}f=c[a+12>>2]|0;if(f|0)On(f,h,g,d,0,0);a=ha[c[(c[a>>2]|0)+8>>2]&127](a,d,h,g)|0;c[e>>2]=a;a=c[b>>2]|0;a=a+g|0;c[b>>2]=a;aa=i;return}function Qn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=a+4|0;g=c[j>>2]|0;h=a+8|0;if((c[h>>2]|0)==1){a=g;a=a+d|0;c[j>>2]=a;return}i=c[a+12>>2]|0;if(i|0)On(i,b,d,g,f,e);a=ha[c[(c[a>>2]|0)+8>>2]&127](a,g,b,d)|0;c[h>>2]=a;a=c[j>>2]|0;a=a+d|0;c[j>>2]=a;return}function Rn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;f=a+8|0;if((c[f>>2]|0)==1){aa=i;return}g=c[a+12>>2]|0;if(g|0){c[h>>2]=d;c[h+4>>2]=e+d;c[h+8>>2]=b;c[h+12>>2]=e+b;Pn(g,301466,h)}h=ha[c[(c[a>>2]|0)+12>>2]&127](a,b,d,e)|0;c[f>>2]=h;aa=i;return}function Sn(a,b){a=a|0;b=b|0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=b;c[a>>2]=289744;b=_A(12)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[a+16>>2]=b;return}function Tn(a,b){a=a|0;b=b|0;var d=0;d=b+16|0;b=c[d>>2]|0;c[d>>2]=0;c[a>>2]=b;return}function Un(a){a=a|0;c[a>>2]=(c[a>>2]|0)+1;a=a+4|0;c[a>>2]=(c[a>>2]|0)+-1;return}function Vn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(e>>>0>4294967279)aB();if(e>>>0<11){a[b+11>>0]=e;if(!e){d=b;e=d+e|0;a[e>>0]=0;return}}else{g=e+16&-16;f=_A(g)|0;c[b>>2]=f;c[b+8>>2]=g|-2147483648;c[b+4>>2]=e;b=f}sC(b|0,d|0,e|0)|0;g=b;g=g+e|0;a[g>>0]=0;return}function Wn(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(e>>>0>4294967279)aB();if(e>>>0<11){a[b+11>>0]=e;if(!e){d=b;e=d+e|0;a[e>>0]=0;return}}else{g=e+16&-16;f=_A(g)|0;c[b>>2]=f;c[b+8>>2]=g|-2147483648;c[b+4>>2]=e;b=f}sC(b|0,d|0,e|0)|0;g=b;g=g+e|0;a[g>>0]=0;return}function Xn(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;d=d-e|0;c[a>>2]=b+e;c[a+4>>2]=d>>>0<f>>>0?d:f;return}function Yn(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=d>>>0<b>>>0?d:b;if(e|0?(f=Tz(a,c,e)|0,f|0):0)return f|0;return ((b|0)==(d|0)?0:b>>>0<d>>>0?-1:1)|0}function Zn(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;c=c>>>0<5?c:5;g=b;a:do if((c|0)<5)c=g;else{d=c;c=b+c|0;while(1){e=d+-1|0;f=b+e|0;if((a[f>>0]|0)==99){d=b+d|0;if((((a[d+-2>>0]|0)==111?(h=d+-1|0,(a[h+-2>>0]|0)==108):0)?(i=h+-1|0,(a[i+-2>>0]|0)==101):0)?(a[i+-1+-2>>0]|0)==114:0)break a;if((e|0)==4){c=g;break a}}else if((e|0)==4){c=g;break a}d=e;c=f}}while(0);return ((c|0)==(b|0)?-1:c-(g+5)|0)|0}function _n(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;f=b;a:do if(!c)c=f;else{c=b+c|0;while(1){e=c+-1|0;if((a[e>>0]|0)==d<<24>>24)break;if((e|0)==(b|0)){c=f;break a}else c=e}}while(0);return ((c|0)==(b|0)?-1:c+~f|0)|0}function $n(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+176|0;l=r+136|0;m=r+112|0;n=r+160|0;q=r;c[q>>2]=289768;c[q+4>>2]=d;c[q+8>>2]=b;c[q+12>>2]=a;j=q+16|0;p=q+64|0;c[p>>2]=0;o=q+72|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[q+104>>2]=0;k=q+108|0;c[k>>2]=0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;j=q;d=m+16|0;c[m>>2]=290032;c[m+4>>2]=j;c[d>>2]=m;b=l+16|0;c[b>>2]=l;c[l>>2]=290032;c[l+4>>2]=j;ao(l,q+48|0);b=c[b>>2]|0;if((l|0)!=(b|0)){if(b|0)ma[c[(c[b>>2]|0)+20>>2]&255](b)}else ma[c[(c[b>>2]|0)+16>>2]&255](b);b=c[d>>2]|0;if((m|0)!=(b|0)){if(b|0)ma[c[(c[b>>2]|0)+20>>2]&255](b)}else ma[c[(c[b>>2]|0)+16>>2]&255](b);b=c[a>>2]|0;f=c[a+4>>2]|0;a:do if((b|0)!=(f|0)){j=n+4|0;g=n+4|0;h=m+4|0;i=m+8|0;while(1){a=c[b>>2]|0;switch(c[a+4>>2]|0){case 0:{bo(q,a+8|0)|0;break}case 1:{co(l,q,c[a+8>>2]|0);break}case 11:{co(l,q,c[a+8>>2]|0);break}case 10:{co(l,q,c[a+8>>2]|0);break}case 9:{go(q,c[a+8>>2]|0);break}case 8:{go(q,c[a+8>>2]|0);break}case 7:{d=c[a+8>>2]|0;co(n,q,d);switch(c[n>>2]|0){case 1:{eo(q,d+4|0,c[j>>2]|0,a+12|0);break}case 2:{e=d+4|0;d=c[g>>2]|0;a=a+12|0;c[l>>2]=d;c[m>>2]=0;c[h>>2]=0;c[i>>2]=0;if((d|0)!=-64){fo(m,l);d=c[m>>2]|0;eo(q,e,m,a);if(d|0){c[h>>2]=d;$A(d)}}else eo(q,e,m,a);break}default:{}}break}default:{}}b=b+4|0;if((b|0)==(f|0))break a}}while(0);g=c[k>>2]|0;c[q>>2]=289768;a=q+84|0;e=c[a>>2]|0;if(e|0){f=q+88|0;b=c[f>>2]|0;if((b|0)==(e|0))b=e;else{do{d=c[b+-20>>2]|0;if(d|0){c[b+-16>>2]=d;$A(d)}d=c[b+-32>>2]|0;if(d|0){c[b+-28>>2]=d;$A(d)}b=b+-36|0}while((b|0)!=(e|0));b=c[a>>2]|0}c[f>>2]=e;$A(b)}b=c[o>>2]|0;if(b|0){c[q+76>>2]=b;$A(b)}b=c[p>>2]|0;if((q+48|0)==(b|0)){ma[c[(c[b>>2]|0)+16>>2]&255](b);aa=r;return g|0}if(!b){aa=r;return g|0}ma[c[(c[b>>2]|0)+20>>2]&255](b);aa=r;return g|0}function ao(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;e=i;if((b|0)==(a|0)){aa=i;return}g=a+16|0;d=c[g>>2]|0;f=d;h=b+16|0;if((d|0)==(a|0))if((c[h>>2]|0)==(b|0)){na[c[(c[d>>2]|0)+12>>2]&31](d,e);f=c[g>>2]|0;ma[c[(c[f>>2]|0)+16>>2]&255](f);c[g>>2]=0;f=c[h>>2]|0;na[c[(c[f>>2]|0)+12>>2]&31](f,a);f=c[h>>2]|0;ma[c[(c[f>>2]|0)+16>>2]&255](f);c[h>>2]=0;c[g>>2]=a;na[c[(c[e>>2]|0)+12>>2]&31](e,b);ma[c[(c[e>>2]|0)+16>>2]&255](e);c[h>>2]=b;aa=i;return}else{na[c[(c[d>>2]|0)+12>>2]&31](d,b);a=c[g>>2]|0;ma[c[(c[a>>2]|0)+16>>2]&255](a);c[g>>2]=c[h>>2];c[h>>2]=b;aa=i;return}else{d=c[h>>2]|0;if((b|0)==(d|0)){na[c[(c[d>>2]|0)+12>>2]&31](d,a);b=c[h>>2]|0;ma[c[(c[b>>2]|0)+16>>2]&255](b);c[h>>2]=c[g>>2];c[g>>2]=a;aa=i;return}else{c[g>>2]=d;c[h>>2]=f;aa=i;return}}}function bo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0;_=aa;aa=aa+208|0;S=_+200|0;R=_+192|0;Q=_+184|0;P=_+176|0;O=_+168|0;N=_+160|0;M=_+152|0;L=_+144|0;K=_+136|0;J=_+128|0;I=_+120|0;H=_+112|0;G=_+104|0;F=_+96|0;E=_+88|0;D=_+80|0;C=_+72|0;B=_+64|0;Y=_+56|0;W=_+48|0;V=_+40|0;Z=_;X=b+16|0;c[X>>2]=d;w=b+24|0;v=b+28|0;u=b+32|0;y=b+36|0;s=b+40|0;T=d+32|0;c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;c[w+12>>2]=0;c[w+16>>2]=0;e=c[T>>2]|0;if(e|0){t=b+20|0;z=b+4|0;x=b+104|0;A=b+48|0;m=Z+28|0;n=Z+16|0;p=Z+32|0;o=Z+4|0;q=Z+20|0;r=Z+8|0;f=0;do{j=e;a:do switch(c[j+32>>2]|0){case 10:{c[s>>2]=(c[s>>2]|0)+1;j=j+12|0;g=e;do if(a[g+48>>0]|0){k=c[X>>2]|0;h=c[k+124>>2]|0;k=(c[k+128>>2]|0)-h>>2;i=c[g+76>>2]|0;if(i>>>0<k>>>0){l=c[h+(i<<2)>>2]|0;jo(b,j,g+100|0,l+24|0,331281,330329);jo(b,j,g+88|0,l+12|0,331281,301775);break}else{c[B>>2]=301885;c[B+4>>2]=k;ho(b,g+52|0,301811,B);break}}while(0);if((c[g+104>>2]|0)!=(c[g+100>>2]|0))ho(b,j,301899,C);break}case 0:{k=j+12|0;j=e;c[t>>2]=j+36;do if(a[j+48>>0]|0){i=c[X>>2]|0;g=c[i+124>>2]|0;i=(c[i+128>>2]|0)-g>>2;h=c[j+76>>2]|0;if(h>>>0<i>>>0){l=c[g+(h<<2)>>2]|0;jo(b,k,j+100|0,l+24|0,331281,330329);jo(b,k,j+88|0,l+12|0,331281,301775);break}else{c[D>>2]=301885;c[D+4>>2]=i;ho(b,j+52|0,301811,D);break}}while(0);g=j+100|0;if((a[(c[z>>2]|0)+6>>0]|0)==0?(c[j+104>>2]|0)-(c[g>>2]|0)>>2>>>0>1:0){ho(b,k,301936,E);break a}c[x>>2]=k;Fy(A,g);Jj(Z,b);Qj(Z,j+144|0)|0;g=c[m>>2]|0;if(g|0){c[p>>2]=g;$A(g)}g=c[n>>2]|0;if(g|0){c[q>>2]=g;$A(g)}g=c[o>>2]|0;if(g|0){c[r>>2]=g;$A(g)}Kz(A);c[t>>2]=0;break}case 1:{l=e;io(b,j+12|0,l+56|0,c[l+48>>2]|0,301984);c[u>>2]=(c[u>>2]|0)+1;break}case 2:{k=j+12|0;g=c[e+36>>2]|0;switch(c[g+28>>2]|0){case 4:{c[s>>2]=(c[s>>2]|0)+1;j=g+44|0;do if(a[j>>0]|0){l=c[X>>2]|0;h=c[l+124>>2]|0;l=(c[l+128>>2]|0)-h>>2;i=c[j+28>>2]|0;if(i>>>0<l>>>0){l=c[h+(i<<2)>>2]|0;jo(b,k,j+52|0,l+24|0,331281,330329);jo(b,k,j+40|0,l+12|0,331281,301775);break}else{c[F>>2]=301885;c[F+4>>2]=l;ho(b,j+4|0,301811,F);break}}while(0);if((c[g+100>>2]|0)==(c[g+96>>2]|0))break a;ho(b,k,301899,G);break a}case 0:{if(!(a[g+44>>0]|0))break a;h=g+48|0;g=c[X>>2]|0;g=(c[g+128>>2]|0)-(c[g+124>>2]|0)>>2;if((c[h+24>>2]|0)>>>0<g>>>0)break a;c[H>>2]=301885;c[H+4>>2]=g;ho(b,h,301811,H);break a}case 1:{ko(b,k,g+32|0);c[w>>2]=(c[w>>2]|0)+1;break a}case 2:{lo(b,k,g+32|0);c[v>>2]=(c[v>>2]|0)+1;break a}case 3:{if(a[g+48>>0]|0?(a[(c[z>>2]|0)+1>>0]|0)==0:0)ho(b,k,302014,I);c[y>>2]=(c[y>>2]|0)+1;c[u>>2]=(c[u>>2]|0)+1;break a}default:break a}}case 3:{k=e;switch(c[k+48>>2]|0){case 4:{g=c[X>>2]|0;g=(c[g+68>>2]|0)-(c[g+64>>2]|0)>>2;if((c[k+76>>2]|0)>>>0<g>>>0)break a;c[J>>2]=330237;c[J+4>>2]=g;ho(b,k+52|0,301811,J);break a}case 0:{g=c[X>>2]|0;g=(c[g+80>>2]|0)-(c[g+76>>2]|0)>>2;if((c[k+76>>2]|0)>>>0<g>>>0)break a;c[K>>2]=331281;c[K+4>>2]=g;ho(b,k+52|0,301811,K);break a}case 1:{g=c[X>>2]|0;g=(c[g+140>>2]|0)-(c[g+136>>2]|0)>>2;if((c[k+76>>2]|0)>>>0<g>>>0)break a;c[L>>2]=330351;c[L+4>>2]=g;ho(b,k+52|0,301811,L);break a}case 2:{g=c[X>>2]|0;g=(c[g+164>>2]|0)-(c[g+160>>2]|0)>>2;if((c[k+76>>2]|0)>>>0<g>>>0)break a;c[M>>2]=330283;c[M+4>>2]=g;ho(b,k+52|0,301811,M);break a}case 3:{j=k+52|0;i=c[X>>2]|0;h=c[i+88>>2]|0;i=(c[i+92>>2]|0)-h>>2;g=c[k+76>>2]|0;if(g>>>0>=i>>>0){c[N>>2]=330254;c[N+4>>2]=i;ho(b,j,301811,N);break a}if(!(a[(c[h+(g<<2)>>2]|0)+16>>0]|0))break a;if(a[(c[z>>2]|0)+1>>0]|0)break a;ho(b,j,302049,O);break a}default:break a}}case 5:{ko(b,j+12|0,e+40|0);c[w>>2]=(c[w>>2]|0)+1;break}case 9:{if(f)ho(b,j+12|0,302084,P);f=e;i=c[X>>2]|0;g=c[i+76>>2]|0;i=(c[i+80>>2]|0)-g>>2;h=c[f+60>>2]|0;if(h>>>0>=i>>>0){c[Q>>2]=331281;c[Q+4>>2]=i;ho(b,f+36|0,301811,Q);f=1;break a}l=c[g+(h<<2)>>2]|0;f=l;if(l){if((c[f+56>>2]|0)!=(c[f+52>>2]|0))ho(b,j+12|0,302116,R);if((c[f+68>>2]|0)!=(c[f+64>>2]|0)){ho(b,j+12|0,302147,S);f=1}else f=1}else f=1;break}case 7:{lo(b,j+12|0,e+40|0);c[v>>2]=(c[v>>2]|0)+1;break}default:{}}while(0);e=c[e+4>>2]|0}while((e|0)!=0);e=c[T>>2]|0;if(e|0){do{h=e;i=e;do if((c[h+32>>2]|0)==6){f=c[i+104>>2]|0;g=c[i+108>>2]|0;if((f|0)!=(g|0))do{if((c[f>>2]|0)==1?(U=c[X>>2]|0,U=(c[U+80>>2]|0)-(c[U+76>>2]|0)>>2,(c[f+28>>2]|0)>>>0>=U>>>0):0){c[V>>2]=331281;c[V+4>>2]=U;ho(b,f+4|0,301811,V)}f=f+40|0}while((f|0)!=(g|0));if(!(a[i+84>>0]|0)){f=c[X>>2]|0;f=(c[f+140>>2]|0)-(c[f+136>>2]|0)>>2;if((c[i+72>>2]|0)>>>0<f>>>0){io(b,h+12|0,i+92|0,-1,301845);break}else{c[W>>2]=330351;c[W+4>>2]=f;ho(b,i+48|0,301811,W);break}}}while(0);e=c[e+4>>2]|0}while((e|0)!=0);e=c[T>>2]|0;if(e|0)do{f=e;g=e;do if((c[f+32>>2]|0)==8?(a[g+84>>0]|0)==0:0){h=c[X>>2]|0;h=(c[h+164>>2]|0)-(c[h+160>>2]|0)>>2;if((c[g+72>>2]|0)>>>0<h>>>0){io(b,f+12|0,g+88|0,-1,301865);break}else{c[Y>>2]=330283;c[Y+4>>2]=h;ho(b,g+48|0,301811,Y);break}}while(0);e=c[e+4>>2]|0}while((e|0)!=0)}}e=Z+16|0;c[Z>>2]=290076;c[Z+4>>2]=b;c[e>>2]=Z;ay(d+256|0,Z);e=c[e>>2]|0;if((Z|0)==(e|0)){ma[c[(c[e>>2]|0)+16>>2]&255](e);Z=b+108|0;Z=c[Z>>2]|0;aa=_;return Z|0}if(!e){Z=b+108|0;Z=c[Z>>2]|0;aa=_;return Z|0}ma[c[(c[e>>2]|0)+20>>2]&255](e);Z=b+108|0;Z=c[Z>>2]|0;aa=_;return Z|0}function co(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+80|0;k=q+64|0;f=q+56|0;p=q+32|0;l=q+16|0;j=q+8|0;o=b;c[o>>2]=0;c[o+4>>2]=0;a:do switch(c[e+72>>2]|0){case 0:{h=Bl(c[d+12>>2]|0,e+24|0)|0;do if(h){f=e+60|0;g=f+11|0;i=a[g>>0]|0;o=i<<24>>24<0;i=Dk(h,o?c[f>>2]|0:f,o?c[e+64>>2]|0:i&255)|0;if(!i){if((a[g>>0]|0)<0)f=c[f>>2]|0;c[j>>2]=f;ho(d,e+4|0,301684,j);f=0;break}n=Rk(h,i+16|0)|0;if(!n)f=0;else{m=e+76|0;h=c[m>>2]|0;g=(c[e+80>>2]|0)-h|0;o=(g|0)/40|0;i=c[n+52>>2]|0;f=(c[n+56>>2]|0)-i>>2;if((f|0)!=(o|0)){c[l>>2]=o>>>0>f>>>0?301713:301718;c[l+4>>2]=o;c[l+8>>2]=f;ho(d,e+4|0,301722,l);f=0;break}b:do if(g|0){k=n+52|0;f=0;while(1){j=h+(f*40|0)|0;g=c[h+(f*40|0)+20>>2]|0;h=c[i+(f<<2)>>2]|0;if((g|0)!=0&((h|0)!=(g|0)&(h|0)!=0)){do switch(g|0){case -1:{i=330980;break}case -2:{i=330976;break}case -3:{i=330972;break}case -4:{i=330968;break}case -5:{i=330963;break}case -16:{i=330955;break}case -32:{i=330950;break}case -24:{i=330939;break}case -64:{i=330934;break}case -17:{i=330923;break}default:i=330910}while(0);do switch(h|0){case -1:{g=330980;break}case -2:{g=330976;break}case -3:{g=330972;break}case -4:{g=330968;break}case -5:{g=330963;break}case -16:{g=330955;break}case -32:{g=330950;break}case -24:{g=330939;break}case -64:{g=330934;break}case -17:{g=330923;break}default:g=330910}while(0);c[p>>2]=301775;c[p+4>>2]=f;c[p+8>>2]=330268;c[p+12>>2]=i;c[p+16>>2]=g;ho(d,j,301588,p)}f=f+1|0;if(f>>>0>=o>>>0)break b;h=c[m>>2]|0;i=c[k>>2]|0}}while(0);f=n+64|0}}else{ho(d,e+4|0,301669,q);f=0}while(0);c[b+4>>2]=f;f=(f|0)!=0&1;break}case 1:{j=b+4|0;i=Bl(c[d+12>>2]|0,e+24|0)|0;if(!i){ho(d,e+4|0,301669,f);f=0;break a}f=e+60|0;g=f+11|0;h=a[g>>0]|0;p=h<<24>>24<0;h=Dk(i,p?c[f>>2]|0:f,p?c[e+64>>2]|0:h&255)|0;if(h|0){f=Tk(i,h+16|0)|0;if(!f){f=0;break a}c[j>>2]=c[f+12>>2];f=2;break a}if((a[g>>0]|0)<0)f=c[f>>2]|0;c[k>>2]=f;ho(d,e+4|0,301784,k);f=0;break}default:{aa=q;return}}while(0);c[b>>2]=f;aa=q;return}function eo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+32|0;k=n+24|0;m=n;l=d+4|0;f=c[l>>2]|0;g=c[d>>2]|0;h=f-g>>2;i=c[e>>2]|0;j=((c[e+4>>2]|0)-i|0)/40|0;if((h|0)!=(j|0)){c[k>>2]=j;c[k+4>>2]=h;ho(a,b,301639,k);aa=n;return}if((f|0)==(g|0)){aa=n;return}j=0;while(1){h=c[g+(j<<2)>>2]|0;i=c[i+(j*40|0)+20>>2]|0;if((h|0)!=0&((i|0)!=(h|0)&(i|0)!=0)){do switch(h|0){case -1:{g=330980;break}case -2:{g=330976;break}case -3:{g=330972;break}case -4:{g=330968;break}case -5:{g=330963;break}case -16:{g=330955;break}case -32:{g=330950;break}case -24:{g=330939;break}case -64:{g=330934;break}case -17:{g=330923;break}default:g=330910}while(0);do switch(i|0){case -1:{f=330980;break}case -2:{f=330976;break}case -3:{f=330972;break}case -4:{f=330968;break}case -5:{f=330963;break}case -16:{f=330955;break}case -32:{f=330950;break}case -24:{f=330939;break}case -64:{f=330934;break}case -17:{f=330923;break}default:f=330910}while(0);c[m>>2]=330329;c[m+4>>2]=j;c[m+8>>2]=301505;c[m+12>>2]=g;c[m+16>>2]=f;ho(a,b,301588,m);f=c[l>>2]|0;g=c[d>>2]|0}h=j+1|0;if(h>>>0>=f-g>>2>>>0)break;i=c[e>>2]|0;j=h}aa=n;return}function fo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function go(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+32|0;i=j+8|0;h=j;f=j+16|0;co(f,a,b);a:do switch(c[f>>2]|0){case 1:{d=f+4|0;g=c[d>>2]|0;e=c[g>>2]|0;g=(c[g+4>>2]|0)-e|0;if((g|0)==4){c[f>>2]=2;h=c[e>>2]|0;c[d>>2]=h;d=h;break a}c[h>>2]=g>>2;ho(a,b+4|0,301512,h);c[d>>2]=0;aa=j;return}case 2:{d=c[f+4>>2]|0;break}default:{aa=j;return}}while(0);if(!d){aa=j;return}e=b+4|0;if((d|1|0)==-3){aa=j;return}do switch(d|0){case -1:{d=330980;break}case -2:{d=330976;break}case -3:{d=330972;break}case -4:{d=330968;break}case -5:{d=330963;break}case -16:{d=330955;break}case -32:{d=330950;break}case -24:{d=330939;break}case -64:{d=330934;break}case -17:{d=330923;break}default:d=330910}while(0);c[i>>2]=301505;c[i+4>>2]=d;ho(a,e,301539,i);aa=j;return}function ho(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+192|0;h=k+168|0;l=k+144|0;f=k+128|0;g=k;i=k+164|0;j=k+160|0;c[a+108>>2]=1;c[l>>2]=e;c[f>>2]=c[l>>2];c[i>>2]=g;e=(Vz(g,128,d,l)|0)+1|0;if(e>>>0>128){g=aa;aa=aa+((1*e|0)+15&-16)|0;c[i>>2]=g;Vz(g,e,d,f)|0}e=c[a+8>>2]|0;c[j>>2]=1;d=e+4|0;f=c[d>>2]|0;if(f>>>0<(c[e+8>>2]|0)>>>0){c[h>>2]=c[b>>2];c[h+4>>2]=c[b+4>>2];c[h+8>>2]=c[b+8>>2];c[h+12>>2]=c[b+12>>2];c[h+16>>2]=c[b+16>>2];l=Uz(g)|0;c[f>>2]=1;j=f+4|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];Wn(f+24|0,g,l);c[d>>2]=(c[d>>2]|0)+36;aa=k;return}else{Tm(e,j,b,i);aa=k;return}}function io(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+64|0;n=o+40|0;j=o+32|0;k=o+24|0;m=o+16|0;l=o+8|0;h=o;switch(c[e+8>>2]|0){case 0:{e=-64;break}case 1:{i=3;break}default:{c[h>>2]=g;ho(b,d,302842,h);aa=o;return}}a:do if((i|0)==3){i=c[e>>2]|0;d=i+12|0;switch(c[i+32>>2]|0){case 15:{e=c[i+60>>2]|0;break a}case 18:{h=c[b+16>>2]|0;e=c[h+88>>2]|0;h=(c[h+92>>2]|0)-e>>2;j=c[i+60>>2]|0;if(j>>>0>=h>>>0){c[k>>2]=330254;c[k+4>>2]=h;ho(b,i+36|0,301811,k);aa=o;return}h=c[e+(j<<2)>>2]|0;e=c[h+12>>2]|0;if(j>>>0>=(c[b+36>>2]|0)>>>0)ho(b,d,302915,l);if(!(a[h+16>>0]|0))break a;ho(b,d,302976,m);break a}default:{c[j>>2]=g;ho(b,d,302842,j);aa=o;return}}}while(0);if((e|0)==(f|0)){aa=o;return}do switch(e|0){case -1:{h=330980;break}case -2:{h=330976;break}case -3:{h=330972;break}case -4:{h=330968;break}case -5:{h=330963;break}case -16:{h=330955;break}case -32:{h=330950;break}case -24:{h=330939;break}case -64:{h=330934;break}case 0:{h=330930;break}case -17:{h=330923;break}default:h=330910}while(0);do switch(f|0){case -1:{e=330980;break}case -2:{e=330976;break}case -3:{e=330972;break}case -4:{e=330968;break}case -5:{e=330963;break}case -16:{e=330955;break}case -32:{e=330950;break}case -24:{e=330939;break}case -64:{e=330934;break}case 0:{e=330930;break}case -17:{e=330923;break}default:e=330910}while(0);c[n>>2]=g;c[n+4>>2]=h;c[n+8>>2]=e;ho(b,d,303033,n);aa=o;return}function jo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+48|0;m=p+24|0;o=p;n=d+4|0;h=c[n>>2]|0;i=c[d>>2]|0;j=h-i>>2;k=c[e>>2]|0;l=(c[e+4>>2]|0)-k>>2;if((j|0)!=(l|0)){c[m>>2]=l;c[m+4>>2]=g;c[m+8>>2]=j;ho(a,b,302495,m);aa=p;return}if((h|0)==(i|0)){aa=p;return}l=0;while(1){j=c[i+(l<<2)>>2]|0;k=c[k+(l<<2)>>2]|0;if((j|0)!=0&((k|0)!=(j|0)&(k|0)!=0)){do switch(j|0){case -1:{i=330980;break}case -2:{i=330976;break}case -3:{i=330972;break}case -4:{i=330968;break}case -5:{i=330963;break}case -16:{i=330955;break}case -32:{i=330950;break}case -24:{i=330939;break}case -64:{i=330934;break}case -17:{i=330923;break}default:i=330910}while(0);do switch(k|0){case -1:{h=330980;break}case -2:{h=330976;break}case -3:{h=330972;break}case -4:{h=330968;break}case -5:{h=330963;break}case -16:{h=330955;break}case -32:{h=330950;break}case -24:{h=330939;break}case -64:{h=330934;break}case -17:{h=330923;break}default:h=330910}while(0);c[o>>2]=g;c[o+4>>2]=l;c[o+8>>2]=f;c[o+12>>2]=i;c[o+16>>2]=h;ho(a,b,301588,o);h=c[n>>2]|0;i=c[d>>2]|0}j=l+1|0;if(j>>>0>=h-i>>2>>>0)break;k=c[e>>2]|0;l=j}aa=p;return}function ko(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=aa;aa=aa+112|0;n=o+104|0;m=o+96|0;l=o+88|0;k=o+56|0;i=o+32|0;h=o+8|0;f=o;if((c[b+24>>2]|0)==1?(a[(c[b+4>>2]|0)+9>>0]|0)==0:0)ho(b,d,302397,f);j=e+16|0;g=j;f=c[g>>2]|0;g=c[g+4>>2]|0;if(g>>>0>0|(g|0)==0&f>>>0>4294967295){c[h>>2]=302420;p=h+8|0;c[p>>2]=f;c[p+4>>2]=g;g=h+16|0;c[g>>2]=-1;c[g+4>>2]=0;ho(b,d,302223,h)}if(a[e+32>>0]|0){g=e+24|0;f=g;h=c[f>>2]|0;f=c[f+4>>2]|0;if(f>>>0>0|(f|0)==0&h>>>0>4294967295){c[i>>2]=302420;p=i+8|0;c[p>>2]=h;c[p+4>>2]=f;h=i+16|0;c[h>>2]=-1;c[h+4>>2]=0;ho(b,d,302259,i);h=g;i=c[h+4>>2]|0;h=c[h>>2]|0}else i=f;g=j;f=c[g>>2]|0;g=c[g+4>>2]|0;if(i>>>0<g>>>0|(i|0)==(g|0)&h>>>0<f>>>0){c[k>>2]=302420;p=k+8|0;c[p>>2]=h;c[p+4>>2]=i;c[k+16>>2]=302420;p=k+24|0;c[p>>2]=f;c[p+4>>2]=g;ho(b,d,302291,k)}}if(a[e+33>>0]|0)ho(b,d,323930,l);g=e+40|0;f=c[g>>2]|0;do if((f|0)==-17)if(!(a[(c[b+4>>2]|0)+9>>0]|0)){ho(b,d,302426,m);f=c[g>>2]|0;break}else{aa=o;return}while(0);if((f+17|0)>>>0<2){aa=o;return}ho(b,d,302455,n);aa=o;return}function lo(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=aa;aa=aa+112|0;n=o+96|0;m=o+88|0;l=o+56|0;i=o+32|0;h=o+8|0;if((c[b+28>>2]|0)==1)ho(b,d,302187,o);k=e+16|0;g=k;f=c[g>>2]|0;g=c[g+4>>2]|0;if(g>>>0>0|(g|0)==0&f>>>0>65536){c[h>>2]=302217;j=h+8|0;c[j>>2]=f;c[j+4>>2]=g;j=h+16|0;c[j>>2]=65536;c[j+4>>2]=0;ho(b,d,302223,h)}j=e+32|0;if(a[j>>0]|0){g=e+24|0;f=g;h=c[f>>2]|0;f=c[f+4>>2]|0;if(f>>>0>0|(f|0)==0&h>>>0>65536){c[i>>2]=302217;p=i+8|0;c[p>>2]=h;c[p+4>>2]=f;h=i+16|0;c[h>>2]=65536;c[h+4>>2]=0;ho(b,d,302259,i);h=g;i=c[h+4>>2]|0;h=c[h>>2]|0}else i=f;g=k;f=c[g>>2]|0;g=c[g+4>>2]|0;if(i>>>0<g>>>0|(i|0)==(g|0)&h>>>0<f>>>0){c[l>>2]=302217;p=l+8|0;c[p>>2]=h;c[p+4>>2]=i;c[l+16>>2]=302217;p=l+24|0;c[p>>2]=f;c[p+4>>2]=g;ho(b,d,302291,l)}}if(!(a[e+33>>0]|0)){aa=o;return}if(!(a[(c[b+4>>2]|0)+5>>0]|0)){ho(b,d,302334,m);aa=o;return}if(a[j>>0]|0){aa=o;return}ho(b,d,302361,n);aa=o;return}function mo(a){a=a|0;$A(a);return}function no(a){a=a|0;var b=0;b=_A(8)|0;c[b>>2]=290076;c[b+4>>2]=c[a+4>>2];return b|0}function oo(a,b){a=a|0;b=b|0;c[b>>2]=290076;c[b+4>>2]=c[a+4>>2];return}function po(a){a=a|0;return}function qo(a){a=a|0;$A(a);return}function ro(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=aa;aa=aa+16|0;g=f;h=c[b+4>>2]|0;b=(c[d+20>>2]|0)>(c[e+20>>2]|0)?d+12|0:e+12|0;c[g>>2]=(a[d+11>>0]|0)<0?c[d>>2]|0:d;ho(h,b,302602,g);aa=f;return}function so(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==302521?a+4|0:0)|0}function to(a){a=a|0;return 286104}function uo(a){a=a|0;return}function vo(a){a=a|0;$A(a);return}function wo(a){a=a|0;var b=0;b=_A(8)|0;c[b>>2]=290032;c[b+4>>2]=c[a+4>>2];return b|0}function xo(a,b){a=a|0;b=b|0;c[b>>2]=290032;c[b+4>>2]=c[a+4>>2];return}function yo(a){a=a|0;return}function zo(a){a=a|0;$A(a);return}function Ao(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=aa;aa=aa+16|0;e=d;f=c[a+4>>2]|0;a=c[f+104>>2]|0;c[e>>2]=c[b>>2];ho(f,a,330905,e);aa=d;return}function Bo(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==303074?a+4|0:0)|0}function Co(a){a=a|0;return 286128}function Do(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a>>2]=289768;e=a+84|0;f=c[e>>2]|0;if(f|0){g=a+88|0;b=c[g>>2]|0;if((b|0)==(f|0))b=f;else{do{d=c[b+-20>>2]|0;if(d|0){c[b+-16>>2]=d;$A(d)}d=c[b+-32>>2]|0;if(d|0){c[b+-28>>2]=d;$A(d)}b=b+-36|0}while((b|0)!=(f|0));b=c[e>>2]|0}c[g>>2]=f;$A(b)}b=c[a+72>>2]|0;if(b|0){c[a+76>>2]=b;$A(b)}b=c[a+64>>2]|0;if((a+48|0)==(b|0)){ma[c[(c[b>>2]|0)+16>>2]&255](b);return}if(!b)return;ma[c[(c[b>>2]|0)+20>>2]&255](b);return}function Eo(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;c[a>>2]=289768;e=a+84|0;f=c[e>>2]|0;if(f|0){g=a+88|0;b=c[g>>2]|0;if((b|0)==(f|0))b=f;else{do{d=c[b+-20>>2]|0;if(d|0){c[b+-16>>2]=d;$A(d)}d=c[b+-32>>2]|0;if(d|0){c[b+-28>>2]=d;$A(d)}b=b+-36|0}while((b|0)!=(f|0));b=c[e>>2]|0}c[g>>2]=f;$A(b)}b=c[a+72>>2]|0;if(b|0){c[a+76>>2]=b;$A(b)}b=c[a+64>>2]|0;if((a+48|0)==(b|0)){ma[c[(c[b>>2]|0)+16>>2]&255](b);$A(a);return}if(!b){$A(a);return}ma[c[(c[b>>2]|0)+20>>2]&255](b);$A(a);return}function Fo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;My(a+48|0,c[b+36>>2]|0);return 0}function Go(a,b){a=a|0;b=b|0;var d=0;d=b+12|0;c[a+104>>2]=d;Np(a,d,2,b+48|0);Ny(a+48|0,b+88|0,b+100|0);return 0}function Ho(a,b){a=a|0;b=b|0;c[a+104>>2]=b+124;dz(a+48|0);return 0}function Io(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Oy(a+48|0,c[b+60>>2]|0);return 0}function Jo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Py(a+48|0,c[b+60>>2]|0);return 0}function Ko(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;c[a+104>>2]=b+12;f=c[a+16>>2]|0;d=c[f+64>>2]|0;f=(c[f+68>>2]|0)-d>>2;e=c[b+96>>2]|0;if(e>>>0<f>>>0){Qy(a+48|0,c[b+60>>2]|0,(c[d+(e<<2)>>2]|0)+52|0);aa=h;return 0}else{c[g>>2]=330237;c[g+4>>2]=f;ho(a,b+72|0,301811,g);aa=h;return 0}return 0}function Lo(a,b){a=a|0;b=b|0;var d=0,e=0;c[a+104>>2]=b+12;e=a+48|0;Ry(e);a=c[b+36>>2]|0;d=c[b+40>>2]|0;if((a|0)!=(d|0))do{Sy(e,c[a+24>>2]|0);a=a+36|0}while((a|0)!=(d|0));Sy(e,c[b+72>>2]|0);Ty(e);return 0}function Mo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;c[a+104>>2]=b+12;f=c[a+16>>2]|0;d=c[f+76>>2]|0;f=(c[f+80>>2]|0)-d>>2;e=c[b+60>>2]|0;if(e>>>0<f>>>0){g=c[d+(e<<2)>>2]|0;Uy(a+48|0,g+52|0,g+64|0);aa=h;return 0}else{c[g>>2]=331281;c[g+4>>2]=f;ho(a,b+36|0,301811,g);aa=h;return 0}return 0}function No(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+64|0;j=k+8|0;h=k;g=k+16|0;i=d+12|0;c[b+104>>2]=i;e=c[d+124>>2]|0;f=b+16|0;l=c[f>>2]|0;if((c[l+140>>2]|0)-(c[l+136>>2]|0)>>2>>>0<=e>>>0){Am(g,17);c[h>>2]=c[g>>2];c[h+4>>2]=e;ho(b,i,303664,h)}do if(a[d+36>>0]|0){g=c[f>>2]|0;f=c[g+124>>2]|0;g=(c[g+128>>2]|0)-f>>2;e=c[d+64>>2]|0;if(e>>>0<g>>>0){l=c[f+(e<<2)>>2]|0;jo(b,i,d+88|0,l+24|0,331281,330329);jo(b,i,d+76|0,l+12|0,331281,301775);break}else{c[j>>2]=301885;c[j+4>>2]=g;ho(b,d+40|0,301811,j);break}}while(0);Vy(b+48|0,d+76|0,d+88|0);aa=k;return 0}function Oo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Yy(a+48|0,c[b+36>>2]|0);return 0}function Po(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;_y(a+48|0,c[b+60>>2]|0);return 0}function Qo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;$y(a+48|0,c[b+36>>2]|0);return 0}function Ro(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;az(a+48|0);return 0}function So(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;c[a+104>>2]=b+12;g=a+48|0;f=c[a+16>>2]|0;d=c[f+88>>2]|0;f=(c[f+92>>2]|0)-d>>2;e=c[b+60>>2]|0;if(e>>>0<f>>>0){h=c[(c[d+(e<<2)>>2]|0)+12>>2]|0;fz(g,h);aa=i;return 0}else{c[h>>2]=330254;c[h+4>>2]=f;ho(a,b+36|0,301811,h);h=0;fz(g,h);aa=i;return 0}return 0}function To(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k+8|0;g=k;i=d+12|0;c[b+104>>2]=i;f=c[b+16>>2]|0;e=c[f+88>>2]|0;f=(c[f+92>>2]|0)-e>>2;h=c[d+60>>2]|0;if(h>>>0>=f>>>0){c[g>>2]=330254;c[g+4>>2]=f;ho(b,d+36|0,301811,g);j=0;b=b+48|0;gz(b,j);aa=k;return 0}e=c[e+(h<<2)>>2]|0;if(!(a[e+16>>0]|0)){c[j>>2]=h;ho(b,i,303814,j)}j=c[e+12>>2]|0;b=b+48|0;gz(b,j);aa=k;return 0}function Uo(a,b){a=a|0;b=b|0;var d=0;d=b+12|0;c[a+104>>2]=d;Np(a,d,4,b+48|0);ez(a+48|0,b+88|0,b+100|0);return 0}function Vo(a,b){a=a|0;b=b|0;if(!(c[b+152>>2]|0))return 0;bz(a+48|0)|0;return 0}function Wo(a,b){a=a|0;b=b|0;c[a+104>>2]=(c[b+152>>2]|0)==0?b+124|0:b+156|0;dz(a+48|0);return 0}function Xo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+64|0;i=j+16|0;e=j;f=j+20|0;h=b+12|0;c[a+104>>2]=h;g=b+36|0;d=c[g>>2]|0;k=c[a+16>>2]|0;if((c[k+164>>2]|0)==(c[k+160>>2]|0)){Am(f,d);c[e>>2]=c[f>>2];ho(a,h,303401,e);d=c[g>>2]|0}e=c[b+40>>2]|0;Am(f,d);d=c[f+20>>2]|0;if((e|0)==-1){i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}if(!((e|0)!=0&(e+-1&e|0)==0))ho(a,h,310376,j+8|0);if(e>>>0<=d>>>0){i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}c[i>>2]=d;ho(a,h,303444,i);i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}function Yo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;iz(a+48|0,Op(a,b+36|0)|0);return 0}function Zo(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;jz(a+48|0,Op(a,b+36|0)|0);return 0}function _o(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;kz(a+48|0,Op(a,b+36|0)|0);return 0}function $o(a,b){a=a|0;b=b|0;var d=0;d=b+12|0;c[a+104>>2]=d;Np(a,d,3,b+48|0);lz(a+48|0,b+88|0,b+100|0);return 0}function ap(a,b){a=a|0;b=b|0;c[a+104>>2]=b+124;dz(a+48|0);return 0}function bp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+4|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+164>>2]|0)!=(c[g+160>>2]|0)){g=a+48|0;mz(g);aa=f;return 0}Am(d,199);c[e>>2]=c[d>>2];ho(a,b,303401,e);g=a+48|0;mz(g);aa=f;return 0}function cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;i=j+8|0;h=j;g=j+16|0;f=b+12|0;c[a+104>>2]=f;e=a+16|0;d=c[e>>2]|0;if((c[d+164>>2]|0)==(c[d+160>>2]|0)){Am(g,198);c[h>>2]=c[g>>2];ho(a,f,303401,h);d=c[e>>2]|0}d=(c[d+176>>2]|0)-(c[d+172>>2]|0)>>2;if((c[b+60>>2]|0)>>>0<d>>>0){aa=j;return 0}c[i>>2]=303734;c[i+4>>2]=d;ho(a,b+36|0,301811,i);aa=j;return 0}function dp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+4|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+164>>2]|0)!=(c[g+160>>2]|0)){g=a+48|0;nz(g);aa=f;return 0}Am(d,200);c[e>>2]=c[d>>2];ho(a,b,303401,e);g=a+48|0;nz(g);aa=f;return 0}function ep(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+4|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+164>>2]|0)!=(c[g+160>>2]|0)){g=a+48|0;oz(g);aa=f;return 0}Am(d,51);c[e>>2]=c[d>>2];ho(a,b,303401,e);g=a+48|0;oz(g);aa=f;return 0}function fp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;i=j+8|0;h=j;g=j+16|0;f=b+12|0;c[a+104>>2]=f;e=a+16|0;d=c[e>>2]|0;if((c[d+164>>2]|0)==(c[d+160>>2]|0)){Am(g,197);c[h>>2]=c[g>>2];ho(a,f,303401,h);d=c[e>>2]|0}d=(c[d+176>>2]|0)-(c[d+172>>2]|0)>>2;if((c[b+60>>2]|0)>>>0<d>>>0){i=a+48|0;pz(i);aa=j;return 0}c[i>>2]=303734;c[i+4>>2]=d;ho(a,b+36|0,301811,i);i=a+48|0;pz(i);aa=j;return 0}function gp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+4|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+164>>2]|0)!=(c[g+160>>2]|0)){g=a+48|0;qz(g);aa=f;return 0}Am(d,50);c[e>>2]=c[d>>2];ho(a,b,303401,e);g=a+48|0;qz(g);aa=f;return 0}function hp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;d=f+8|0;b=b+12|0;c[a+104>>2]=b;g=c[a+16>>2]|0;if((c[g+140>>2]|0)!=(c[g+136>>2]|0)){g=a+48|0;rz(g);aa=f;return 0}Am(d,203);c[e>>2]=c[d>>2];c[e+4>>2]=0;ho(a,b,303664,e);g=a+48|0;rz(g);aa=f;return 0}function ip(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;i=j+8|0;h=j;g=j+16|0;f=b+12|0;c[a+104>>2]=f;e=a+16|0;d=c[e>>2]|0;if((c[d+140>>2]|0)==(c[d+136>>2]|0)){Am(g,202);c[h>>2]=c[g>>2];c[h+4>>2]=0;ho(a,f,303664,h);d=c[e>>2]|0}d=(c[d+152>>2]|0)-(c[d+148>>2]|0)>>2;if((c[b+60>>2]|0)>>>0<d>>>0){aa=j;return 0}c[i>>2]=303721;c[i+4>>2]=d;ho(a,b+36|0,301811,i);aa=j;return 0}function jp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;i=j+8|0;h=j;g=j+16|0;f=b+12|0;c[a+104>>2]=f;e=a+16|0;d=c[e>>2]|0;if((c[d+140>>2]|0)==(c[d+136>>2]|0)){Am(g,201);c[h>>2]=c[g>>2];c[h+4>>2]=0;ho(a,f,303664,h);d=c[e>>2]|0}d=(c[d+152>>2]|0)-(c[d+148>>2]|0)>>2;if((c[b+60>>2]|0)>>>0<d>>>0){i=a+48|0;sz(i);aa=j;return 0}c[i>>2]=303721;c[i+4>>2]=d;ho(a,b+36|0,301811,i);i=a+48|0;sz(i);aa=j;return 0}function kp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;e=g+8|0;d=b+12|0;c[a+104>>2]=d;b=c[b+60>>2]|0;h=c[a+16>>2]|0;if((c[h+140>>2]|0)-(c[h+136>>2]|0)>>2>>>0>b>>>0){h=a+48|0;tz(h);aa=g;return 0}Am(e,204);c[f>>2]=c[e>>2];c[f+4>>2]=b;ho(a,d,303664,f);h=a+48|0;tz(h);aa=g;return 0}function lp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;e=g+8|0;d=b+12|0;c[a+104>>2]=d;b=c[b+60>>2]|0;h=c[a+16>>2]|0;if((c[h+140>>2]|0)-(c[h+136>>2]|0)>>2>>>0>b>>>0){h=a+48|0;uz(h);aa=g;return 0}Am(e,205);c[f>>2]=c[e>>2];c[f+4>>2]=b;ho(a,d,303664,f);h=a+48|0;uz(h);aa=g;return 0}function mp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;e=g+8|0;d=b+12|0;c[a+104>>2]=d;b=c[b+60>>2]|0;h=c[a+16>>2]|0;if((c[h+140>>2]|0)-(c[h+136>>2]|0)>>2>>>0>b>>>0){h=a+48|0;vz(h);aa=g;return 0}Am(e,206);c[f>>2]=c[e>>2];c[f+4>>2]=b;ho(a,d,303664,f);h=a+48|0;vz(h);aa=g;return 0}function np(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+48|0;f=g;e=g+8|0;d=b+12|0;c[a+104>>2]=d;b=c[b+60>>2]|0;h=c[a+16>>2]|0;if((c[h+140>>2]|0)-(c[h+136>>2]|0)>>2>>>0>b>>>0){h=a+48|0;wz(h);aa=g;return 0}Am(e,207);c[f>>2]=c[e>>2];c[f+4>>2]=b;ho(a,d,303664,f);h=a+48|0;wz(h);aa=g;return 0}function op(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;xz(a+48|0);return 0}function pp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;yz(a+48|0);return 0}function qp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;return 0}function rp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Bz(a+48|0);return 0}function sp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;c[a+104>>2]=b+12;f=c[a+16>>2]|0;d=c[f+76>>2]|0;f=(c[f+80>>2]|0)-d>>2;e=c[b+60>>2]|0;if(e>>>0<f>>>0){g=c[d+(e<<2)>>2]|0;Wy(a+48|0,g+52|0,g+64|0);aa=h;return 0}else{c[g>>2]=331281;c[g+4>>2]=f;ho(a,b+36|0,301811,g);aa=h;return 0}return 0}function tp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=aa;aa=aa+64|0;j=k+8|0;h=k;g=k+16|0;i=d+12|0;c[b+104>>2]=i;e=c[d+124>>2]|0;f=b+16|0;l=c[f>>2]|0;if((c[l+140>>2]|0)-(c[l+136>>2]|0)>>2>>>0<=e>>>0){Am(g,19);c[h>>2]=c[g>>2];c[h+4>>2]=e;ho(b,i,303664,h)}do if(a[d+36>>0]|0){g=c[f>>2]|0;f=c[g+124>>2]|0;g=(c[g+128>>2]|0)-f>>2;e=c[d+64>>2]|0;if(e>>>0<g>>>0){l=c[f+(e<<2)>>2]|0;jo(b,i,d+88|0,l+24|0,331281,330329);jo(b,i,d+76|0,l+12|0,331281,301775);break}else{c[j>>2]=301885;c[j+4>>2]=g;ho(b,d+40|0,301811,j);break}}while(0);Xy(b+48|0,d+76|0,d+88|0);aa=k;return 0}function up(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Cz(a+48|0);return 0}function vp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+64|0;i=j+16|0;e=j;f=j+20|0;h=b+12|0;c[a+104>>2]=h;g=b+36|0;d=c[g>>2]|0;k=c[a+16>>2]|0;if((c[k+164>>2]|0)==(c[k+160>>2]|0)){Am(f,d);c[e>>2]=c[f>>2];ho(a,h,303401,e);d=c[g>>2]|0}e=c[b+40>>2]|0;Am(f,d);d=c[f+20>>2]|0;if((e|0)==-1){i=a+48|0;k=c[g>>2]|0;Dz(i,k);aa=j;return 0}if(!((e|0)!=0&(e+-1&e|0)==0))ho(a,h,310376,j+8|0);if(e>>>0<=d>>>0){i=a+48|0;k=c[g>>2]|0;Dz(i,k);aa=j;return 0}c[i>>2]=d;ho(a,h,303444,i);i=a+48|0;k=c[g>>2]|0;Dz(i,k);aa=j;return 0}function wp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Fz(a+48|0,c[b+36>>2]|0);return 0}function xp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Jz(a+48|0);return 0}function yp(a,b){a=a|0;b=b|0;var d=0;d=b+12|0;c[a+104>>2]=d;Np(a,d,6,b+48|0);Ez(a+48|0,b+88|0,b+100|0);return 0}function zp(a,b){a=a|0;b=b|0;Zy(a+48|0);return 0}function Ap(a,b){a=a|0;b=b|0;c[a+104>>2]=b+124;dz(a+48|0);return 0}function Bp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;c[a+104>>2]=b+12;f=c[a+16>>2]|0;d=c[f+64>>2]|0;f=(c[f+68>>2]|0)-d>>2;e=c[b+60>>2]|0;if(e>>>0<f>>>0){Az(a+48|0,(c[d+(e<<2)>>2]|0)+52|0);aa=h;return 0}else{c[g>>2]=330237;c[g+4>>2]=f;ho(a,b+36|0,301811,g);aa=h;return 0}return 0}function Cp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;zz(a+48|0);return 0}function Dp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Ky(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Ky(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Ky(m,o);aa=n;return 0}function Ep(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Ly(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Ly(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Ly(m,o);aa=n;return 0}function Fp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Gy(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Gy(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Gy(m,o);aa=n;return 0}function Gp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Hy(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Hy(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Hy(m,o);aa=n;return 0}function Hp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Iy(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Iy(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Iy(m,o);aa=n;return 0}function Ip(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;m=n+24|0;l=n+16|0;h=n+8|0;g=n;i=n+28|0;k=d+12|0;c[b+104>>2]=k;j=d+36|0;e=c[j>>2]|0;o=c[b+16>>2]|0;f=c[o+160>>2]|0;if((c[o+164>>2]|0)!=(f|0)){if(!(a[(c[f>>2]|0)+33>>0]|0)){Am(i,e);c[h>>2]=c[i>>2];ho(b,k,303501,h)}}else{Am(i,e);c[g>>2]=c[i>>2];ho(b,k,303401,g)}f=c[d+40>>2]|0;Am(i,c[j>>2]|0);e=c[i+20>>2]|0;if((f|0)==-1){m=b+48|0;o=c[j>>2]|0;Jy(m,o);aa=n;return 0}if(!((f|0)!=0&(f+-1&f|0)==0))ho(b,k,310376,l);if((f|0)==(e|0)){m=b+48|0;o=c[j>>2]|0;Jy(m,o);aa=n;return 0}c[m>>2]=e;ho(b,k,303534,m);m=b+48|0;o=c[j>>2]|0;Jy(m,o);aa=n;return 0}function Jp(a,b){a=a|0;b=b|0;c[a+104>>2]=b+12;Gz(a+48|0,c[b+36>>2]|0);return 0}function Kp(a,b){a=a|0;b=b|0;var d=0;c[a+104>>2]=b+12;d=b+40|0;Hz(a+48|0,c[b+36>>2]|0,c[d>>2]|0,c[d+4>>2]|0);return 0}function Lp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=aa;aa=aa+16|0;e=d;c[a+104>>2]=b+12;f=c[b+36>>2]|0;b=b+40|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];Iz(a+48|0,f,e);aa=d;return 0}function Mp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+64|0;i=j+16|0;e=j;f=j+20|0;h=b+12|0;c[a+104>>2]=h;g=b+36|0;d=c[g>>2]|0;k=c[a+16>>2]|0;if((c[k+164>>2]|0)==(c[k+160>>2]|0)){Am(f,d);c[e>>2]=c[f>>2];ho(a,h,303401,e);d=c[g>>2]|0}e=c[b+40>>2]|0;Am(f,d);d=c[f+20>>2]|0;if((e|0)==-1){i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}if(!((e|0)!=0&(e+-1&e|0)==0))ho(a,h,310376,j+8|0);if(e>>>0<=d>>>0){i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}c[i>>2]=d;ho(a,h,303444,i);i=a+48|0;k=c[g>>2]|0;hz(i,k);aa=j;return 0}function Np(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+64|0;m=n+16|0;h=n+8|0;g=n;k=n+24|0;l=f+40|0;if((c[f+44>>2]|0)!=(c[l>>2]|0)?(a[(c[b+4>>2]|0)+6>>0]|0)==0:0){Am(k,e);c[g>>2]=c[k>>2];ho(b,d,303584,g)}j=f+52|0;if((c[f+56>>2]|0)-(c[j>>2]|0)>>2>>>0>1?(a[(c[b+4>>2]|0)+6>>0]|0)==0:0){Am(k,e);c[h>>2]=c[k>>2];ho(b,d,303619,h)}if(!(a[f>>0]|0)){aa=n;return}i=c[b+16>>2]|0;g=c[i+124>>2]|0;i=(c[i+128>>2]|0)-g>>2;h=c[f+28>>2]|0;if(h>>>0<i>>>0){m=c[g+(h<<2)>>2]|0;Am(k,e);jo(b,d,j,m+24|0,c[k>>2]|0,330329);Am(k,e);jo(b,d,l,m+12|0,c[k>>2]|0,301775);aa=n;return}else{c[m>>2]=301885;c[m+4>>2]=i;ho(b,f+4|0,301811,m);aa=n;return}}function Op(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+16|0;k=m+8|0;l=m;g=c[b+20>>2]|0;e=c[g+52>>2]|0;j=(c[g+56>>2]|0)-e>>2;h=c[g+76>>2]|0;i=c[g+80>>2]|0;f=j+(Ok(h,i)|0)|0;g=Qk(g,d)|0;if(g>>>0<f>>>0)if(g>>>0<j>>>0){l=c[e+(g<<2)>>2]|0;aa=m;return l|0}else{l=Pk(h,i,g-j|0)|0;aa=m;return l|0}if((c[d+20>>2]|0)!=1){c[k>>2]=f;ho(b,d,303777,k);l=0;aa=m;return l|0}e=d+24|0;if((a[e+11>>0]|0)<0)e=c[e>>2]|0;c[l>>2]=e;ho(b,d,303747,l);l=0;aa=m;return l|0}function Pp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+160|0;g=k+136|0;e=k+112|0;j=k;c[j>>2]=289768;c[j+4>>2]=d;c[j+8>>2]=b;f=j+12|0;i=j+64|0;c[i>>2]=0;h=j+72|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;c[j+104>>2]=0;c[j+108>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;f=j;d=e+16|0;c[e>>2]=290032;c[e+4>>2]=f;c[d>>2]=e;b=g+16|0;c[b>>2]=g;c[g>>2]=290032;c[g+4>>2]=f;ao(g,j+48|0);b=c[b>>2]|0;if((g|0)!=(b|0)){if(b|0)ma[c[(c[b>>2]|0)+20>>2]&255](b)}else ma[c[(c[b>>2]|0)+16>>2]&255](b);b=c[d>>2]|0;if((e|0)!=(b|0)){if(b|0)ma[c[(c[b>>2]|0)+20>>2]&255](b)}else ma[c[(c[b>>2]|0)+16>>2]&255](b);g=bo(j,a)|0;c[j>>2]=289768;a=j+84|0;e=c[a>>2]|0;if(e|0){f=j+88|0;b=c[f>>2]|0;if((b|0)==(e|0))b=e;else{do{d=c[b+-20>>2]|0;if(d|0){c[b+-16>>2]=d;$A(d)}d=c[b+-32>>2]|0;if(d|0){c[b+-28>>2]=d;$A(d)}b=b+-36|0}while((b|0)!=(e|0));b=c[a>>2]|0}c[f>>2]=e;$A(b)}b=c[h>>2]|0;if(b|0){c[j+76>>2]=b;$A(b)}b=c[i>>2]|0;if((j+48|0)==(b|0)){ma[c[(c[b>>2]|0)+16>>2]&255](b);aa=k;return g|0}if(!b){aa=k;return g|0}ma[c[(c[b>>2]|0)+20>>2]&255](b);aa=k;return g|0}function Qp(a){a=a|0;return}function Rp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=_A(12)|0;bm(g,e,f);f=_A(40)|0;c[f>>2]=g;Vn(f+4|0,b,d);c[f+16>>2]=1;b=c[f>>2]|0;d=c[b>>2]|0;c[f+20>>2]=d;c[f+24>>2]=d+(c[b+4>>2]|0);c[f+28>>2]=d;c[f+32>>2]=d;c[f+36>>2]=d;c[a>>2]=f;return}function Sp(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;L=aa;aa=aa+96|0;K=L+72|0;C=L+8|0;B=L;J=L+12|0;s=L+52|0;t=L+32|0;H=e+36|0;m=c[H>>2]|0;D=e+32|0;c[D>>2]=m;l=m;u=e+24|0;n=c[u>>2]|0;a:do if(n>>>0>l>>>0){g=e+16|0;k=e+28|0;I=e+4|0;j=I+11|0;i=e+8|0;q=t+4|0;z=t+8|0;v=t+12|0;x=t+16|0;r=s+4|0;A=s+8|0;w=s+12|0;y=s+16|0;G=n;b:while(1){n=a[l>>0]|0;c:do switch(n<<24>>24){case 111:{n=59;break b}case 41:{n=20;break b}case 34:{n=35;break b}case 45:case 43:{n=36;break b}case 48:{n=51;break b}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{n=54;break b}case 36:{n=55;break b}case 97:{n=56;break b}case 105:{n=57;break b}case 110:{n=58;break b}case 40:{l=m;if(G>>>0<=l>>>0){n=17;break b}p=l+1|0;c[H>>2]=p;o=p>>>0<G>>>0;if(!((a[l>>0]|0)==40&o)){n=10;break b}c[H>>2]=l+2;if((a[p>>0]|0)!=59){n=10;break b}if(!($p(e,f)|0)){n=9;break b}break}case 59:{n=m;if(G>>>0>n>>>0){l=n+1|0;c[H>>2]=l;if((a[n>>0]|0)==59&l>>>0<G>>>0?(h=n+2|0,c[H>>2]=h,(a[l>>0]|0)==59):0){if(h>>>0>=G>>>0){n=26;break b}l=h;while(1){n=l+1|0;c[H>>2]=n;if((a[l>>0]|0)==10)break;if(n>>>0<G>>>0)l=n;else{h=n;n=26;break b}}c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=n;break c}c[H>>2]=l}else{c[H>>2]=m;l=m}n=a[j>>0]|0;M=n<<24>>24<0;n=M?c[i>>2]|0:n&255;o=c[g>>2]|0;G=c[k>>2]|0;p=m-G+1|0;G=l-G+1|0;c[s>>2]=M?c[I>>2]|0:I;c[r>>2]=n;c[A>>2]=o;c[w>>2]=(p|0)>1?p:1;c[y>>2]=(G|0)>1?G:1;c[K>>2]=c[s>>2];c[K+4>>2]=c[s+4>>2];c[K+8>>2]=c[s+8>>2];c[K+12>>2]=c[s+12>>2];c[K+16>>2]=c[s+16>>2];aq(f,K,303896,B);break}case 10:case 13:case 9:case 32:while(1){switch(n<<24>>24){case 13:case 9:case 32:{l=l+1|0;c[H>>2]=l;break}case 10:{l=l+1|0;c[H>>2]=l;c[g>>2]=(c[g>>2]|0)+1;c[k>>2]=l;break}default:break c}if(l>>>0>=G>>>0)break c;n=a[l>>0]|0}default:{n=n&255;if((n+-97|0)>>>0<26){n=61;break b}if(a[15616+(n+1)>>0]&1){n=63;break b}l=l+1|0;c[H>>2]=l;o=a[j>>0]|0;n=o<<24>>24<0;o=n?c[i>>2]|0:o&255;p=c[g>>2]|0;M=c[k>>2]|0;G=m-M+1|0;M=l-M+1|0;c[t>>2]=n?c[I>>2]|0:I;c[q>>2]=o;c[z>>2]=p;c[v>>2]=(G|0)>1?G:1;c[x>>2]=(M|0)>1?M:1;c[K>>2]=c[t>>2];c[K+4>>2]=c[t+4>>2];c[K+8>>2]=c[t+8>>2];c[K+12>>2]=c[t+12>>2];c[K+16>>2]=c[t+16>>2];aq(f,K,303896,C)}}while(0);m=c[H>>2]|0;c[D>>2]=m;l=m;n=c[u>>2]|0;if(n>>>0>l>>>0)G=n;else{l=I;h=I;break a}}switch(n|0){case 9:{F=a[j>>0]|0;E=F<<24>>24<0;F=E?c[i>>2]|0:F&255;e=c[g>>2]|0;M=c[k>>2]|0;G=(c[D>>2]|0)-M+1|0;M=(c[H>>2]|0)-M+1|0;c[J>>2]=E?c[I>>2]|0:I;c[J+4>>2]=F;c[J+8>>2]=e;c[J+12>>2]=(G|0)>1?G:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,12);aa=L;return}case 10:{c[H>>2]=p;if((a[l>>0]|0)==40&o?(F=l+2|0,c[H>>2]=F,(a[p>>0]|0)==64):0){l=F;d:while(1){n=l>>>0<G>>>0;if(n)h=d[l>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break d;if(n)break;else h=-1}M=l+1|0;c[H>>2]=M;l=M}M=l;E=a[j>>0]|0;D=E<<24>>24<0;E=D?c[i>>2]|0:E&255;e=c[g>>2]|0;H=c[k>>2]|0;G=m-H+1|0;H=M-H+1|0;c[J>>2]=D?c[I>>2]|0:I;c[J+4>>2]=E;c[J+8>>2]=e;c[J+12>>2]=(G|0)>1?G:1;c[J+16>>2]=(H|0)>1?H:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];my(b,K,106,F,-2-m+M|0);aa=L;return}c[H>>2]=p;h=p;break}case 17:{c[H>>2]=m;h=m;break}case 20:{E=l+1|0;c[H>>2]=E;e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=E-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,30);aa=L;return}case 26:{e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=h-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,12);aa=L;return}case 35:{Tp(b,e,f);aa=L;return}case 36:{n=l+1|0;c[H>>2]=n;h=n;e:do if(n>>>0<G>>>0)switch(a[n>>0]|0){case 105:{Up(b,e);aa=L;return}case 110:{Vp(b,e);aa=L;return}case 48:{g=l+2|0;c[H>>2]=g;if((a[n>>0]|0)==48&g>>>0<G>>>0?(c[H>>2]=l+3,(a[g>>0]|0)==120):0){_p(b,e,43);aa=L;return}c[H>>2]=h;Wp(b,e,43);aa=L;return}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{Wp(b,e,43);aa=L;return}default:break e}while(0);o=h;l=n;f:while(1){n=l>>>0<G>>>0;if(n)h=d[l>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break f;if(n)break;else h=-1}M=l+1|0;c[H>>2]=M;o=M;l=M}e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=o-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];my(b,K,108,m,o-m|0);aa=L;return}case 51:{g=m;if((G>>>0>g>>>0?(E=g+1|0,c[H>>2]=E,(a[g>>0]|0)==48&E>>>0<G>>>0):0)?(c[H>>2]=g+2,(a[E>>0]|0)==120):0){_p(b,e,44);aa=L;return}c[H>>2]=m;Wp(b,e,44);aa=L;return}case 54:{Wp(b,e,44);aa=L;return}case 55:{Xp(b,e);aa=L;return}case 56:{Yp(b,e,330774,6,105);aa=L;return}case 57:{Up(b,e);aa=L;return}case 58:{Vp(b,e);aa=L;return}case 59:{Yp(b,e,330792,7,107);aa=L;return}case 61:{Zp(b,e);aa=L;return}case 63:{o=m;g:while(1){n=l>>>0<G>>>0;if(n)h=d[l>>0]|0;else h=-1;while(1){if(!(a[15616+(h+1)>>0]&1))break g;if(n)break;h=-1}M=l+1|0;c[H>>2]=M;o=M;l=M}e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=o-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];my(b,K,108,m,o-m|0);aa=L;return}}e=a[j>>0]|0;F=e<<24>>24<0;e=F?c[i>>2]|0:e&255;G=c[g>>2]|0;M=c[k>>2]|0;H=m-M+1|0;M=h-M+1|0;c[J>>2]=F?c[I>>2]|0:I;c[J+4>>2]=e;c[J+8>>2]=G;c[J+12>>2]=(H|0)>1?H:1;c[J+16>>2]=(M|0)>1?M:1;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,21);aa=L;return}else{h=e+4|0;k=e+28|0;l=h;j=h+11|0;i=e+8|0;g=e+16|0}while(0);H=a[j>>0]|0;G=H<<24>>24<0;H=G?c[i>>2]|0:H&255;I=c[g>>2]|0;M=m-(c[k>>2]|0)+1|0;M=(M|0)>1?M:1;c[J>>2]=G?c[l>>2]|0:h;c[J+4>>2]=H;c[J+8>>2]=I;c[J+12>>2]=M;c[J+16>>2]=M;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];c[K+16>>2]=c[J+16>>2];ky(b,K,12);aa=L;return}function Tp(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;L=aa;aa=aa+128|0;J=L+96|0;C=L+8|0;B=L;K=L+16|0;v=L+76|0;w=L+56|0;x=L+36|0;I=e+32|0;g=c[I>>2]|0;z=e+36|0;h=c[z>>2]|0;y=e+24|0;i=c[y>>2]|0;if(h>>>0<i>>>0){h=h+1|0;c[z>>2]=h}G=e+4|0;E=G+11|0;F=e+8|0;H=e+16|0;A=e+28|0;o=v+4|0;u=v+8|0;q=v+12|0;s=v+16|0;n=w+4|0;t=w+8|0;p=w+12|0;r=w+16|0;do if(h>>>0<i>>>0){m=0;a:while(1){l=h+1|0;c[z>>2]=l;e=l;b:do switch(a[h>>0]|0){case 34:break a;case 92:{c:do if(l>>>0<i>>>0){k=h+2|0;c[z>>2]=k;e=k;switch(a[l>>0]|0){case 92:case 39:case 34:case 114:case 110:case 116:{h=k;e=m;break b}case 70:case 69:case 68:case 67:case 66:case 65:case 102:case 101:case 100:case 99:case 98:case 97:case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:break;default:{h=l;break c}}i=k>>>0<i>>>0;if(i)j=d[k>>0]|0;else j=-1;if(!(a[15616+(j+1)>>0]&4))h=l;else{if(!i){h=k;e=m;break b}h=h+3|0;c[z>>2]=h;e=m;break b}}while(0);h=h+-1|0;c[I>>2]=h;i=a[E>>0]|0;M=i<<24>>24<0;i=M?c[F>>2]|0:i&255;j=c[H>>2]|0;m=h;l=c[A>>2]|0;k=m-l+1|0;l=e-l+1|0;c[w>>2]=M?c[G>>2]|0:G;c[n>>2]=i;c[t>>2]=j;c[p>>2]=(k|0)>1?k:1;c[r>>2]=(l|0)>1?l:1;c[C>>2]=e-m;c[C+4>>2]=h;c[J>>2]=c[w>>2];c[J+4>>2]=c[w+4>>2];c[J+8>>2]=c[w+8>>2];c[J+12>>2]=c[w+12>>2];c[J+16>>2]=c[w+16>>2];aq(f,J,309708,C);h=c[z>>2]|0;e=1;break}case 10:{c[I>>2]=h;l=a[E>>0]|0;k=l<<24>>24<0;l=k?c[F>>2]|0:l&255;m=c[H>>2]|0;j=c[A>>2]|0;M=h-j+1|0;h=e-j+1|0;c[v>>2]=k?c[G>>2]|0:G;c[o>>2]=l;c[u>>2]=m;c[q>>2]=(M|0)>1?M:1;c[s>>2]=(h|0)>1?h:1;c[J>>2]=c[v>>2];c[J+4>>2]=c[v+4>>2];c[J+8>>2]=c[v+8>>2];c[J+12>>2]=c[v+12>>2];c[J+16>>2]=c[v+16>>2];aq(f,J,309690,B);c[H>>2]=(c[H>>2]|0)+1;h=c[z>>2]|0;c[A>>2]=h;e=1;break}default:{h=l;e=m}}while(0);i=c[y>>2]|0;if(h>>>0>=i>>>0){D=6;break}else m=e}if((D|0)==6){g=c[I>>2]|0;break}c[I>>2]=g;if(m){I=a[E>>0]|0;E=I<<24>>24<0;F=E?c[F>>2]|0:I&255;I=c[H>>2]|0;M=c[A>>2]|0;K=g-M+1|0;M=e-M+1|0;c[x>>2]=E?c[G>>2]|0:G;c[x+4>>2]=F;c[x+8>>2]=I;c[x+12>>2]=(K|0)>1?K:1;c[x+16>>2]=(M|0)>1?M:1;c[J>>2]=c[x>>2];c[J+4>>2]=c[x+4>>2];c[J+8>>2]=c[x+8>>2];c[J+12>>2]=c[x+12>>2];c[J+16>>2]=c[x+16>>2];ky(b,J,0);aa=L;return}else{M=a[E>>0]|0;E=M<<24>>24<0;F=E?c[F>>2]|0:M&255;H=c[H>>2]|0;M=c[A>>2]|0;I=g-M+1|0;M=e-M+1|0;c[K>>2]=E?c[G>>2]|0:G;c[K+4>>2]=F;c[K+8>>2]=H;c[K+12>>2]=(I|0)>1?I:1;c[K+16>>2]=(M|0)>1?M:1;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];my(b,J,109,g,e-g|0);aa=L;return}}while(0);M=a[E>>0]|0;E=M<<24>>24<0;F=E?c[F>>2]|0:M&255;H=c[H>>2]|0;M=c[A>>2]|0;I=g-M+1|0;M=h-M+1|0;c[K>>2]=E?c[G>>2]|0:G;c[K+4>>2]=F;c[K+8>>2]=H;c[K+12>>2]=(I|0)>1?I:1;c[K+16>>2]=(M|0)>1?M:1;c[J>>2]=c[K>>2];c[J+4>>2]=c[K+4>>2];c[J+8>>2]=c[K+8>>2];c[J+12>>2]=c[K+12>>2];c[J+16>>2]=c[K+16>>2];ky(b,J,12);aa=L;return} +function sa(a){a=a|0;var b=0;b=aa;aa=aa+a|0;aa=aa+15&-16;return b|0}function ta(){return aa|0}function ua(a){a=a|0;aa=a}function va(a,b){a=a|0;b=b|0;aa=a;ba=b}function wa(){var b=0,c=0,d=0;b=_A(11)|0;a[b>>0]=0;a[b+1>>0]=1;c=b+2|0;d=c+9|0;do{a[c>>0]=0;c=c+1|0}while((c|0)<(d|0));return b|0}function xa(a){a=a|0;if(!a)return;$A(a);return}function ya(b){b=b|0;return (a[b>>0]|0)!=0|0}function za(b,c){b=b|0;c=c|0;a[b>>0]=(c|0)!=0&1;return}function Aa(b){b=b|0;return (a[b+1>>0]|0)!=0|0}function Ba(b,c){b=b|0;c=c|0;a[b+1>>0]=(c|0)!=0&1;return}function Ca(b){b=b|0;return (a[b+2>>0]|0)!=0|0}function Da(b,c){b=b|0;c=c|0;a[b+2>>0]=(c|0)!=0&1;return}function Ea(b){b=b|0;return (a[b+3>>0]|0)!=0|0}function Fa(b,c){b=b|0;c=c|0;a[b+3>>0]=(c|0)!=0&1;return}function Ga(b){b=b|0;return (a[b+4>>0]|0)!=0|0}function Ha(b,c){b=b|0;c=c|0;a[b+4>>0]=(c|0)!=0&1;return}function Ia(b){b=b|0;return (a[b+5>>0]|0)!=0|0}function Ja(b,c){b=b|0;c=c|0;a[b+5>>0]=(c|0)!=0&1;return}function Ka(b){b=b|0;return (a[b+6>>0]|0)!=0|0}function La(b,c){b=b|0;c=c|0;a[b+6>>0]=(c|0)!=0&1;return}function Ma(b){b=b|0;return (a[b+7>>0]|0)!=0|0}function Na(b,c){b=b|0;c=c|0;a[b+7>>0]=(c|0)!=0&1;return}function Oa(b){b=b|0;return (a[b+8>>0]|0)!=0|0}function Pa(b,c){b=b|0;c=c|0;a[b+8>>0]=(c|0)!=0&1;return}function Qa(b){b=b|0;return (a[b+9>>0]|0)!=0|0}function Ra(b,c){b=b|0;c=c|0;a[b+9>>0]=(c|0)!=0&1;return}function Sa(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=aa;aa=aa+16|0;e=f;Rp(e,a,Uz(a)|0,b,d);aa=f;return c[e>>2]|0}function Ta(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;h=j+4|0;g=j;i=h;f=i+11|0;do{a[i>>0]=a[d>>0]|0;i=i+1|0;d=d+1|0}while((i|0)<(f|0));a[h+11>>0]=0;i=_A(8)|0;c[g>>2]=0;h=ss(b,g,e,h)|0;c[i>>2]=h;c[i+4>>2]=c[g>>2];aa=j;return i|0}function Ua(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;g=j+4|0;h=j;i=g;f=i+11|0;do{a[i>>0]=a[d>>0]|0;i=i+1|0;d=d+1|0}while((i|0)<(f|0));a[g+11>>0]=0;i=_A(8)|0;c[h>>2]=0;g=ts(b,h,e,g)|0;c[i>>2]=g;c[i+4>>2]=c[h>>2];aa=j;return i|0}function Va(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+32|0;i=l;c[i+12>>2]=0;j=i+16|0;a[i+17>>0]=1;a[i+18>>0]=1;k=i;h=k+11|0;do{a[k>>0]=a[f>>0]|0;k=k+1|0;f=f+1|0}while((k|0)<(h|0));a[j>>0]=(e|0)!=0&1;k=_A(8)|0;j=_A(376)|0;uC(j|0,0,212)|0;c[j+212>>2]=1065353216;e=j+216|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+232>>2]=1065353216;e=j+236|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+252>>2]=1065353216;e=j+256|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+272>>2]=1065353216;e=j+276|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+292>>2]=1065353216;e=j+296|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+312>>2]=1065353216;e=j+316|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+332>>2]=1065353216;e=j+336|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+352>>2]=1065353216;e=j+356|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[j+372>>2]=1065353216;d=Oc(292112,b,d,i,g,j)|0;c[k>>2]=d;c[k+4>>2]=j;aa=l;return k|0}function Wa(a,b){a=a|0;b=b|0;return Hm(a,b)|0}function Xa(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;f=h;g=f;e=g+11|0;do{a[g>>0]=a[c>>0]|0;g=g+1|0;c=c+1|0}while((g|0)<(e|0));g=Pp(b,d,f)|0;aa=h;return g|0}function Ya(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;f=h;g=f;e=g+11|0;do{a[g>>0]=a[c>>0]|0;g=g+1|0;c=c+1|0}while((g|0)<(e|0));g=$n(b,d,f)|0;aa=h;return g|0}function Za(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+112|0;r=w+80|0;q=w+64|0;v=w+44|0;m=w+88|0;u=w+32|0;o=w+12|0;p=w;Sn(v,0);l=(f|0)!=0;k=l?v:0;a[m>>0]=0;a[m+1>>0]=1;f=m+2|0;j=f+9|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(j|0));a[m+11>>0]=(g|0)!=0&1;a[m+12>>0]=(h|0)!=0&1;a[m+13>>0]=(i|0)!=0&1;c[u>>2]=0;s=u+4|0;c[s>>2]=0;c[u+8>>2]=0;Sn(o,k);t=(e|0)==0?d:e;Sj(r,t,Uz(t)|0);Wn(p,c[r>>2]|0,c[r+4>>2]|0);t=_A(24)|0;f=t+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;h=Uz(d)|0;n=p+11|0;e=a[n>>0]|0;i=e<<24>>24<0;d=uj(o,b,d,h,i?c[p>>2]|0:p,i?c[p+4>>2]|0:e&255,m,u,k)|0;c[t>>2]=d;if(!d){Tn(r,o);d=c[r>>2]|0;c[r>>2]=0;c[f>>2]=d;c[r>>2]=0;if(l){Tn(r,v);f=c[r>>2]|0}else{c[r>>2]=0;f=0}c[r>>2]=0;c[t+8>>2]=f;c[r>>2]=0;f=c[u>>2]|0;h=c[s>>2]|0;m=t+12|0;if((f|0)!=(h|0)){b=q+12|0;i=t+16|0;l=t+20|0;k=q+12|0;e=q+11|0;do{Tn(r,c[f+12>>2]|0);cB(q,f);c[b>>2]=c[r>>2];j=c[i>>2]|0;if(j>>>0<(c[l>>2]|0)>>>0){c[j>>2]=c[q>>2];c[j+4>>2]=c[q+4>>2];c[j+8>>2]=c[q+8>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;d=c[b>>2]|0;c[b>>2]=0;c[j+12>>2]=d;c[i>>2]=j+16}else zb(m,q);j=c[k>>2]|0;c[k>>2]=0;if(j|0){g=c[j>>2]|0;if(g|0){c[j+4>>2]=g;$A(g)}$A(j)}if((a[e>>0]|0)<0)$A(c[q>>2]|0);f=f+16|0}while((f|0)!=(h|0))}}if((a[n>>0]|0)<0)$A(c[p>>2]|0);c[o>>2]=289744;r=o+16|0;f=c[r>>2]|0;c[r>>2]=0;if(f|0){j=c[f>>2]|0;if(j|0){c[f+4>>2]=j;$A(j)}$A(f)}g=c[u>>2]|0;if(g|0){f=c[s>>2]|0;if((f|0)==(g|0))f=g;else{do{r=f+-4|0;f=f+-16|0;j=c[r>>2]|0;c[r>>2]=0;if(j|0)ma[c[(c[j>>2]|0)+4>>2]&255](j);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(g|0));f=c[u>>2]|0}c[s>>2]=g;$A(f)}c[v>>2]=289744;v=v+16|0;f=c[v>>2]|0;c[v>>2]=0;if(!f){aa=w;return t|0}j=c[f>>2]|0;if(j|0){c[f+4>>2]=j;$A(j)}$A(f);aa=w;return t|0}function _a(a){a=a|0;return Ab(a)|0}function $a(a){a=a|0;Uj(a);return 0}function ab(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+64|0;m=n+24|0;j=n+44|0;l=n+4|0;k=n;Sn(m,0);a[j>>0]=0;a[j+1>>0]=1;h=j+2|0;i=h+9|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));a[j+11>>0]=(e|0)!=0&1;a[j+12>>0]=(f|0)!=0&1;a[j+13>>0]=(g|0)!=0&1;d=(d|0)!=0;Sn(l,d?m:0);g=_A(12)|0;f=g+8|0;e=g+4|0;i=e;c[i>>2]=0;c[i+4>>2]=0;j=bj(l,b,j)|0;c[g>>2]=j;if(!j){Tn(k,l);c[e>>2]=c[k>>2];if(d){Tn(k,m);e=c[k>>2]|0}else{c[k>>2]=0;e=0}c[f>>2]=e}c[l>>2]=289744;l=l+16|0;e=c[l>>2]|0;c[l>>2]=0;if(e|0){d=c[e>>2]|0;if(d|0){c[e+4>>2]=d;$A(d)}$A(e)}c[m>>2]=289744;m=m+16|0;e=c[m>>2]|0;c[m>>2]=0;if(!e){aa=n;return g|0}d=c[e>>2]|0;if(d|0){c[e+4>>2]=d;$A(d)}$A(e);aa=n;return g|0}function bb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+32|0;j=i+24|0;h=i+4|0;g=i;a[j+2>>0]=0;a[j>>0]=(d|0)!=0&1;a[j+1>>0]=(e|0)!=0&1;Sn(h,0);f=_A(12)|0;d=f+4|0;e=d;c[e>>2]=0;c[e+4>>2]=0;b=us(h,b,j)|0;c[f>>2]=b;if(!b){Tn(g,h);c[d>>2]=c[g>>2]}c[h>>2]=289744;j=h+16|0;d=c[j>>2]|0;c[j>>2]=0;if(!d){aa=i;return f|0}e=c[d>>2]|0;if(e|0){c[d+4>>2]=e;$A(e)}$A(d);aa=i;return f|0}function cb(a){a=a|0;if(!a)return;db(a);$A(a);return}function db(b){b=b|0;var d=0,e=0,f=0;d=c[b+364>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+356|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+344>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+336|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+324>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+316|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+304>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+296|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+284>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+276|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+264>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+256|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+244>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+236|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+224>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+216|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+204>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+196|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+184>>2]|0;if(d|0){c[b+188>>2]=d;$A(d)}d=c[b+172>>2]|0;if(d|0){c[b+176>>2]=d;$A(d)}d=c[b+160>>2]|0;if(d|0){c[b+164>>2]=d;$A(d)}d=c[b+148>>2]|0;if(d|0){c[b+152>>2]=d;$A(d)}d=c[b+136>>2]|0;if(d|0){c[b+140>>2]=d;$A(d)}d=c[b+124>>2]|0;if(d|0){c[b+128>>2]=d;$A(d)}d=c[b+112>>2]|0;if(d|0){c[b+116>>2]=d;$A(d)}d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}d=c[b+76>>2]|0;if(d|0){c[b+80>>2]=d;$A(d)}d=c[b+64>>2]|0;if(d|0){c[b+68>>2]=d;$A(d)}e=b+32|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+36>>2]=0;c[e>>2]=0;c[b+40>>2]=0;d=b+20|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function eb(b){b=b|0;var d=0;if(!b)return;d=b+4|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=c[b>>2]|0;c[b>>2]=0;if(d|0)$A(d);$A(b);return}function fb(){var a=0;a=_A(12)|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;return a|0}function gb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=aa;aa=aa+48|0;r=t+24|0;e=t+16|0;f=t;cm(e,c[d>>2]|0);s=_A(24)|0;d=c[e>>2]|0;c[e>>2]=0;c[r>>2]=d;hm(s,r);d=c[r>>2]|0;c[r>>2]=0;if(d|0)$A(d);c[e>>2]=0;Fj(e,0,0);c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;Hj(r,c[b>>2]|0,c[b+4>>2]|0,0,s,e,f);p=_A(12)|0;l=p+4|0;m=p+8|0;o=r+11|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;d=a[o>>0]|0;k=d<<24>>24<0;b=k?c[r>>2]|0:r;k=k?c[r+4>>2]|0:d&255;n=b+k|0;do if(k){d=0;e=0;f=0;while(1){j=a[b>>0]|0;g=f;if(e>>>0>=f>>>0){k=e-d|0;e=k+1|0;i=d;if((e|0)<0){d=8;break}g=g-d|0;h=g<<1;h=g>>>0<1073741823?(h>>>0<e>>>0?e:h):2147483647;if(!h)g=0;else g=_A(h)|0;e=g+k|0;a[e>>0]=j;e=e+1|0;f=g;if((k|0)>0)sC(g|0,i|0,k|0)|0;c[p>>2]=f;c[l>>2]=e;c[m>>2]=g+h;if(!d)d=f;else{$A(i);d=f}}else{a[e>>0]=j;e=e+1|0;c[l>>2]=e}b=b+1|0;if((b|0)==(n|0)){d=17;break}f=c[m>>2]|0}if((d|0)==8)HB();else if((d|0)==17){q=a[o>>0]|0;break}}else q=d;while(0);if(q<<24>>24<0)$A(c[r>>2]|0);d=c[s+4>>2]|0;if(d|0){c[s+8>>2]=d;$A(d)}d=c[s>>2]|0;c[s>>2]=0;if(!d){$A(s);aa=t;return p|0}$A(d);$A(s);aa=t;return p|0}function hb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+48|0;r=s+24|0;l=s+16|0;p=s;Fj(l,0,0);c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;Hj(r,c[b>>2]|0,c[b+4>>2]|0,1,0,l,p);p=_A(12)|0;l=p+4|0;m=p+8|0;o=r+11|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;b=a[o>>0]|0;k=b<<24>>24<0;d=k?c[r>>2]|0:r;k=k?c[r+4>>2]|0:b&255;n=d+k|0;do if(k){b=0;f=0;k=0;while(1){h=a[d>>0]|0;e=f;if(b>>>0>=f>>>0){j=b-k|0;b=j+1|0;i=k;if((b|0)<0){b=6;break}f=e-k|0;g=f<<1;g=f>>>0<1073741823?(g>>>0<b>>>0?b:g):2147483647;if(!g)f=0;else f=_A(g)|0;b=f+j|0;a[b>>0]=h;b=b+1|0;e=f;if((j|0)>0)sC(f|0,i|0,j|0)|0;c[p>>2]=e;c[l>>2]=b;c[m>>2]=f+g;if(k)$A(i)}else{a[b>>0]=h;b=b+1|0;c[l>>2]=b;e=k}d=d+1|0;if((d|0)==(n|0)){b=15;break}f=c[m>>2]|0;k=e}if((b|0)==6)HB();else if((b|0)==15){q=a[o>>0]|0;break}}else q=b;while(0);if(q<<24>>24>=0){aa=s;return p|0}$A(c[r>>2]|0);aa=s;return p|0}function ib(b){b=b|0;var d=0,e=0,f=0,g=0;if(!b)return;f=c[b>>2]|0;if(f|0){g=b+4|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{e=d+-12|0;d=d+-36|0;if((a[e+11>>0]|0)<0)$A(c[e>>2]|0)}while((d|0)!=(f|0));d=c[b>>2]|0}c[g>>2]=f;$A(d)}$A(b);return}function jb(a){a=a|0;return c[a>>2]|0}function kb(a){a=a|0;var b=0;b=a+4|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function lb(a){a=a|0;var b=0,d=0;if(!a)return;d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(b|0){db(b);$A(b)}$A(a);return}function mb(a){a=a|0;return c[a>>2]|0}function nb(a){a=a|0;var b=0;b=a+4|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function ob(a){a=a|0;return c[a>>2]|0}function pb(a){a=a|0;var b=0;b=a+4|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function qb(a){a=a|0;var b=0,d=0;if(!a)return;d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(b|0){db(b);$A(b)}$A(a);return}function rb(a){a=a|0;return c[a>>2]|0}function sb(a){a=a|0;var b=0;b=a+4|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function tb(a){a=a|0;var b=0;b=a+8|0;a=c[b>>2]|0;c[b>>2]=0;return a|0}function ub(a){a=a|0;var b=0,d=0;if(!a)return;d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(b|0){d=c[b>>2]|0;if(d|0){c[b+4>>2]=d;$A(d)}$A(b)}d=a+4|0;b=c[d>>2]|0;c[d>>2]=0;if(b|0){d=c[b>>2]|0;if(d|0){c[b+4>>2]=d;$A(d)}$A(b)}$A(a);return}function vb(a){a=a|0;return c[a>>2]|0}function wb(a){a=a|0;return (c[a+4>>2]|0)-(c[a>>2]|0)|0}function xb(a){a=a|0;var b=0;if(!a)return;b=c[a>>2]|0;if(b|0){c[a+4>>2]=b;$A(b)}$A(a);return}function yb(){return}function zb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=b+4|0;e=c[b>>2]|0;k=(c[l>>2]|0)-e>>4;f=k+1|0;if(f>>>0>268435455)HB();m=b+8|0;j=(c[m>>2]|0)-e|0;e=j>>3;e=j>>4>>>0<134217727?(e>>>0<f>>>0?f:e):268435455;do if(e)if(e>>>0>268435455)U();else{h=_A(e<<4)|0;break}else h=0;while(0);f=h+(k<<4)|0;j=h+(e<<4)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;e=d+12|0;i=c[e>>2]|0;c[e>>2]=0;c[h+(k<<4)+12>>2]=i;i=f+16|0;e=c[b>>2]|0;g=e;d=c[l>>2]|0;if((d|0)==(e|0))h=g;else{g=(d+-16-g|0)>>>4;do{n=f;f=f+-16|0;p=d;d=d+-16|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;p=p+-4|0;o=c[p>>2]|0;c[p>>2]=0;c[n+-4>>2]=o}while((d|0)!=(e|0));f=h+(k+-1-g<<4)|0;h=c[b>>2]|0;e=c[l>>2]|0}c[b>>2]=f;c[l>>2]=i;c[m>>2]=j;g=h;if((e|0)!=(g|0))do{p=e+-4|0;e=e+-16|0;f=c[p>>2]|0;c[p>>2]=0;if(f|0){d=c[f>>2]|0;if(d|0){c[f+4>>2]=d;$A(d)}$A(f)}if((a[e+11>>0]|0)<0)$A(c[e>>2]|0)}while((e|0)!=(g|0));if(!h)return;$A(h);return}function Ab(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+80|0;r=u;c[r>>2]=286856;s=r+4|0;c[s>>2]=0;k=r+8|0;c[k>>2]=0;t=r+12|0;Jj(t,r);l=r+52|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[s>>2]=b;l=b+76|0;j=b+80|0;d=c[l>>2]|0;a:do if((c[j>>2]|0)!=(d|0)){m=r+52|0;i=0;while(1){d=c[d+(i<<2)>>2]|0;c[k>>2]=d;if(a[d+12>>0]|0){h=d+16|0;e=$k(c[s>>2]|0,h)|0;if(!e){d=1;e=49;break}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+36>>2]|0)==1))Ll(h,g?c[e>>2]|0:e,f)}h=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;Cl(h+(Ok(c[d+76>>2]|0,c[d+80>>2]|0)|0)|0,d+88|0,m);if((Rj(t,d)|0)==1){d=1;e=49;break}c[k>>2]=0;i=i+1|0;d=c[l>>2]|0;if(i>>>0>=(c[j>>2]|0)-d>>2>>>0)break a}if((e|0)==49){Bb(r);aa=u;return d|0}}while(0);g=b+88|0;f=b+92|0;d=c[g>>2]|0;b:do if((c[f>>2]|0)!=(d|0)){e=0;while(1){if((Qj(t,(c[d+(e<<2)>>2]|0)+20|0)|0)==1){d=1;break}e=e+1|0;d=c[g>>2]|0;if(e>>>0>=(c[f>>2]|0)-d>>2>>>0)break b}Bb(r);aa=u;return d|0}while(0);m=b+64|0;l=b+68|0;e=c[l>>2]|0;d=c[m>>2]|0;c:do if((e|0)!=(d|0)){k=0;while(1){f=c[d+(k<<2)>>2]|0;if(a[f+12>>0]|0){j=f+16|0;g=$k(c[s>>2]|0,j)|0;if(!g){d=1;break}h=a[g+11>>0]|0;i=h<<24>>24<0;h=i?c[g+4>>2]|0:h&255;if(!((h|0)==0?1:(c[f+36>>2]|0)==1)){Ll(j,i?c[g>>2]|0:g,h);e=c[l>>2]|0;d=c[m>>2]|0}}k=k+1|0;if(k>>>0>=e-d>>2>>>0)break c}Bb(r);aa=u;return d|0}while(0);i=b+112|0;h=b+116|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){g=0;do{f=c[d+(g<<2)>>2]|0;if(((c[f+12>>2]|0)==0?(q=f+16|0,n=Sk(c[s>>2]|0,q)|0,(n|0)!=0):0)?(o=a[n+11>>0]|0,p=o<<24>>24<0,o=p?c[n+4>>2]|0:o&255,!((o|0)==0?1:(c[f+36>>2]|0)==1)):0){Ll(q,p?c[n>>2]|0:n,o);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}l=b+148|0;k=b+152|0;d=c[l>>2]|0;d:do if((c[k>>2]|0)!=(d|0)){j=0;e:while(1){h=c[d+(j<<2)>>2]|0;f=h+12|0;d=Vk(c[s>>2]|0,f)|0;if(!d){d=1;e=49;break}e=a[d+11>>0]|0;g=e<<24>>24<0;e=g?c[d+4>>2]|0:e&255;if(!((e|0)==0?1:(c[h+32>>2]|0)==1))Ll(f,g?c[d>>2]|0:d,e);if((Qj(t,h+56|0)|0)==1){d=1;e=49;break}d=c[h+68>>2]|0;i=c[h+72>>2]|0;if((d|0)!=(i|0))do{if((c[d>>2]|0)==1){h=d+4|0;e=Sk(c[s>>2]|0,h)|0;if(!e){d=1;e=49;break e}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+24>>2]|0)==1))Ll(h,g?c[e>>2]|0:e,f)}d=d+40|0}while((d|0)!=(i|0));j=j+1|0;d=c[l>>2]|0;if(j>>>0>=(c[k>>2]|0)-d>>2>>>0)break d}if((e|0)==49){Bb(r);aa=u;return d|0}}while(0);k=b+172|0;j=b+176|0;d=c[k>>2]|0;f:do if((c[j>>2]|0)!=(d|0)){i=0;while(1){d=c[d+(i<<2)>>2]|0;g=d+12|0;e=Wk(c[s>>2]|0,g)|0;if(!e){d=1;e=49;break}f=a[e+11>>0]|0;h=f<<24>>24<0;f=h?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+32>>2]|0)==1))Ll(g,h?c[e>>2]|0:e,f);i=i+1|0;if((Qj(t,d+52|0)|0)==1){d=1;e=49;break}d=c[k>>2]|0;if(i>>>0>=(c[j>>2]|0)-d>>2>>>0)break f}if((e|0)==49){Bb(r);aa=u;return d|0}}while(0);c[s>>2]=0;t=0;Bb(r);aa=u;return t|0}function Bb(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=286856;e=b+64|0;f=c[e>>2]|0;if(f|0){g=b+68|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}e=b+52|0;f=c[e>>2]|0;if(f|0){g=b+56|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{d=d+-12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0)}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=c[b+28>>2]|0;if(d|0){c[b+32>>2]=d;$A(d)}d=c[b+16>>2]|0;if(!d)return;c[b+20>>2]=d;$A(d);return}function Cb(a){a=a|0;Bb(a);$A(a);return}function Db(a,b){a=a|0;b=b|0;return 0}function Eb(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+36|0;d=a+68|0;b=c[d>>2]|0;if((b|0)==(c[a+72>>2]|0)){Lc(a+64|0,e);return 0}else{cB(b,e);c[d>>2]=(c[d>>2]|0)+12;return 0}return 0}function Fb(b,d){b=b|0;d=d|0;d=b+68|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function Gb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+16|0;d=f;e=b+36|0;Nc(d,a,e);a=c[d+4>>2]|0;if((a|0)==0?1:(c[b+56>>2]|0)==1){aa=f;return 0}Ll(e,c[d>>2]|0,a);aa=f;return 0}function Hb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+16|0;d=f;e=b+36|0;Nc(d,a,e);a=c[d+4>>2]|0;if((a|0)==0?1:(c[b+56>>2]|0)==1){aa=f;return 0}Ll(e,c[d>>2]|0,a);aa=f;return 0}function Ib(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;f=i;g=d+36|0;Nc(f,b,g);e=c[f+4>>2]|0;if(!((e|0)==0?1:(c[d+56>>2]|0)==1))Ll(g,c[f>>2]|0,e);h=d+72|0;e=Xk(c[b+4>>2]|0,h)|0;if(!e){d=1;aa=i;return d|0}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if((f|0)==0?1:(c[d+92>>2]|0)==1){d=0;aa=i;return d|0}Ll(h,g?c[e>>2]|0:e,f);d=0;aa=i;return d|0}function Jb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;d=c[b+36>>2]|0;f=c[b+40>>2]|0;if((d|0)!=(f|0)){g=h+4|0;do{Nc(h,a,d);e=c[g>>2]|0;if(!((e|0)==0?1:(c[d+20>>2]|0)==1))Ll(d,c[h>>2]|0,e);d=d+36|0}while((d|0)!=(f|0))}e=b+48|0;Nc(h,a,e);d=c[h+4>>2]|0;if((d|0)==0?1:(c[b+68>>2]|0)==1){aa=i;return 0}Ll(e,c[h>>2]|0,d);aa=i;return 0}function Kb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Sk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function Lb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if(a[d+36>>0]|0){h=d+40|0;b=b+4|0;e=$k(c[b>>2]|0,h)|0;if(!e){d=1;return d|0}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+60>>2]|0)==1))Ll(h,g?c[e>>2]|0:e,f)}else b=b+4|0;g=d+100|0;b=Vk(c[b>>2]|0,g)|0;if(!b){d=1;return d|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+120>>2]|0)==1){d=0;return d|0}Ll(g,f?c[b>>2]|0:b,e);d=0;return d|0}function Mb(a,b){a=a|0;b=b|0;return 0}function Nb(a,b){a=a|0;b=b|0;return 0}function Ob(a,b){a=a|0;b=b|0;return 0}function Pb(a,b){a=a|0;b=b|0;return 0}function Qb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Uk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function Rb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Uk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function Sb(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+36|0;d=a+68|0;b=c[d>>2]|0;if((b|0)==(c[a+72>>2]|0)){Lc(a+64|0,e);return 0}else{cB(b,e);c[d>>2]=(c[d>>2]|0)+12;return 0}return 0}function Tb(a,b){a=a|0;b=b|0;return 0}function Ub(b,d){b=b|0;d=d|0;d=b+68|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function Vb(a,b){a=a|0;b=b|0;return 0}function Wb(a,b){a=a|0;b=b|0;return (Mc(a,c[a+8>>2]|0,b+36|0)|0)==1|0}function Xb(a,b){a=a|0;b=b|0;return (Mc(a,c[a+8>>2]|0,b+36|0)|0)==1|0}function Yb(a,b){a=a|0;b=b|0;return (Mc(a,c[a+8>>2]|0,b+36|0)|0)==1|0}function Zb(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+36|0;d=a+68|0;b=c[d>>2]|0;if((b|0)==(c[a+72>>2]|0)){Lc(a+64|0,e);return 0}else{cB(b,e);c[d>>2]=(c[d>>2]|0)+12;return 0}return 0}function _b(b,d){b=b|0;d=d|0;d=b+68|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function $b(a,b){a=a|0;b=b|0;return 0}function ac(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Yk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function bc(a,b){a=a|0;b=b|0;return 0}function cc(a,b){a=a|0;b=b|0;return 0}function dc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Yk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function ec(a,b){a=a|0;b=b|0;return 0}function fc(a,b){a=a|0;b=b|0;return 0}function gc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Zk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function hc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Zk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function ic(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Vk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function jc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Vk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function kc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Vk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function lc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Vk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function mc(a,b){a=a|0;b=b|0;return 0}function nc(a,b){a=a|0;b=b|0;return 0}function oc(a,b){a=a|0;b=b|0;return 0}function pc(a,b){a=a|0;b=b|0;return 0}function qc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Sk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function rc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if(a[d+36>>0]|0){h=d+40|0;b=b+4|0;e=$k(c[b>>2]|0,h)|0;if(!e){d=1;return d|0}f=a[e+11>>0]|0;g=f<<24>>24<0;f=g?c[e+4>>2]|0:f&255;if(!((f|0)==0?1:(c[d+60>>2]|0)==1))Ll(h,g?c[e>>2]|0:e,f)}else b=b+4|0;g=d+100|0;b=Vk(c[b>>2]|0,g)|0;if(!b){d=1;return d|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+120>>2]|0)==1){d=0;return d|0}Ll(g,f?c[b>>2]|0:b,e);d=0;return d|0}function sc(a,b){a=a|0;b=b|0;return 0}function tc(a,b){a=a|0;b=b|0;return 0}function uc(a,b){a=a|0;b=b|0;return 0}function vc(a,b){a=a|0;b=b|0;return 0}function wc(a,b){a=a|0;b=b|0;var d=0,e=0;e=b+36|0;d=a+68|0;b=c[d>>2]|0;if((b|0)==(c[a+72>>2]|0)){Lc(a+64|0,e);return 0}else{cB(b,e);c[d>>2]=(c[d>>2]|0)+12;return 0}return 0}function xc(a,b){a=a|0;b=b|0;return 0}function yc(b,d){b=b|0;d=d|0;d=b+68|0;b=(c[d>>2]|0)+-12|0;if((a[b+11>>0]|0)>=0){c[d>>2]=b;return 0}$A(c[b>>2]|0);c[d>>2]=b;return 0}function zc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=d+36|0;b=Xk(c[b+4>>2]|0,g)|0;if(!b){g=1;return g|0}e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[b+4>>2]|0:e&255;if((e|0)==0?1:(c[d+56>>2]|0)==1){g=0;return g|0}Ll(g,f?c[b>>2]|0:b,e);g=0;return g|0}function Ac(a,b){a=a|0;b=b|0;return 0}function Bc(a,b){a=a|0;b=b|0;return 0}function Cc(a,b){a=a|0;b=b|0;return 0}function Dc(a,b){a=a|0;b=b|0;return 0}function Ec(a,b){a=a|0;b=b|0;return 0}function Fc(a,b){a=a|0;b=b|0;return 0}function Gc(a,b){a=a|0;b=b|0;return 0}function Hc(a,b){a=a|0;b=b|0;return 0}function Ic(a,b){a=a|0;b=b|0;return 0}function Jc(a,b){a=a|0;b=b|0;return 0}function Kc(a,b){a=a|0;b=b|0;return 0}function Lc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=b+4|0;e=c[b>>2]|0;g=((c[j>>2]|0)-e|0)/12|0;f=g+1|0;if(f>>>0>357913941)HB();k=b+8|0;i=((c[k>>2]|0)-e|0)/12|0;e=i<<1;e=i>>>0<178956970?(e>>>0<f>>>0?f:e):357913941;do if(e)if(e>>>0>357913941)U();else{h=_A(e*12|0)|0;break}else h=0;while(0);f=h+(g*12|0)|0;i=h+(e*12|0)|0;cB(f,d);d=f+12|0;h=c[b>>2]|0;e=c[j>>2]|0;if((e|0)==(h|0)){g=h;e=h}else{do{f=f+-12|0;e=e+-12|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0}while((e|0)!=(h|0));g=c[b>>2]|0;e=c[j>>2]|0}c[b>>2]=f;c[j>>2]=d;c[k>>2]=i;f=g;if((e|0)!=(f|0))do{e=e+-12|0;if((a[e+11>>0]|0)<0)$A(c[e>>2]|0)}while((e|0)!=(f|0));if(!g)return;$A(g);return}function Mc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+16|0;h=j;f=Qk(d,e)|0;k=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;if(f>>>0>=(k+(Ok(c[d+76>>2]|0,c[d+80>>2]|0)|0)|0)>>>0){k=1;aa=j;return k|0}cB(h,(c[b+52>>2]|0)+(f*12|0)|0);f=h+11|0;if((c[e+20>>2]|0)!=1?(g=a[f>>0]|0,i=g<<24>>24<0,g=i?c[h+4>>2]|0:g&255,g|0):0)Ll(e,i?c[h>>2]|0:h,g);if((a[f>>0]|0)<0)$A(c[h>>2]|0);k=0;aa=j;return k|0}function Nc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((c[e+20>>2]|0)!=1){f=c[e+24>>2]|0;o=c[d+64>>2]|0;e=((c[d+68>>2]|0)-o|0)/12|0;d=o;if(f>>>0<e>>>0){n=e+~f|0;l=d+(n*12|0)|0;o=a[l+11>>0]|0;m=o<<24>>24<0;c[b>>2]=m?c[l>>2]|0:l;c[b+4>>2]=m?c[d+(n*12|0)+4>>2]|0:o&255;return}else{c[b>>2]=0;c[b+4>>2]=0;return}}n=c[d+64>>2]|0;o=(c[d+68>>2]|0)-n|0;f=((o|0)/12|0)+-1|0;a:do if((o|0)>0){o=e+24|0;d=a[o+11>>0]|0;l=d<<24>>24<0;d=l?c[e+28>>2]|0:d&255;m=(d|0)==0;b:do if(l)while(1){l=n+(f*12|0)|0;g=a[l+11>>0]|0;j=g<<24>>24<0;g=g&255;do if(((j?c[n+(f*12|0)+4>>2]|0:g)|0)==(d|0)){e=c[l>>2]|0;i=j?e:l;k=c[o>>2]|0;h=e&255;if(j){if(m){d=0;break b}if(!(Tz(i,k,d)|0))break b;else break}if(m){e=l;d=0;break b}if((a[k>>0]|0)==h<<24>>24){h=l;e=k;do{g=g+-1|0;h=h+1|0;if(!g){e=l;break b}e=e+1|0}while((a[h>>0]|0)==(a[e>>0]|0))}}while(0);f=f+-1|0;if((f|0)<=-1)break a}else while(1){k=n+(f*12|0)|0;i=a[k+11>>0]|0;j=i<<24>>24<0;i=i&255;do if(((j?c[n+(f*12|0)+4>>2]|0:i)|0)==(d|0)){e=c[k>>2]|0;h=j?e:k;g=e&255;if(j){if(m){d=0;break b}if(!(Tz(h,o,d)|0))break b;else break}if(m){e=k;d=0;break b}if((a[o>>0]|0)==g<<24>>24){e=i;g=k;h=o;do{e=e+-1|0;g=g+1|0;if(!e){e=k;break b}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);f=f+-1|0;if((f|0)<=-1)break a}while(0);c[b>>2]=e;c[b+4>>2]=d;return}while(0);c[b>>2]=0;c[b+4>>2]=0;return}function Oc(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=aa;aa=aa+48|0;h=i;c[h+4>>2]=0;c[h>>2]=287120;c[h+8>>2]=f;c[h+12>>2]=g;f=h+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[h+36>>2]=a;f=du(b,d,h,e)|0;c[h>>2]=287120;b=c[h+20>>2]|0;if(!b){aa=i;return f|0}c[h+24>>2]=b;$A(b);aa=i;return f|0}function Pc(a){a=a|0;var b=0;c[a>>2]=287120;b=c[a+20>>2]|0;if(!b)return;c[a+24>>2]=b;$A(b);return}function Qc(a){a=a|0;var b=0;c[a>>2]=287120;b=c[a+20>>2]|0;if(!b){$A(a);return}c[a+24>>2]=b;$A(b);$A(a);return}function Rc(a,b){a=a|0;b=b|0;var d=0,e=0;a=c[a+8>>2]|0;e=a+4|0;d=c[e>>2]|0;if((d|0)==(c[a+8>>2]|0)){_i(a,b);return 1}else{c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];cB(d+24|0,b+24|0);c[e>>2]=(c[e>>2]|0)+36;return 1}return 0}function Sc(a,b){a=a|0;b=b|0;c[a+4>>2]=b;return}function Tc(a,b){a=a|0;b=b|0;return 0}function Uc(a){a=a|0;return 0}function Vc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Wc(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Xc(a){a=a|0;return 0}function Yc(a,b){a=a|0;b=b|0;return 0}function Zc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+124|0;g=a+132|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+128|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function _c(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=aa;aa=aa+16|0;i=h;l=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;k=Uz(l)|0;j=_A(72)|0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=l;c[j+16>>2]=k;c[j+20>>2]=b;b=j+24|0;c[b>>2]=0;c[b+4>>2]=0;c[j+32>>2]=4;c[j>>2]=289068;Wn(j+36|0,0,0);b=j+48|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;Bg(b,e,e+(d<<2)|0);Bg(j+60|0,g,g+(f<<2)|0);b=c[a+12>>2]|0;c[i>>2]=j;ml(b,i);b=c[i>>2]|0;c[i>>2]=0;if(!b){aa=h;return 0}ma[c[(c[b>>2]|0)+4>>2]&255](b);aa=h;return 0}function $c(a){a=a|0;return 0}function ad(a,b){a=a|0;b=b|0;return 0}function bd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+100|0;g=a+108|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+104|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function cd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function dd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+64|0;l=r+24|0;m=r;q=r+20|0;p=_A(152)|0;j=p+4|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[p>>2]=289052;Wn(p+32|0,0,0);k=p+44|0;a[k>>0]=0;n=p+48|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(n,-1,l);o=p+84|0;g=p+136|0;d=o;i=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(i|0));c[g>>2]=1065353216;c[p+140>>2]=0;c[p+144>>2]=0;c[p+148>>2]=0;Wn(l,c[e>>2]|0,c[e+4>>2]|0);g=p+15|0;if((a[g>>0]|0)<0){a[c[j>>2]>>0]=0;c[p+8>>2]=0}else{a[j>>0]=0;a[g>>0]=0}pB(j);c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];Wn(l,c[f>>2]|0,c[f+4>>2]|0);d=p+16|0;g=p+27|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[p+20>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];e=b+4|0;j=c[e>>2]|0;f=b+36|0;d=c[f>>2]|0;a[k>>0]=1;j=c[j+8>>2]|0;g=m+12|0;c[g>>2]=0;c[g+4>>2]=0;g=Uz(d)|0;c[m>>2]=d;c[m+4>>2]=g;c[m+8>>2]=j;El(l,h,m);Hl(n,l)|0;Ml(l);j=b+12|0;g=c[j>>2]|0;d=c[(c[g+124>>2]|0)+(h<<2)>>2]|0;i=d+12|0;if((i|0)!=(o|0)){Bg(o,c[i>>2]|0,c[d+16>>2]|0);Bg(p+96|0,c[d+24>>2]|0,c[d+28>>2]|0);g=c[j>>2]|0}n=c[f>>2]|0;o=c[(c[e>>2]|0)+8>>2]|0;b=Uz(n)|0;h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=n;c[h+16>>2]=b;c[h+20>>2]=o;o=h+24|0;c[o>>2]=0;c[o+4>>2]=0;c[h+32>>2]=2;c[h>>2]=288972;c[h+36>>2]=p;c[q>>2]=h;ql(g,q);g=c[q>>2]|0;c[q>>2]=0;if(!g){aa=r;return 0}ma[c[(c[g>>2]|0)+4>>2]&255](g);aa=r;return 0}function ed(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0;n=aa;aa=aa+16|0;l=n+4|0;m=n;h=_A(80)|0;e=h+4|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[h+28>>2]=1;c[h>>2]=289036;Wn(h+32|0,0,0);k=h+48|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;b[k+16>>1]=0;c[h+72>>2]=-16;Wn(l,c[f>>2]|0,c[f+4>>2]|0);i=h+15|0;if((a[i>>0]|0)<0){a[c[e>>2]>>0]=0;c[h+8>>2]=0}else{a[e>>0]=0;a[i>>0]=0}pB(e);c[e>>2]=c[l>>2];c[e+4>>2]=c[l+4>>2];c[e+8>>2]=c[l+8>>2];Wn(l,c[g>>2]|0,c[g+4>>2]|0);e=h+16|0;i=h+27|0;if((a[i>>0]|0)<0){a[c[e>>2]>>0]=0;c[h+20>>2]=0}else{a[e>>0]=0;a[i>>0]=0}pB(e);c[e>>2]=c[l>>2];c[e+4>>2]=c[l+4>>2];c[e+8>>2]=c[l+8>>2];i=c[d+12>>2]|0;g=c[d+4>>2]|0;l=c[d+36>>2]|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];b[k+16>>1]=b[j+16>>1]|0;j=c[g+8>>2]|0;g=Uz(l)|0;d=_A(40)|0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=l;c[d+16>>2]=g;c[d+20>>2]=j;j=d+24|0;c[j>>2]=0;c[j+4>>2]=0;c[d+32>>2]=2;c[d>>2]=288972;c[d+36>>2]=h;c[m>>2]=d;ql(i,m);i=c[m>>2]|0;c[m>>2]=0;if(!i){aa=n;return 0}ma[c[(c[i>>2]|0)+4>>2]&255](i);aa=n;return 0}function fd(d,e,f,g,h,i){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+16|0;l=n+4|0;m=n;j=_A(72)|0;h=j+4|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[j+28>>2]=2;c[j>>2]=289020;Wn(j+32|0,0,0);k=j+48|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;b[k+16>>1]=0;Wn(l,c[f>>2]|0,c[f+4>>2]|0);e=j+15|0;if((a[e>>0]|0)<0){a[c[h>>2]>>0]=0;c[j+8>>2]=0}else{a[h>>0]=0;a[e>>0]=0}pB(h);c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];c[h+8>>2]=c[l+8>>2];Wn(l,c[g>>2]|0,c[g+4>>2]|0);h=j+16|0;e=j+27|0;if((a[e>>0]|0)<0){a[c[h>>2]>>0]=0;c[j+20>>2]=0}else{a[h>>0]=0;a[e>>0]=0}pB(h);c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];c[h+8>>2]=c[l+8>>2];e=c[d+12>>2]|0;l=c[d+4>>2]|0;g=c[d+36>>2]|0;c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];b[k+16>>1]=b[i+16>>1]|0;i=c[l+8>>2]|0;l=Uz(g)|0;d=_A(40)|0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=g;c[d+16>>2]=l;c[d+20>>2]=i;i=d+24|0;c[i>>2]=0;c[i+4>>2]=0;c[d+32>>2]=2;c[d>>2]=288972;c[d+36>>2]=j;c[m>>2]=d;ql(e,m);e=c[m>>2]|0;c[m>>2]=0;if(!e){aa=n;return 0}ma[c[(c[e>>2]|0)+4>>2]&255](e);aa=n;return 0}function gd(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+16|0;l=o+4|0;n=o;k=_A(64)|0;d=k+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[k+28>>2]=3;c[k>>2]=289004;Wn(k+32|0,0,0);m=k+44|0;c[m>>2]=-64;j=k+48|0;a[j>>0]=0;c[k+52>>2]=0;c[k+56>>2]=0;c[k+60>>2]=0;Wn(l,c[e>>2]|0,c[e+4>>2]|0);g=k+15|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[k+8>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];Wn(l,c[f>>2]|0,c[f+4>>2]|0);d=k+16|0;g=k+27|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[k+20>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];g=c[b+12>>2]|0;f=c[b+4>>2]|0;l=c[b+36>>2]|0;c[m>>2]=h;a[j>>0]=i&1;b=c[f+8>>2]|0;i=Uz(l)|0;h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=l;c[h+16>>2]=i;c[h+20>>2]=b;b=h+24|0;c[b>>2]=0;c[b+4>>2]=0;c[h+32>>2]=2;c[h>>2]=288972;c[h+36>>2]=k;c[n>>2]=h;ql(g,n);g=c[n>>2]|0;c[n>>2]=0;if(!g){aa=o;return 0}ma[c[(c[g>>2]|0)+4>>2]&255](g);aa=o;return 0}function hd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+64|0;l=r+24|0;m=r;q=r+20|0;p=_A(108)|0;d=p+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[p+28>>2]=4;c[p>>2]=288956;Wn(p+32|0,0,0);k=p+44|0;a[k>>0]=0;n=p+48|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(n,-1,l);o=p+84|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;Wn(l,c[e>>2]|0,c[e+4>>2]|0);g=p+15|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[p+8>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];Wn(l,c[f>>2]|0,c[f+4>>2]|0);d=p+16|0;g=p+27|0;if((a[g>>0]|0)<0){a[c[d>>2]>>0]=0;c[p+20>>2]=0}else{a[d>>0]=0;a[g>>0]=0}pB(d);c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];i=b+4|0;f=c[i>>2]|0;j=b+36|0;d=c[j>>2]|0;a[k>>0]=1;f=c[f+8>>2]|0;g=m+12|0;c[g>>2]=0;c[g+4>>2]=0;g=Uz(d)|0;c[m>>2]=d;c[m+4>>2]=g;c[m+8>>2]=f;El(l,h,m);Hl(n,l)|0;Ml(l);f=b+12|0;g=c[f>>2]|0;d=c[(c[g+124>>2]|0)+(h<<2)>>2]|0;e=d+12|0;if((e|0)!=(o|0)){Bg(o,c[e>>2]|0,c[d+16>>2]|0);Bg(p+96|0,c[d+24>>2]|0,c[d+28>>2]|0);g=c[f>>2]|0}n=c[j>>2]|0;o=c[(c[i>>2]|0)+8>>2]|0;b=Uz(n)|0;h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=n;c[h+16>>2]=b;c[h+20>>2]=o;o=h+24|0;c[o>>2]=0;c[o+4>>2]=0;c[h+32>>2]=2;c[h>>2]=288972;c[h+36>>2]=p;c[q>>2]=h;ql(g,q);g=c[q>>2]|0;c[q>>2]=0;if(!g){aa=r;return 0}ma[c[(c[g>>2]|0)+4>>2]&255](g);aa=r;return 0}function id(a){a=a|0;return 0}function jd(a,b){a=a|0;b=b|0;return 0}function kd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+76|0;g=(c[a+48>>2]|0)+b|0;f=a+84|0;e=c[h>>2]|0;if((c[f>>2]|0)-e>>2>>>0>=g>>>0)return 0;a=a+80|0;if(g>>>0>1073741823)U();d=(c[a>>2]|0)-e|0;b=_A(g<<2)|0;if((d|0)>0)sC(b|0,e|0,d|0)|0;c[h>>2]=b;c[a>>2]=b+(d>>2<<2);c[f>>2]=b+(g<<2);if(!e)return 0;$A(e);return 0}function ld(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+64|0;g=q+24|0;h=q;p=q+20|0;i=b+4|0;j=b+36|0;n=c[j>>2]|0;d=c[(c[i>>2]|0)+8>>2]|0;k=Uz(n)|0;o=_A(156)|0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=n;c[o+16>>2]=k;c[o+20>>2]=d;d=o+24|0;c[d>>2]=0;c[d+4>>2]=0;c[o+32>>2]=0;c[o>>2]=288940;Wn(o+36|0,0,0);d=o+48|0;a[d>>0]=0;k=o+52|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(k,-1,g);n=o+88|0;f=o+140|0;l=n;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));c[f>>2]=1065353216;c[o+144>>2]=0;c[o+148>>2]=0;c[o+152>>2]=0;a[d>>0]=1;m=c[j>>2]|0;d=c[(c[i>>2]|0)+8>>2]|0;f=h+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(m)|0;c[h>>2]=m;c[h+4>>2]=f;c[h+8>>2]=d;El(g,e,h);Hl(k,g)|0;Ml(g);h=b+12|0;d=c[h>>2]|0;f=c[(c[d+124>>2]|0)+(e<<2)>>2]|0;g=f+12|0;if((g|0)!=(n|0)){Bg(n,c[g>>2]|0,c[f+16>>2]|0);Bg(o+100|0,c[f+24>>2]|0,c[f+28>>2]|0);d=c[h>>2]|0}c[p>>2]=o;kl(d,p);d=c[p>>2]|0;c[p>>2]=0;if(!d){aa=q;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return 0}function md(a){a=a|0;return 0}function nd(a,b){a=a|0;b=b|0;return 0}function od(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+136|0;g=(c[a+52>>2]|0)+b|0;f=a+144|0;e=c[h>>2]|0;if((c[f>>2]|0)-e>>2>>>0>=g>>>0)return 0;a=a+140|0;if(g>>>0>1073741823)U();d=(c[a>>2]|0)-e|0;b=_A(g<<2)|0;if((d|0)>0)sC(b|0,e|0,d|0)|0;c[h>>2]=b;c[a>>2]=b+(d>>2<<2);c[f>>2]=b+(g<<2);if(!e)return 0;$A(e);return 0}function pd(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=aa;aa=aa+16|0;h=g;k=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;j=Uz(k)|0;i=_A(88)|0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=k;c[i+16>>2]=j;c[i+20>>2]=d;d=i+24|0;c[d>>2]=0;c[d+4>>2]=0;c[i+32>>2]=5;c[i>>2]=288924;Wn(i+40|0,0,0);d=i+56|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];b[d+16>>1]=b[f+16>>1]|0;c[i+80>>2]=e;d=c[a+12>>2]|0;c[h>>2]=i;yl(d,h);d=c[h>>2]|0;c[h>>2]=0;if(!d){aa=g;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=g;return 0}function qd(a){a=a|0;return 0}function rd(a,b){a=a|0;b=b|0;return 0}function sd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+160|0;g=(c[a+56>>2]|0)+b|0;f=a+168|0;e=c[h>>2]|0;if((c[f>>2]|0)-e>>2>>>0>=g>>>0)return 0;a=a+164|0;if(g>>>0>1073741823)U();d=(c[a>>2]|0)-e|0;b=_A(g<<2)|0;if((d|0)>0)sC(b|0,e|0,d|0)|0;c[h>>2]=b;c[a>>2]=b+(d>>2<<2);c[f>>2]=b+(g<<2);if(!e)return 0;$A(e);return 0}function td(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;f=aa;aa=aa+16|0;g=f;j=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(j)|0;h=_A(80)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=j;c[h+16>>2]=i;c[h+20>>2]=d;d=h+24|0;c[d>>2]=0;c[d+4>>2]=0;c[h+32>>2]=7;c[h>>2]=288908;Wn(h+40|0,0,0);d=h+56|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];b[d+16>>1]=b[e+16>>1]|0;d=c[a+12>>2]|0;c[g>>2]=h;vl(d,g);d=c[g>>2]|0;c[g>>2]=0;if(!d){aa=f;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=f;return 0}function ud(a){a=a|0;return 0}function vd(a,b){a=a|0;b=b|0;return 0}function wd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+88|0;g=(c[a+60>>2]|0)+b|0;f=a+96|0;e=c[h>>2]|0;if((c[f>>2]|0)-e>>2>>>0>=g>>>0)return 0;a=a+92|0;if(g>>>0>1073741823)U();d=(c[a>>2]|0)-e|0;b=_A(g<<2)|0;if((d|0)>0)sC(b|0,e|0,d|0)|0;c[h>>2]=b;c[a>>2]=b+(d>>2<<2);c[f>>2]=b+(g<<2);if(!e)return 0;$A(e);return 0}function xd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=aa;aa=aa+16|0;h=g;k=c[b+36>>2]|0;d=c[(c[b+4>>2]|0)+8>>2]|0;j=Uz(k)|0;i=_A(68)|0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=k;c[i+16>>2]=j;c[i+20>>2]=d;d=i+24|0;c[d>>2]=0;c[d+4>>2]=0;c[i+32>>2]=1;c[i>>2]=288892;Wn(i+36|0,0,0);c[i+56>>2]=0;c[i+60>>2]=0;c[i+64>>2]=0;c[i+48>>2]=e;a[i+52>>0]=f&1;d=c[b+12>>2]|0;c[h>>2]=i;ol(d,h);d=c[h>>2]|0;c[h>>2]=0;if(!d){aa=g;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=g;return 0}function yd(a,b){a=a|0;b=b|0;c[a+32>>2]=(c[(c[(c[a+12>>2]|0)+88>>2]|0)+(b<<2)>>2]|0)+20;return 0}function zd(a,b){a=a|0;b=b|0;c[a+32>>2]=0;return 0}function Ad(a,b){a=a|0;b=b|0;return 0}function Bd(a){a=a|0;return 0}function Cd(a,b){a=a|0;b=b|0;return 0}function Dd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+112|0;g=a+120|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+116|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function Ed(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+64|0;j=p+24|0;k=p;o=p+20|0;l=b+4|0;m=b+36|0;d=c[m>>2]|0;i=c[(c[l>>2]|0)+8>>2]|0;n=Uz(d)|0;h=_A(88)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=d;c[h+16>>2]=n;c[h+20>>2]=i;i=h+24|0;c[i>>2]=0;c[i+4>>2]=0;c[h+32>>2]=3;c[h>>2]=288876;i=h+36|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;n=h+52|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(n,-1,j);Wn(j,c[g>>2]|0,c[g+4>>2]|0);d=h+47|0;if((a[d>>0]|0)<0){a[c[i>>2]>>0]=0;c[h+40>>2]=0}else{a[i>>0]=0;a[d>>0]=0}pB(i);c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];g=c[m>>2]|0;d=c[(c[l>>2]|0)+8>>2]|0;m=k+12|0;c[m>>2]=0;c[m+4>>2]=0;m=Uz(g)|0;c[k>>2]=g;c[k+4>>2]=m;c[k+8>>2]=d;El(j,f,k);Hl(n,j)|0;Ml(j);c[h+48>>2]=e;d=c[b+12>>2]|0;c[o>>2]=h;il(d,o);d=c[o>>2]|0;c[o>>2]=0;if(!d){aa=p;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=p;return 0}function Fd(a){a=a|0;return 0}function Gd(a,b){a=a|0;b=b|0;return 0}function Hd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=aa;aa=aa+80|0;g=e+40|0;d=e+4|0;f=e;h=a+4|0;j=a+36|0;l=c[j>>2]|0;i=c[(c[h>>2]|0)+8>>2]|0;k=g+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[g>>2]=l;c[g+4>>2]=k;c[g+8>>2]=i;El(d,b,g);b=c[a+12>>2]|0;j=c[j>>2]|0;h=c[(c[h>>2]|0)+8>>2]|0;i=Uz(j)|0;a=_A(72)|0;Il(g,d);c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=j;c[a+16>>2]=i;c[a+20>>2]=h;h=a+24|0;c[h>>2]=0;c[h+4>>2]=0;c[a+32>>2]=9;c[a>>2]=288860;Il(a+36|0,g);c[f>>2]=a;Ml(g);wl(b,f);b=c[f>>2]|0;c[f>>2]=0;if(!b){Ml(d);aa=e;return 0}ma[c[(c[b>>2]|0)+4>>2]&255](b);Ml(d);aa=e;return 0}function Id(a){a=a|0;return 0}function Jd(a,b){a=a|0;b=b|0;return 0}function Kd(a,b){a=a|0;b=b|0;return 0}function Ld(a,b,d){a=a|0;b=b|0;d=d|0;d=c[(c[(c[a+12>>2]|0)+76>>2]|0)+(b<<2)>>2]|0;c[a+16>>2]=d;bh(a,0,d+108|0,0);return 0}function Md(a,b){a=a|0;b=b|0;return 0}function Nd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i+4|0;g=i;b=c[a+16>>2]|0;c[h>>2]=e;c[g>>2]=d;if(!d){aa=i;return 0}f=b+80|0;a=c[f>>2]|0;if(a>>>0<(c[b+84>>2]|0)>>>0){c[a>>2]=e;c[a+4>>2]=d;c[f>>2]=a+8;aa=i;return 0}else{wi(b+76|0,h,g);aa=i;return 0}return 0}function Od(a,b){a=a|0;b=b|0;return 0}function Pd(a){a=a|0;return 0}function Qd(a,b){a=a|0;b=b|0;return 0}function Rd(a,b){a=a|0;b=b|0;return 0}function Sd(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Td(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Ud(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Vd(a,b){a=a|0;b=b|0;return 0}function Wd(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Xd(a,b){a=a|0;b=b|0;return 0}function Yd(a,b){a=a|0;b=b|0;return 0}function Zd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[i+28>>2]=0;c[g>>2]=288844;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function _d(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=3;c[g>>2]=288828;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function $d(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=1;c[g>>2]=288812;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function ae(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=2;c[g>>2]=288796;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function be(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=5;c[g>>2]=288780;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function ce(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=4;c[g>>2]=288764;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function de(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=6;c[f>>2]=288748;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function ee(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;h=k;f=k+8|0;j=_A(144)|0;g=j+4|0;i=j+8|0;e=j+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[j+32>>2]=7;c[j>>2]=288732;g=j+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+12>>0]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(j+52|0,-1,f);f=j+88|0;g=f+56|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));ah(b,j+48|0,d);f=c[b+36>>2]|0;g=c[(c[b+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[e>>2]=f;c[j+16>>2]=d;c[j+20>>2]=g;e=j+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[b+20>>2]|0;g=(c[b+24>>2]|0)-e|0;d=(g|0)/12|0;if(!g){c[h>>2]=0;c[h+4>>2]=d;Mg(b,292825,h);ma[c[(c[j>>2]|0)+4>>2]&255](j);b=1;aa=k;return b|0}d=c[e+((d+-1|0)*12|0)+4>>2]|0;f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[i>>2]=e;e=e+4|0}c[e>>2]=j;c[f>>2]=j;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;bh(b,1,j+112|0,0);b=0;aa=k;return b|0}function fe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=8;c[f>>2]=288716;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=9;c[f>>2]=288700;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function he(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;g=aa;aa=aa+64|0;e=g;h=g+28|0;j=g+8|0;f=_A(108)|0;k=f+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[f+32>>2]=10;c[f>>2]=288684;k=f+36|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(k,-1,h);i=f+72|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(i,-1,h);c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(h,b,j);Hl(k,h)|0;Ml(h);c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(h,d,j);Hl(i,h)|0;Ml(h);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);k=1;aa=g;return k|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;k=d+8|0;c[k>>2]=(c[k>>2]|0)+1;k=0;aa=g;return k|0}function ie(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+64|0;n=q;l=q+28|0;m=q+8|0;p=_A(84)|0;j=p+4|0;o=p+8|0;k=p+12|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[j+24>>2]=0;c[p+32>>2]=11;c[p>>2]=288668;j=p+36|0;c[j>>2]=0;h=p+40|0;c[h>>2]=0;c[p+44>>2]=0;f=p+48|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(f,-1,l);c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(l,e,m);Hl(f,l)|0;Ml(l);e=c[h>>2]|0;f=c[j>>2]|0;g=(e-f|0)/36|0;if(g>>>0>=b>>>0){if(g>>>0>b>>>0){f=f+(b*36|0)|0;if((f|0)!=(e|0))do{e=e+-36|0;Ml(e)}while((e|0)!=(f|0));c[h>>2]=f}if(b|0)i=9}else{ei(j,b-g|0);i=9}if((i|0)==9){e=0;do{i=c[d+(e<<2)>>2]|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(l,i,m);Hl((c[j>>2]|0)+(e*36|0)|0,l)|0;Ml(l);e=e+1|0}while((e|0)!=(b|0))}f=c[a+36>>2]|0;e=c[(c[a+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[k>>2]=f;c[p+16>>2]=d;c[p+20>>2]=e;e=p+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[a+20>>2]|0;d=(c[a+24>>2]|0)-e|0;f=(d|0)/12|0;if(!d){c[n>>2]=0;c[n+4>>2]=f;Mg(a,292825,n);ma[c[(c[p>>2]|0)+4>>2]&255](p);p=1;aa=q;return p|0}f=c[e+((f+-1|0)*12|0)+4>>2]|0;g=f+4|0;e=c[g>>2]|0;if(!e)e=f;else{c[o>>2]=e;e=e+4|0}c[e>>2]=p;c[g>>2]=p;p=f+8|0;c[p>>2]=(c[p>>2]|0)+1;p=0;aa=q;return p|0}function je(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=12;c[f>>2]=288652;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function ke(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=aa;aa=aa+64|0;m=o;g=o+28|0;h=o+8|0;n=_A(136)|0;k=n+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[n+32>>2]=13;c[n>>2]=288636;k=n+36|0;a[k>>0]=0;f=n+40|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(f,-1,g);i=n+76|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;j=n+100|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(j,-1,g);a[k>>0]=1;k=b+4|0;l=b+36|0;r=c[l>>2]|0;p=c[(c[k>>2]|0)+8>>2]|0;q=h+12|0;c[q>>2]=0;c[q+4>>2]=0;q=Uz(r)|0;c[h>>2]=r;c[h+4>>2]=q;c[h+8>>2]=p;El(g,d,h);Hl(f,g)|0;Ml(g);d=c[(c[(c[b+12>>2]|0)+124>>2]|0)+(d<<2)>>2]|0;f=d+12|0;if((f|0)!=(i|0)){Bg(i,c[f>>2]|0,c[d+16>>2]|0);Bg(n+88|0,c[d+24>>2]|0,c[d+28>>2]|0)};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(g,e,h);Hl(j,g)|0;Ml(g);f=c[l>>2]|0;d=c[(c[k>>2]|0)+8>>2]|0;r=Uz(f)|0;c[n+12>>2]=f;c[n+16>>2]=r;c[n+20>>2]=d;d=n+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[b+20>>2]|0;r=(c[b+24>>2]|0)-d|0;f=(r|0)/12|0;if(!r){c[m>>2]=0;c[m+4>>2]=f;Mg(b,292825,m);ma[c[(c[n>>2]|0)+4>>2]&255](n);r=1;aa=o;return r|0}f=c[d+((f+-1|0)*12|0)+4>>2]|0;g=f+4|0;d=c[g>>2]|0;if(!d)d=f;else{c[n+8>>2]=d;d=d+4|0}c[d>>2]=n;c[g>>2]=n;r=f+8|0;c[r>>2]=(c[r>>2]|0)+1;r=0;aa=o;return r|0}function le(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+32|0;g=h+16|0;d=h;b=c[a+20>>2]|0;e=(c[a+24>>2]|0)-b|0;f=(e|0)/12|0;if(!e){c[d>>2]=0;c[d+4>>2]=f;Mg(a,292825,d);g=1;aa=h;return g|0}e=f+-1|0;d=b+(e*12|0)|0;if((c[d>>2]|0)!=5){Mg(a,295333,h+8|0);g=1;aa=h;return g|0}if(f>>>0>1){c[d>>2]=6;c[b+(e*12|0)+4>>2]=(c[(c[b+((f+-2|0)*12|0)+4>>2]|0)+4>>2]|0)+144;g=0;aa=h;return g|0}else{c[g>>2]=1;c[g+4>>2]=f;Mg(a,292825,g);g=1;aa=h;return g|0}return 0}function me(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=14;c[f>>2]=288620;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function ne(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=16;c[f>>2]=288604;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function oe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=17;c[f>>2]=288588;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function pe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+32|0;f=h+8|0;d=h;b=c[a+20>>2]|0;e=(c[a+24>>2]|0)-b|0;g=(e|0)/12|0;if(!e){c[d>>2]=0;c[d+4>>2]=g;Mg(a,292825,d);a=1;aa=h;return a|0}e=g+-1|0;if(g>>>0<=1){c[f>>2]=1;c[f+4>>2]=g;Mg(a,292825,f);a=1;aa=h;return a|0}d=b+(e*12|0)|0;if((c[d>>2]|0)==3){g=c[(c[b+((g+-2|0)*12|0)+4>>2]|0)+4>>2]|0;i=c[a+36>>2]|0;a=c[(c[a+4>>2]|0)+8>>2]|0;f=Uz(i)|0;c[g+124>>2]=i;c[g+128>>2]=f;c[g+132>>2]=a;a=g+136|0;c[a>>2]=0;c[a+4>>2]=0;c[b+(e*12|0)+4>>2]=g+144;c[d>>2]=4;a=0;aa=h;return a|0}else{Mg(a,295108,h+16|0);i=1;aa=h;return i|0}return 0}function qe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+32|0;k=m+16|0;g=m+8|0;e=m;i=a+20|0;j=a+24|0;d=c[j>>2]|0;b=c[i>>2]|0;f=d-b|0;h=(f|0)/12|0;if(!f){c[e>>2]=0;c[e+4>>2]=h;Mg(a,292825,e);l=1;aa=m;return l|0}f=b;if(h>>>0<=1){c[g>>2]=1;c[g+4>>2]=h;Mg(a,292825,g);l=1;aa=m;return l|0}e=c[(c[f+((h+-2|0)*12|0)+4>>2]|0)+4>>2]|0;switch(c[f+((h+-1|0)*12|0)>>2]|0){case 1:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+124>>2]=f;c[l+128>>2]=g;c[l+132>>2]=h;b=b+136|0;l=11;break}case 2:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+124>>2]=f;c[l+128>>2]=g;c[l+132>>2]=h;b=b+136|0;l=11;break}case 3:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+124>>2]=f;c[l+128>>2]=g;c[l+132>>2]=h;b=b+136|0;l=11;break}case 4:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+156>>2]=f;c[l+160>>2]=g;c[l+164>>2]=h;b=b+168|0;l=11;break}case 5:{f=c[a+36>>2]|0;h=c[(c[a+4>>2]|0)+8>>2]|0;g=Uz(f)|0;b=e;l=e;c[b+124>>2]=f;c[l+128>>2]=g;c[l+132>>2]=h;b=b+136|0;l=11;break}default:{}}if((l|0)==11){d=b;c[d>>2]=0;c[d+4>>2]=0;d=c[j>>2]|0;b=c[i>>2]|0}if((d|0)==(b|0)){Mg(a,293067,k);l=1;aa=m;return l|0}else{c[j>>2]=d+-12;l=0;aa=m;return l|0}return 0}function re(a){a=a|0;return 0}function se(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+80|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;f=c[h>>2]|0;d=c[(c[g>>2]|0)+8>>2]|0;j=k+12|0;c[j>>2]=0;c[j+4>>2]=0;j=Uz(f)|0;c[k>>2]=f;c[k+4>>2]=j;c[k+8>>2]=d;Pl(e,b,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=c[h>>2]|0;h=c[(c[g>>2]|0)+8>>2]|0;d=Uz(f)|0;c[b>>2]=f;c[k+16>>2]=d;c[k+20>>2]=h;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);k=1;aa=l;return k|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;k=d+8|0;c[k>>2]=(c[k>>2]|0)+1;k=0;aa=l;return k|0}function te(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=aa;aa=aa+80|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;m=c[h>>2]|0;j=c[(c[g>>2]|0)+8>>2]|0;f=k+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(m)|0;c[k>>2]=m;c[k+4>>2]=f;c[k+8>>2]=j;Ql(e,b,d,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));h=c[h>>2]|0;m=c[(c[g>>2]|0)+8>>2]|0;d=Uz(h)|0;c[b>>2]=h;c[k+16>>2]=d;c[k+20>>2]=m;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;m=(c[a+24>>2]|0)-b|0;d=(m|0)/12|0;if(!m){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);m=1;aa=l;return m|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;m=d+8|0;c[m>>2]=(c[m>>2]|0)+1;m=0;aa=l;return m|0}function ue(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=aa;aa=aa+96|0;d=l+72|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;m=c[h>>2]|0;j=c[(c[g>>2]|0)+8>>2]|0;f=k+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(m)|0;c[k>>2]=m;c[k+4>>2]=f;c[k+8>>2]=j;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];Rl(e,d,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));h=c[h>>2]|0;m=c[(c[g>>2]|0)+8>>2]|0;d=Uz(h)|0;c[b>>2]=h;c[k+16>>2]=d;c[k+20>>2]=m;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;m=(c[a+24>>2]|0)-b|0;d=(m|0)/12|0;if(!m){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);m=1;aa=l;return m|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;m=d+8|0;c[m>>2]=(c[m>>2]|0)+1;m=0;aa=l;return m|0}function ve(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=18;c[f>>2]=287932;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function we(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=19;c[f>>2]=288572;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function xe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+80|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;f=c[h>>2]|0;d=c[(c[g>>2]|0)+8>>2]|0;j=k+12|0;c[j>>2]=0;c[j+4>>2]=0;j=Uz(f)|0;c[k>>2]=f;c[k+4>>2]=j;c[k+8>>2]=d;Nl(e,b,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));f=c[h>>2]|0;h=c[(c[g>>2]|0)+8>>2]|0;d=Uz(f)|0;c[b>>2]=f;c[k+16>>2]=d;c[k+20>>2]=h;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);k=1;aa=l;return k|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;k=d+8|0;c[k>>2]=(c[k>>2]|0)+1;k=0;aa=l;return k|0}function ye(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=aa;aa=aa+80|0;i=l+40|0;e=l;k=l+48|0;g=a+4|0;h=a+36|0;m=c[h>>2]|0;j=c[(c[g>>2]|0)+8>>2]|0;f=k+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(m)|0;c[k>>2]=m;c[k+4>>2]=f;c[k+8>>2]=j;Ol(e,b,d,k);k=_A(80)|0;d=k+4|0;j=k+8|0;b=k+12|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[k+32>>2]=15;c[k>>2]=287916;d=k+40|0;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));h=c[h>>2]|0;m=c[(c[g>>2]|0)+8>>2]|0;d=Uz(h)|0;c[b>>2]=h;c[k+16>>2]=d;c[k+20>>2]=m;b=k+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;m=(c[a+24>>2]|0)-b|0;d=(m|0)/12|0;if(!m){c[i>>2]=0;c[i+4>>2]=d;Mg(a,292825,i);ma[c[(c[k>>2]|0)+4>>2]&255](k);m=1;aa=l;return m|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;e=d+4|0;b=c[e>>2]|0;if(!b)b=d;else{c[j>>2]=b;b=b+4|0}c[b>>2]=k;c[e>>2]=k;m=d+8|0;c[m>>2]=(c[m>>2]|0)+1;m=0;aa=l;return m|0}function ze(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;h=k;f=k+8|0;j=_A(176)|0;g=j+4|0;i=j+8|0;e=j+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[j+32>>2]=20;c[j>>2]=288556;g=j+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+12>>0]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(j+52|0,-1,f);f=j+88|0;g=f+88|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));ah(b,j+48|0,d);f=c[b+36>>2]|0;g=c[(c[b+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[e>>2]=f;c[j+16>>2]=d;c[j+20>>2]=g;e=j+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[b+20>>2]|0;g=(c[b+24>>2]|0)-e|0;d=(g|0)/12|0;if(!g){c[h>>2]=0;c[h+4>>2]=d;Mg(b,292825,h);ma[c[(c[j>>2]|0)+4>>2]&255](j);b=1;aa=k;return b|0}d=c[e+((d+-1|0)*12|0)+4>>2]|0;f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[i>>2]=e;e=e+4|0}c[e>>2]=j;c[f>>2]=j;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;bh(b,3,j+112|0,0);b=0;aa=k;return b|0}function Ae(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=21;c[g>>2]=288540;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function Be(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=22;c[f>>2]=288524;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function Ce(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=23;c[f>>2]=288508;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function De(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=24;c[f>>2]=288492;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function Ee(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;h=k;f=k+8|0;j=_A(144)|0;g=j+4|0;i=j+8|0;e=j+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[j+32>>2]=25;c[j>>2]=288476;g=j+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+12>>0]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(j+52|0,-1,f);f=j+88|0;g=f+56|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));ah(b,j+48|0,d);f=c[b+36>>2]|0;g=c[(c[b+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[e>>2]=f;c[j+16>>2]=d;c[j+20>>2]=g;e=j+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[b+20>>2]|0;g=(c[b+24>>2]|0)-e|0;d=(g|0)/12|0;if(!g){c[h>>2]=0;c[h+4>>2]=d;Mg(b,292825,h);ma[c[(c[j>>2]|0)+4>>2]&255](j);b=1;aa=k;return b|0}d=c[e+((d+-1|0)*12|0)+4>>2]|0;f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[i>>2]=e;e=e+4|0}c[e>>2]=j;c[f>>2]=j;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;bh(b,2,j+112|0,0);b=0;aa=k;return b|0}function Fe(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=26;c[f>>2]=288460;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=27;c[f>>2]=288444;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function He(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=28;c[f>>2]=288428;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Ie(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=29;c[f>>2]=288412;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Je(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=30;c[f>>2]=288396;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Ke(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=31;c[f>>2]=288380;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Le(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=44;c[f>>2]=288364;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Me(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=45;c[f>>2]=288348;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Ne(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=46;c[f>>2]=288332;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Oe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=47;c[f>>2]=288316;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Pe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=50;c[f>>2]=288300;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Qe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=48;c[f>>2]=288284;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Re(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=49;c[f>>2]=288268;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Se(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=34;c[f>>2]=288252;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Te(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=33;c[f>>2]=288236;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Ue(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=32;c[f>>2]=288220;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Ve(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=35;c[f>>2]=288204;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function We(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=36;c[f>>2]=288188;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function Xe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(g,b,f);f=_A(72)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=37;c[f>>2]=288172;Il(f+36|0,g);d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);i=1;Ml(g);aa=h;return i|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;Ml(g);aa=h;return i|0}function Ye(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;o=aa;aa=aa+64|0;m=o;g=o+28|0;h=o+8|0;n=_A(136)|0;k=n+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[k+24>>2]=0;c[n+32>>2]=38;c[n>>2]=288156;k=n+36|0;a[k>>0]=0;f=n+40|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(f,-1,g);i=n+76|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;j=n+100|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(j,-1,g);a[k>>0]=1;k=b+4|0;l=b+36|0;r=c[l>>2]|0;p=c[(c[k>>2]|0)+8>>2]|0;q=h+12|0;c[q>>2]=0;c[q+4>>2]=0;q=Uz(r)|0;c[h>>2]=r;c[h+4>>2]=q;c[h+8>>2]=p;El(g,d,h);Hl(f,g)|0;Ml(g);d=c[(c[(c[b+12>>2]|0)+124>>2]|0)+(d<<2)>>2]|0;f=d+12|0;if((f|0)!=(i|0)){Bg(i,c[f>>2]|0,c[d+16>>2]|0);Bg(n+88|0,c[d+24>>2]|0,c[d+28>>2]|0)};c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(g,e,h);Hl(j,g)|0;Ml(g);f=c[l>>2]|0;d=c[(c[k>>2]|0)+8>>2]|0;r=Uz(f)|0;c[n+12>>2]=f;c[n+16>>2]=r;c[n+20>>2]=d;d=n+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[b+20>>2]|0;r=(c[b+24>>2]|0)-d|0;f=(r|0)/12|0;if(!r){c[m>>2]=0;c[m+4>>2]=f;Mg(b,292825,m);ma[c[(c[n>>2]|0)+4>>2]&255](n);r=1;aa=o;return r|0}f=c[d+((f+-1|0)*12|0)+4>>2]|0;g=f+4|0;d=c[g>>2]|0;if(!d)d=f;else{c[n+8>>2]=d;d=d+4|0}c[d>>2]=n;c[g>>2]=n;r=f+8|0;c[r>>2]=(c[r>>2]|0)+1;r=0;aa=o;return r|0}function Ze(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=39;c[f>>2]=288140;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function _e(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=43;c[g>>2]=288124;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function $e(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=aa;aa=aa+64|0;e=h;g=h+28|0;f=h+8|0;i=a+4|0;d=a+36|0;l=c[d>>2]|0;j=c[(c[i>>2]|0)+8>>2]|0;k=f+12|0;c[k>>2]=0;c[k+4>>2]=0;k=Uz(l)|0;c[f>>2]=l;c[f+4>>2]=k;c[f+8>>2]=j;El(g,b,f);f=_A(72)|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=52;c[f>>2]=288108;Il(f+36|0,g);d=c[d>>2]|0;b=c[(c[i>>2]|0)+8>>2]|0;i=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=i;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;i=(c[a+24>>2]|0)-b|0;d=(i|0)/12|0;if(!i){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);l=1;Ml(g);aa=h;return l|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;l=d+8|0;c[l>>2]=(c[l>>2]|0)+1;l=0;Ml(g);aa=h;return l|0}function af(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;h=k;f=k+8|0;j=_A(156)|0;g=j+4|0;i=j+8|0;e=j+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[j+32>>2]=53;c[j>>2]=288092;g=j+36|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+12>>0]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(j+52|0,-1,f);f=j+88|0;g=f+68|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));ah(b,j+48|0,d);f=c[b+36>>2]|0;g=c[(c[b+4>>2]|0)+8>>2]|0;d=Uz(f)|0;c[e>>2]=f;c[j+16>>2]=d;c[j+20>>2]=g;e=j+24|0;c[e>>2]=0;c[e+4>>2]=0;e=c[b+20>>2]|0;g=(c[b+24>>2]|0)-e|0;d=(g|0)/12|0;if(!g){c[h>>2]=0;c[h+4>>2]=d;Mg(b,292825,h);ma[c[(c[j>>2]|0)+4>>2]&255](j);b=1;aa=k;return b|0}d=c[e+((d+-1|0)*12|0)+4>>2]|0;f=d+4|0;e=c[f>>2]|0;if(!e)e=d;else{c[i>>2]=e;e=e+4|0}c[e>>2]=j;c[f>>2]=j;i=d+8|0;c[i>>2]=(c[i>>2]|0)+1;bh(b,5,j+112|0,j);b=0;aa=k;return b|0}function bf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=54;c[f>>2]=288076;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function cf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(40)|0;d=c[b>>2]|0;b=f+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;c[f+32>>2]=51;c[f>>2]=288060;c[f+36>>2]=d;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function df(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(36)|0;d=f+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[f+32>>2]=55;c[f>>2]=288044;d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0}function ef(a,b){a=a|0;b=b|0;var d=0,e=0;e=aa;aa=aa+16|0;d=a+24|0;b=c[d>>2]|0;if((b|0)==(c[a+20>>2]|0)){Mg(a,293067,e);a=1;aa=e;return a|0}else{c[d>>2]=b+-12;c[a+16>>2]=0;a=0;aa=e;return a|0}return 0}function ff(a){a=a|0;return 0}function gf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=40;c[g>>2]=288028;c[g+36>>2]=b;b=g+40|0;c[b>>2]=d;c[b+4>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function hf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;e=g;f=_A(56)|0;b=c[b>>2]|0;h=f+4|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;c[f+32>>2]=41;c[f>>2]=288012;c[f+36>>2]=b;b=f+40|0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];d=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;h=Uz(d)|0;c[f+12>>2]=d;c[f+16>>2]=h;c[f+20>>2]=b;b=f+24|0;c[b>>2]=0;c[b+4>>2]=0;b=c[a+20>>2]|0;h=(c[a+24>>2]|0)-b|0;d=(h|0)/12|0;if(!h){c[e>>2]=0;c[e+4>>2]=d;Mg(a,292825,e);ma[c[(c[f>>2]|0)+4>>2]&255](f);h=1;aa=g;return h|0}d=c[b+((d+-1|0)*12|0)+4>>2]|0;a=d+4|0;b=c[a>>2]|0;if(!b)b=d;else{c[f+8>>2]=b;b=b+4|0}c[b>>2]=f;c[a>>2]=f;h=d+8|0;c[h>>2]=(c[h>>2]|0)+1;h=0;aa=g;return h|0} +function hj(b,e){b=b|0;e=e|0;var g=0,h=0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0;x=a[e+11>>0]|0;z=x<<24>>24<0;y=z?c[e>>2]|0:e;x=z?c[e+4>>2]|0:x&255;if(x>>>0>3){k=y;n=x;l=x;while(1){z=v(d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24,1540483477)|0;n=(v(z>>>24^z,1540483477)|0)^(v(n,1540483477)|0);l=l+-4|0;if(l>>>0<=3)break;else k=k+4|0}z=x+-4|0;l=z&-4;m=y+(l+4)|0;k=n;l=z-l|0}else{m=y;k=x;l=x}switch(l|0){case 3:{o=d[m+2>>0]<<16^k;B=7;break}case 2:{o=k;B=7;break}case 1:{p=k;B=8;break}default:q=k}if((B|0)==7){p=d[m+1>>0]<<8^o;B=8}if((B|0)==8)q=v(p^d[m>>0],1540483477)|0;z=v(q>>>13^q,1540483477)|0;z=z>>>15^z;t=b+4|0;s=c[t>>2]|0;w=(s|0)==0;a:do if(!w){q=s+-1|0;l=(q&s|0)==0;if(!l)if(z>>>0<s>>>0)r=z;else r=(z>>>0)%(s>>>0)|0;else r=z&q;k=c[(c[b>>2]|0)+(r<<2)>>2]|0;if((k|0)!=0?(h=c[k>>2]|0,(h|0)!=0):0){p=(x|0)==0;if(l){if(p){g=h;while(1){y=c[g+4>>2]|0;if(!((y|0)==(z|0)|(y&q|0)==(r|0))){g=r;break a}y=a[g+8+11>>0]|0;if(!((y<<24>>24<0?c[g+12>>2]|0:y&255)|0)){k=g;break}g=c[g>>2]|0;if(!g){g=r;break a}}b=k+20|0;return b|0}k=h;b:while(1){o=c[k+4>>2]|0;if(!((o|0)==(z|0)|(o&q|0)==(r|0))){g=r;break a}l=k+8|0;n=a[l+11>>0]|0;o=n<<24>>24<0;n=n&255;do if(((o?c[k+12>>2]|0:n)|0)==(x|0)){m=c[l>>2]|0;if(o)if(!(Tz(m,y,x)|0)){B=68;break b}else break;if((a[y>>0]|0)==(m&255)<<24>>24){m=y;do{n=n+-1|0;l=l+1|0;if(!n){B=68;break b}m=m+1|0}while((a[l>>0]|0)==(a[m>>0]|0))}}while(0);k=c[k>>2]|0;if(!k){g=r;break a}}if((B|0)==68){b=k+20|0;return b|0}}if(p){while(1){g=c[h+4>>2]|0;if((g|0)!=(z|0)){if(g>>>0>=s>>>0)g=(g>>>0)%(s>>>0)|0;if((g|0)!=(r|0)){g=r;break a}}y=a[h+8+11>>0]|0;if(!((y<<24>>24<0?c[h+12>>2]|0:y&255)|0)){k=h;break}h=c[h>>2]|0;if(!h){g=r;break a}}b=k+20|0;return b|0}c:while(1){k=c[h+4>>2]|0;if((k|0)!=(z|0)){if(k>>>0>=s>>>0)k=(k>>>0)%(s>>>0)|0;if((k|0)!=(r|0)){g=r;break a}}k=h+8|0;m=a[k+11>>0]|0;n=m<<24>>24<0;m=m&255;do if(((n?c[h+12>>2]|0:m)|0)==(x|0)){l=c[k>>2]|0;if(n)if(!(Tz(l,y,x)|0)){k=h;B=68;break c}else break;if((a[y>>0]|0)==(l&255)<<24>>24){l=y;do{m=m+-1|0;k=k+1|0;if(!m){k=h;B=68;break c}l=l+1|0}while((a[k>>0]|0)==(a[l>>0]|0))}}while(0);h=c[h>>2]|0;if(!h){g=r;break a}}if((B|0)==68){b=k+20|0;return b|0}}else g=r}else g=0;while(0);m=_A(24)|0;cB(m+8|0,e);c[m+20>>2]=0;c[m+4>>2]=z;c[m>>2]=0;l=b+12|0;j=+(((c[l>>2]|0)+1|0)>>>0);i=+f[b+16>>2];do if(w|i*+(s>>>0)<j){g=s<<1|(s>>>0<3|(s+-1&s|0)!=0)&1;h=~~+u(+(j/i))>>>0;jj(b,g>>>0<h>>>0?h:g);g=c[t>>2]|0;h=g+-1|0;if(!(h&g)){k=g;g=h&z;break}if(z>>>0<g>>>0){k=g;g=z}else{k=g;g=(z>>>0)%(g>>>0)|0}}else k=s;while(0);h=(c[b>>2]|0)+(g<<2)|0;g=c[h>>2]|0;if(!g){g=b+8|0;c[m>>2]=c[g>>2];c[g>>2]=m;c[h>>2]=g;g=c[m>>2]|0;if(g|0){g=c[g+4>>2]|0;h=k+-1|0;if(h&k){if(g>>>0>=k>>>0)g=(g>>>0)%(k>>>0)|0}else g=g&h;A=(c[b>>2]|0)+(g<<2)|0;B=66}}else{c[m>>2]=c[g>>2];A=g;B=66}if((B|0)==66)c[A>>2]=m;c[l>>2]=(c[l>>2]|0)+1;b=m;b=b+20|0;return b|0}function ij(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+4|0;f=c[a>>2]|0;h=(c[k>>2]|0)-f>>4;g=h+1|0;if(g>>>0>268435455)HB();l=a+8|0;i=(c[l>>2]|0)-f|0;j=i>>3;j=i>>4>>>0<134217727?(j>>>0<g>>>0?g:j):268435455;do if(j)if(j>>>0>268435455)U();else{m=_A(j<<4)|0;break}else m=0;while(0);i=m+(h<<4)|0;Gj(i,c[b>>2]|0,c[d>>2]|0,c[e>>2]|0,0);f=c[a>>2]|0;h=(c[k>>2]|0)-f|0;g=i+(0-(h>>4)<<4)|0;if((h|0)>0)sC(g|0,f|0,h|0)|0;c[a>>2]=g;c[k>>2]=i+16;c[l>>2]=m+(j<<4);if(!f)return;$A(f);return}function jj(a,b){a=a|0;b=b|0;var d=0,e=0,g=0;if((b|0)!=1){if(b+-1&b)b=YA(b)|0}else b=2;e=c[a+4>>2]|0;if(b>>>0>e>>>0){kj(a,b);return}if(b>>>0>=e>>>0)return;d=~~+u(+(+((c[a+12>>2]|0)>>>0)/+f[a+16>>2]))>>>0;if(e>>>0>2&(e+-1&e|0)==0){g=1<<32-(w(d+-1|0)|0);d=d>>>0<2?d:g}else d=YA(d)|0;b=b>>>0<d>>>0?d:b;if(b>>>0>=e>>>0)return;kj(a,b);return}function kj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=b+4|0;if(!d){e=c[b>>2]|0;c[b>>2]=0;if(e|0)$A(e);c[f>>2]=0;return}if(d>>>0>1073741823)U();r=_A(d<<2)|0;e=c[b>>2]|0;c[b>>2]=r;if(e|0)$A(e);c[f>>2]=d;e=0;do{c[(c[b>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=(d|0));f=b+8|0;g=c[f>>2]|0;if(!g)return;e=c[g+4>>2]|0;q=d+-1|0;r=(q&d|0)==0;if(!r){if(e>>>0>=d>>>0)e=(e>>>0)%(d>>>0)|0}else e=e&q;c[(c[b>>2]|0)+(e<<2)>>2]=f;f=c[g>>2]|0;if(!f)return;p=g;while(1){g=c[f+4>>2]|0;if(!r){if(g>>>0>=d>>>0)g=(g>>>0)%(d>>>0)|0}else g=g&q;do if((g|0)==(e|0))g=f;else{h=(c[b>>2]|0)+(g<<2)|0;if(!(c[h>>2]|0)){c[h>>2]=p;e=g;g=f;break}h=c[f>>2]|0;a:do if(!h)h=f;else{n=f+8|0;m=a[n+11>>0]|0;k=m<<24>>24<0;m=m&255;o=k?c[f+12>>2]|0:m;l=(o|0)==0;if(k){i=f;while(1){j=h+8|0;m=a[j+11>>0]|0;k=m<<24>>24<0;if((o|0)!=((k?c[h+12>>2]|0:m&255)|0)){h=i;break a}if(!l?Tz(c[n>>2]|0,k?c[j>>2]|0:j,o)|0:0){h=i;break a}i=c[h>>2]|0;if(!i)break a;else{m=h;h=i;i=m}}}if(l){i=f;while(1){o=a[h+8+11>>0]|0;if((o<<24>>24<0?c[h+12>>2]|0:o&255)|0){h=i;break a}i=c[h>>2]|0;if(!i)break a;else{o=h;h=i;i=o}}}l=f;while(1){i=h+8|0;k=a[i+11>>0]|0;j=k<<24>>24<0;if((o|0)!=((j?c[h+12>>2]|0:k&255)|0)){h=l;break a}i=j?c[i>>2]|0:i;if((a[i>>0]|0)!=(c[n>>2]&255)<<24>>24){h=l;break a}j=m;k=n;while(1){j=j+-1|0;k=k+1|0;if(!j)break;i=i+1|0;if((a[k>>0]|0)!=(a[i>>0]|0)){h=l;break a}}i=c[h>>2]|0;if(!i)break;else{l=h;h=i}}}while(0);c[p>>2]=c[h>>2];c[h>>2]=c[c[(c[b>>2]|0)+(g<<2)>>2]>>2];c[c[(c[b>>2]|0)+(g<<2)>>2]>>2]=f;g=p}while(0);f=c[g>>2]|0;if(!f)break;else p=g}return}function lj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=d+40|0;if((c[d+44>>2]|0)==(c[g>>2]|0)?(f=c[d+52>>2]|0,h=(c[d+56>>2]|0)-f|0,f,h>>2>>>0<2):0){e=c[b>>2]|0;if(!h){Yl(e,-64,330934);return}else{aj(e,c[f>>2]|0);return}}e=c[b+8>>2]|0;if(!(a[d>>0]|0))e=al(e,g)|0;else e=Ik(e,d+4|0)|0;Yl(c[b>>2]|0,e,298895);return}function mj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;xa=aa;aa=aa+480|0;wa=xa+456|0;I=xa+448|0;H=xa+440|0;G=xa+432|0;F=xa+424|0;E=xa+416|0;D=xa+408|0;C=xa+400|0;B=xa+392|0;A=xa+384|0;z=xa+376|0;y=xa+368|0;x=xa+360|0;v=xa+352|0;u=xa+344|0;t=xa+336|0;s=xa+328|0;ua=xa+320|0;ta=xa+312|0;sa=xa+304|0;ra=xa+296|0;pa=xa+288|0;oa=xa+280|0;na=xa+272|0;ma=xa+264|0;la=xa+256|0;ka=xa+248|0;ja=xa+240|0;ia=xa+232|0;ga=xa+224|0;ea=xa+216|0;da=xa+208|0;ca=xa+200|0;ba=xa+192|0;$=xa+184|0;_=xa+176|0;Y=xa+168|0;X=xa+160|0;W=xa+152|0;V=xa+144|0;T=xa+136|0;S=xa+128|0;R=xa+120|0;P=xa+112|0;O=xa+104|0;N=xa+96|0;M=xa+88|0;L=xa+80|0;K=xa+72|0;J=xa+64|0;w=xa+56|0;qa=xa+48|0;ha=xa+40|0;Z=xa+32|0;Q=xa+24|0;r=xa+16|0;q=xa;p=xa+464|0;c[b>>2]=d;va=b+4|0;Pn(c[va>>2]|0,298939,q);n=b+32|0;e=a[n+11>>0]|0;o=e<<24>>24<0;nj(b,o?c[n>>2]|0:n,o?c[b+36>>2]|0:e&255);Pn(c[va>>2]|0,298960,r);e=c[b>>2]|0;if((c[e+4>>2]|0)==(c[e>>2]|0)){ua=b+60|0;va=c[va>>2]|0;Pn(va,299034,wa);wa=c[ua>>2]|0;aa=xa;return wa|0}n=b+64|0;k=q+11|0;l=q+4|0;m=p+4|0;j=b+24|0;o=b+56|0;d=b+60|0;i=0;a:while(1){h=c[(c[e>>2]|0)+(i<<2)>>2]|0;if(i|0){Pn(c[va>>2]|0,330984,Q);Pn(c[va>>2]|0,298978,Z)}Pn(c[va>>2]|0,298980,ha);g=c[va>>2]|0;c[qa>>2]=330362;Pn(g,298984,qa);g=h+4|0;f=c[va>>2]|0;c[w>>2]=c[16+(c[g>>2]<<2)>>2];Pn(f,298991,w);Pn(c[va>>2]|0,330984,J);do switch(c[g>>2]|0){case 0:{oj(q,b,299939);g=c[va>>2]|0;c[K>>2]=298996;Pn(g,298984,K);g=c[va>>2]|0;c[L>>2]=c[h+16>>2];Pn(g,331593,L);Pn(c[va>>2]|0,330984,M);g=h+28|0;f=g+11|0;e=a[f>>0]|0;if(e<<24>>24<0)e=c[g+4>>2]|0;else e=e&255;if(e|0){e=c[va>>2]|0;c[N>>2]=313156;Pn(e,298984,N);f=a[f>>0]|0;e=f<<24>>24<0;nj(b,e?c[g>>2]|0:g,e?c[g+4>>2]|0:f&255);Pn(c[va>>2]|0,330984,O)}g=c[va>>2]|0;c[P>>2]=299001;Pn(g,298984,P);g=a[k>>0]|0;f=g<<24>>24<0;Tj(p,f?c[q>>2]|0:q,f?c[l>>2]|0:g&255);nj(b,c[p>>2]|0,c[m>>2]|0);g=a[k>>0]|0;f=g<<24>>24<0;g=f?c[l>>2]|0:g&255;e=r;c[e>>2]=f?c[q>>2]|0:q;c[e+4>>2]=g;e=c[j>>2]|0;if(!e){e=13;break a}h=bj(fa[c[(c[e>>2]|0)+24>>2]&511](e,r)|0,h+8|0,c[o>>2]|0)|0;c[d>>2]=((h|0)==1|(c[d>>2]|0)==1)&1;c[n>>2]=(c[n>>2]|0)+1;if((a[k>>0]|0)<0)$A(c[q>>2]|0);break}case 1:{h=c[h+8>>2]|0;g=c[va>>2]|0;c[R>>2]=298996;Pn(g,298984,R);g=c[va>>2]|0;c[S>>2]=c[h+12>>2];Pn(g,331593,S);Pn(c[va>>2]|0,330984,T);pj(b,h);Pn(c[va>>2]|0,330984,V);g=c[va>>2]|0;c[W>>2]=299010;Pn(g,298984,W);qj(b,h);break}case 2:{f=h+20|0;e=c[va>>2]|0;c[X>>2]=298996;Pn(e,298984,X);e=c[va>>2]|0;c[Y>>2]=c[f+8>>2];Pn(e,331593,Y);Pn(c[va>>2]|0,330984,_);e=f+20|0;if((c[e>>2]|0)==1){g=c[va>>2]|0;c[$>>2]=313156;Pn(g,298984,$);if(!(c[e>>2]|0)){g=c[va>>2]|0;c[ba>>2]=c[f+24>>2];Pn(g,299019,ba)}else{ya=f+24|0;g=a[ya+11>>0]|0;e=g<<24>>24<0;nj(b,e?c[ya>>2]|0:ya,e?c[f+28>>2]|0:g&255)}Pn(c[va>>2]|0,330984,ca)}f=c[va>>2]|0;c[da>>2]=299024;Pn(f,298984,da);f=h+8|0;ya=a[f+11>>0]|0;g=ya<<24>>24<0;nj(b,g?c[f>>2]|0:f,g?c[h+12>>2]|0:ya&255);break}case 3:{g=h+12|0;ya=a[g+11>>0]|0;f=ya<<24>>24<0;rj(b,c[h+8>>2]|0,f?c[g>>2]|0:g,f?c[g+4>>2]|0:ya&255);c[n>>2]=(c[n>>2]|0)+1;break}case 4:{g=h+12|0;ya=a[g+11>>0]|0;f=ya<<24>>24<0;rj(b,c[h+8>>2]|0,f?c[g>>2]|0:g,f?c[g+4>>2]|0:ya&255);c[n>>2]=(c[n>>2]|0)+1;break}case 5:{g=h+12|0;ya=a[g+11>>0]|0;f=ya<<24>>24<0;rj(b,c[h+8>>2]|0,f?c[g>>2]|0:g,f?c[g+4>>2]|0:ya&255);c[n>>2]=(c[n>>2]|0)+1;break}case 6:{g=h+12|0;ya=a[g+11>>0]|0;f=ya<<24>>24<0;rj(b,c[h+8>>2]|0,f?c[g>>2]|0:g,f?c[g+4>>2]|0:ya&255);c[n>>2]=(c[n>>2]|0)+1;break}case 7:{ya=h+8|0;f=c[ya>>2]|0;g=c[va>>2]|0;c[ea>>2]=298996;Pn(g,298984,ea);g=c[va>>2]|0;c[ga>>2]=c[f+12>>2];Pn(g,331593,ga);Pn(c[va>>2]|0,330984,ia);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,ja);ya=c[va>>2]|0;c[ka>>2]=299010;Pn(ya,298984,ka);sj(b,h+12|0);break}case 8:{ya=h+8|0;g=c[ya>>2]|0;h=c[va>>2]|0;c[la>>2]=298996;Pn(h,298984,la);h=c[va>>2]|0;c[ma>>2]=c[g+12>>2];Pn(h,331593,ma);Pn(c[va>>2]|0,330984,na);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,oa);h=c[va>>2]|0;c[pa>>2]=299010;Pn(h,298984,pa);qj(b,c[ya>>2]|0);break}case 9:{ya=h+8|0;g=c[ya>>2]|0;h=c[va>>2]|0;c[ra>>2]=298996;Pn(h,298984,ra);h=c[va>>2]|0;c[sa>>2]=c[g+12>>2];Pn(h,331593,sa);Pn(c[va>>2]|0,330984,ta);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,ua);h=c[va>>2]|0;c[s>>2]=299010;Pn(h,298984,s);qj(b,c[ya>>2]|0);break}case 10:{ya=h+8|0;f=c[ya>>2]|0;g=c[va>>2]|0;c[t>>2]=298996;Pn(g,298984,t);g=c[va>>2]|0;c[u>>2]=c[f+12>>2];Pn(g,331593,u);Pn(c[va>>2]|0,330984,v);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,x);g=c[va>>2]|0;c[y>>2]=299027;Pn(g,298984,y);g=h+12|0;h=a[g+11>>0]|0;f=h<<24>>24<0;nj(b,f?c[g>>2]|0:g,f?c[g+4>>2]|0:h&255);Pn(c[va>>2]|0,330984,z);h=c[va>>2]|0;c[A>>2]=299010;Pn(h,298984,A);qj(b,c[ya>>2]|0);break}case 11:{ya=h+8|0;f=c[ya>>2]|0;g=c[va>>2]|0;c[B>>2]=298996;Pn(g,298984,B);g=c[va>>2]|0;c[C>>2]=c[f+12>>2];Pn(g,331593,C);Pn(c[va>>2]|0,330984,D);pj(b,c[ya>>2]|0);Pn(c[va>>2]|0,330984,E);g=c[va>>2]|0;c[F>>2]=299027;Pn(g,298984,F);g=h+12|0;h=a[g+11>>0]|0;f=h<<24>>24<0;nj(b,f?c[g>>2]|0:g,f?c[g+4>>2]|0:h&255);Pn(c[va>>2]|0,330984,G);h=c[va>>2]|0;c[H>>2]=299010;Pn(h,298984,H);qj(b,c[ya>>2]|0);break}default:{}}while(0);Pn(c[va>>2]|0,299032,I);i=i+1|0;e=c[b>>2]|0;if(i>>>0>=(c[e+4>>2]|0)-(c[e>>2]|0)>>2>>>0){e=34;break}}if((e|0)==13)U();else if((e|0)==34){ya=c[va>>2]|0;Pn(ya,299034,wa);ya=c[d>>2]|0;aa=xa;return ya|0}return 0}function nj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;j=l;i=l+4|0;h=b+4|0;g=c[h>>2]|0;a[i>>0]=34;Qn(g,i,1,0,0);if(!e){k=c[h>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);aa=l;return}g=0;do{b=a[d+g>>0]|0;f=b&255;a:do if((b&255)<32)k=6;else{switch(b<<24>>24){case 34:case 92:{k=6;break a}default:{}}f=c[h>>2]|0;a[i>>0]=b;Qn(f,i,1,0,0)}while(0);if((k|0)==6){k=0;b=c[h>>2]|0;c[j>>2]=f;Pn(b,299098,j)}g=g+1|0}while((g|0)!=(e|0));k=c[h>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);aa=l;return}function oj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=aa;aa=aa+16|0;i=f;cB(b,d+44|0);wB(b,46);EB(i,c[d+64>>2]|0);h=a[i+11>>0]|0;g=h<<24>>24<0;d=c[i>>2]|0;uB(b,g?d:i,g?c[i+4>>2]|0:h&255)|0;if(g)$A(d);vB(b,e)|0;e=a[b+11>>0]|0;if(e<<24>>24<0){d=c[b>>2]|0;e=c[b+4>>2]|0}else{d=b;e=e&255}b=d+e|0;if(!e){aa=f;return}do{if((a[d>>0]|0)==92)a[d>>0]=47;d=d+1|0}while((d|0)!=(b|0));aa=f;return}function pj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;q=aa;aa=aa+112|0;p=q+96|0;o=q+88|0;n=q+80|0;m=q+72|0;l=q+64|0;k=q+56|0;j=q+48|0;g=q+32|0;f=q+24|0;i=q+16|0;e=q;h=b+4|0;r=c[h>>2]|0;c[e>>2]=301505;Pn(r,298984,e);Pn(c[h>>2]|0,299038,q+8|0);e=c[h>>2]|0;c[i>>2]=330362;Pn(e,298984,i);i=d+72|0;e=c[h>>2]|0;if(!(c[i>>2]|0)){c[f>>2]=330268;Pn(e,298991,f)}else{c[g>>2]=330250;Pn(e,298991,g)}Pn(c[h>>2]|0,330984,q+40|0);e=d+44|0;if((c[e>>2]|0)==1){r=c[h>>2]|0;c[j>>2]=330290;Pn(r,298984,j);if(!(c[e>>2]|0)){r=c[h>>2]|0;c[k>>2]=c[d+48>>2];Pn(r,299019,k)}else{j=d+48|0;r=a[j+11>>0]|0;k=r<<24>>24<0;nj(b,k?c[j>>2]|0:j,k?c[d+52>>2]|0:r&255)}Pn(c[h>>2]|0,330984,l)}r=(c[i>>2]|0)==0;k=c[h>>2]|0;c[m>>2]=299065;Pn(k,298984,m);k=d+60|0;m=a[k+11>>0]|0;l=m<<24>>24<0;nj(b,l?c[k>>2]|0:k,l?c[d+64>>2]|0:m&255);if(!r){r=c[h>>2]|0;Pn(r,299032,p);aa=q;return}Pn(c[h>>2]|0,330984,n);r=c[h>>2]|0;c[o>>2]=299071;Pn(r,298984,o);sj(b,d+76|0);r=c[h>>2]|0;Pn(r,299032,p);aa=q;return}function qj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+16|0;i=j+8|0;e=Bl(c[b>>2]|0,d+24|0)|0;h=b+4|0;Pn(c[h>>2]|0,329883,j);switch(c[d+72>>2]|0){case 0:{k=d+60|0;f=a[k+11>>0]|0;g=f<<24>>24<0;d=Rk(e,(Dk(e,g?c[k>>2]|0:k,g?c[d+64>>2]|0:f&255)|0)+16|0)|0;e=c[d+64>>2]|0;f=(c[d+68>>2]|0)-e|0;g=f>>2;if(!f){k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}f=d+64|0;tj(b,c[e>>2]|0);if(g>>>0<=1){k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}d=1;do{tj(b,c[(c[f>>2]|0)+(d<<2)>>2]|0);d=d+1|0}while((d|0)!=(g|0));k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}case 1:{f=d+60|0;k=a[f+11>>0]|0;g=k<<24>>24<0;k=(Tk(e,(Dk(e,g?c[f>>2]|0:f,g?c[d+64>>2]|0:k&255)|0)+16|0)|0)+12|0;tj(b,c[k>>2]|0);k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}default:{k=c[h>>2]|0;Pn(k,330908,i);aa=j;return}}}function rj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;u=aa;aa=aa+96|0;r=u+72|0;o=u+64|0;n=u+56|0;m=u+48|0;p=u+40|0;j=u+32|0;t=u+16|0;i=u+8|0;h=u;k=u+80|0;q=d+4|0;switch(c[q>>2]|0){case 0:{g=299939;l=308998;break}case 1:{g=299939;l=308998;break}case 2:{g=299945;l=299027;break}default:{g=354708;l=354708}}w=ea[c[(c[d>>2]|0)+8>>2]&127](d)|0;v=b+4|0;s=c[v>>2]|0;c[h>>2]=298996;Pn(s,298984,h);s=c[v>>2]|0;c[i>>2]=c[w+8>>2];Pn(s,331593,i);Pn(c[v>>2]|0,330984,t);oj(t,b,g);s=c[v>>2]|0;c[j>>2]=299001;Pn(s,298984,j);s=t+11|0;h=a[s>>0]|0;g=h<<24>>24<0;j=t+4|0;Tj(k,g?c[t>>2]|0:t,g?c[j>>2]|0:h&255);nj(b,c[k>>2]|0,c[k+4>>2]|0);Pn(c[v>>2]|0,330984,p);h=c[v>>2]|0;c[m>>2]=299027;Pn(h,298984,m);nj(b,e,f);Pn(c[v>>2]|0,330984,n);h=c[v>>2]|0;c[o>>2]=299053;Pn(h,298984,o);h=c[v>>2]|0;c[r>>2]=l;Pn(h,298991,r);h=a[s>>0]|0;g=h<<24>>24<0;h=g?c[j>>2]|0:h&255;g=g?c[t>>2]|0:t;a:do switch(c[q>>2]|0){case 0:{w=r;c[w>>2]=g;c[w+4>>2]=h;g=c[b+24>>2]|0;if(!g)U();else{v=fa[c[(c[g>>2]|0)+24>>2]&511](g,r)|0;v=bj(v,d+8|0,c[b+56>>2]|0)|0;w=b+60|0;c[w>>2]=((v|0)==1|(c[w>>2]|0)==1)&1;break a}break}case 1:{w=r;c[w>>2]=g;c[w+4>>2]=h;g=c[b+24>>2]|0;if(!g)U();j=fa[c[(c[g>>2]|0)+24>>2]&511](g,r)|0;g=c[d+40>>2]|0;i=(c[d+44>>2]|0)-g|0;if(i|0){if((i|0)<0)HB();h=_A(i)|0;sC(h|0,g|0,i|0)|0;Qn(j,h,i,354708,0);if(h|0)$A(h)}break}case 2:{w=r;c[w>>2]=g;c[w+4>>2]=h;g=c[b+24>>2]|0;if(!g)U();j=fa[c[(c[g>>2]|0)+24>>2]&511](g,r)|0;g=c[d+40>>2]|0;i=(c[d+44>>2]|0)-g|0;if(i|0){if((i|0)<0)HB();h=_A(i)|0;sC(h|0,g|0,i|0)|0;Qn(j,h,i,354708,0);if(h|0)$A(h)}break}default:{}}while(0);if((a[s>>0]|0)>=0){aa=u;return}$A(c[t>>2]|0);aa=u;return}function sj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;G=aa;aa=aa+336|0;h=G+320|0;E=G+312|0;D=G+304|0;C=G+296|0;B=G;A=G+288|0;y=G+280|0;x=G+272|0;w=G+264|0;v=G+256|0;u=G+248|0;t=G+240|0;s=G+232|0;q=G+224|0;p=G+216|0;o=G+208|0;n=G+200|0;m=G+192|0;l=G+184|0;k=G+176|0;j=G+168|0;F=G+160|0;z=G+152|0;r=G+144|0;i=G+136|0;g=a+4|0;Pn(c[g>>2]|0,329883,G+128|0);f=b+4|0;a=c[b>>2]|0;if((c[f>>2]|0)==(a|0)){F=c[g>>2]|0;Pn(F,330908,i);aa=G;return}e=0;do{Pn(c[g>>2]|0,299038,r);d=c[g>>2]|0;c[z>>2]=330362;Pn(d,298984,z);switch(c[a+(e*40|0)+20>>2]|0){case -1:{d=c[g>>2]|0;c[F>>2]=330980;Pn(d,298991,F);Pn(c[g>>2]|0,330984,j);d=c[g>>2]|0;c[k>>2]=299040;Pn(d,298984,k);d=c[g>>2]|0;c[l>>2]=c[a+(e*40|0)+24>>2];Pn(d,299019,l);break}case -2:{d=c[g>>2]|0;c[m>>2]=330976;Pn(d,298991,m);Pn(c[g>>2]|0,330984,n);d=c[g>>2]|0;c[o>>2]=299040;Pn(d,298984,o);d=c[g>>2]|0;I=a+(e*40|0)+24|0;H=c[I+4>>2]|0;a=p;c[a>>2]=c[I>>2];c[a+4>>2]=H;Pn(d,299046,p);break}case -3:{I=c[g>>2]|0;c[q>>2]=330972;Pn(I,298991,q);Pn(c[g>>2]|0,330984,s);I=c[g>>2]|0;c[t>>2]=299040;Pn(I,298984,t);I=c[g>>2]|0;c[u>>2]=c[a+(e*40|0)+24>>2];Pn(I,299019,u);break}case -4:{I=c[g>>2]|0;c[v>>2]=330968;Pn(I,298991,v);Pn(c[g>>2]|0,330984,w);I=c[g>>2]|0;c[x>>2]=299040;Pn(I,298984,x);I=c[g>>2]|0;a=a+(e*40|0)+24|0;d=c[a+4>>2]|0;H=y;c[H>>2]=c[a>>2];c[H+4>>2]=d;Pn(I,299046,y);break}case -5:{I=c[g>>2]|0;c[A>>2]=330963;Pn(I,298991,A);Pn(c[g>>2]|0,330984,B);I=c[g>>2]|0;c[h>>2]=299040;Pn(I,298984,h);I=a+(e*40|0)+24|0;c[h>>2]=c[I>>2];c[h+4>>2]=c[I+4>>2];c[h+8>>2]=c[I+8>>2];c[h+12>>2]=c[I+12>>2];zm(B,h);I=c[g>>2]|0;c[C>>2]=B;Pn(I,298991,C);break}default:{}}Pn(c[g>>2]|0,299032,D);a=c[b>>2]|0;d=((c[f>>2]|0)-a|0)/40|0;if((e|0)!=(d+-1|0)){Pn(c[g>>2]|0,330984,E);d=c[b>>2]|0;a=d;d=((c[f>>2]|0)-d|0)/40|0}e=e+1|0}while(e>>>0<d>>>0);I=c[g>>2]|0;Pn(I,330908,i);aa=G;return}function tj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+32|0;f=g+24|0;e=g+16|0;h=g+8|0;d=a+4|0;Pn(c[d>>2]|0,299038,g);a=c[d>>2]|0;c[h>>2]=330362;Pn(a,298984,h);do switch(b|0){case -1:{a=330980;break}case -2:{a=330976;break}case -3:{a=330972;break}case -4:{a=330968;break}case -5:{a=330963;break}case -16:{a=330955;break}case -32:{a=330950;break}case -24:{a=330939;break}case -64:{a=330934;break}case 0:{a=330930;break}case -17:{a=330923;break}default:a=330910}while(0);h=c[d>>2]|0;c[e>>2]=a;Pn(h,298991,e);Pn(c[d>>2]|0,299032,f);aa=g;return}function uj(b,d,e,f,g,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=aa;aa=aa+128|0;m=q+124|0;s=q+120|0;p=q+96|0;o=q+24|0;r=q;c[m>>2]=j;c[s>>2]=k;n=p+16|0;c[p>>2]=289084;j=p+4|0;c[j>>2]=m;c[p+8>>2]=s;c[n>>2]=p;k=r+16|0;c[k>>2]=r;c[r>>2]=289084;s=c[j>>2]|0;j=c[j+4>>2]|0;m=r+4|0;c[m>>2]=s;c[m+4>>2]=j;c[o>>2]=0;c[o+4>>2]=b;m=o+8|0;l=o+24|0;c[l>>2]=m;c[m>>2]=289084;m=o+12|0;c[m>>2]=s;c[m+4>>2]=j;m=o+32|0;Vn(m,e,f);b=o+44|0;Vn(b,g,h);c[o+56>>2]=i;c[o+60>>2]=0;c[o+64>>2]=0;k=c[k>>2]|0;if((r|0)!=(k|0)){if(k|0)ma[c[(c[k>>2]|0)+20>>2]&255](k)}else ma[c[(c[k>>2]|0)+16>>2]&255](k);j=mj(o,d)|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0);if((a[m+11>>0]|0)<0)$A(c[m>>2]|0);k=c[l>>2]|0;if((o+8|0)!=(k|0)){if(k|0)ma[c[(c[k>>2]|0)+20>>2]&255](k)}else ma[c[(c[k>>2]|0)+16>>2]&255](k);k=c[n>>2]|0;if((p|0)==(k|0)){ma[c[(c[k>>2]|0)+16>>2]&255](k);aa=q;return j|0}if(!k){aa=q;return j|0}ma[c[(c[k>>2]|0)+20>>2]&255](k);aa=q;return j|0}function vj(a){a=a|0;return}function wj(a){a=a|0;$A(a);return}function xj(a){a=a|0;var b=0,d=0,e=0;b=_A(12)|0;c[b>>2]=289084;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return b|0}function yj(a,b){a=a|0;b=b|0;var d=0,e=0;c[b>>2]=289084;e=a+4|0;d=c[e+4>>2]|0;a=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=d;return}function zj(a){a=a|0;return}function Aj(a){a=a|0;$A(a);return}function Bj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;i=k;j=k+8|0;g=c[b>>2]|0;e=c[b+4>>2]|0;c[i>>2]=g;c[i+4>>2]=e;h=a+4|0;f=c[c[h>>2]>>2]|0;d=c[a+8>>2]|0;b=_A(20)|0;Sn(b,c[d>>2]|0);c[j>>2]=b;d=f+4|0;a=c[d>>2]|0;if(a>>>0>=(c[f+8>>2]|0)>>>0){Ej(f,i,j);b=c[j>>2]|0;c[j>>2]=0;if(b|0)ma[c[(c[b>>2]|0)+4>>2]&255](b)}else{c[j>>2]=0;Vn(a,g,e);c[a+12>>2]=b;c[d>>2]=(c[d>>2]|0)+16;c[j>>2]=0}aa=k;return c[(c[(c[c[h>>2]>>2]|0)+4>>2]|0)+-4>>2]|0}function Cj(a,b){a=a|0;b=b|0;return ((c[b+4>>2]|0)==299105?a+4|0:0)|0}function Dj(a){a=a|0;return 285960}function Ej(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=b+4|0;f=c[b>>2]|0;k=(c[l>>2]|0)-f>>4;g=k+1|0;if(g>>>0>268435455)HB();m=b+8|0;i=(c[m>>2]|0)-f|0;f=i>>3;f=i>>4>>>0<134217727?(f>>>0<g>>>0?g:f):268435455;do if(f)if(f>>>0>268435455)U();else{j=_A(f<<4)|0;break}else j=0;while(0);g=j+(k<<4)|0;i=j+(f<<4)|0;n=c[d>>2]|0;f=c[d+4>>2]|0;h=c[e>>2]|0;c[e>>2]=0;Vn(g,n,f);c[j+(k<<4)+12>>2]=h;h=g+16|0;f=c[b>>2]|0;e=f;d=c[l>>2]|0;if((d|0)!=(f|0)){e=(d+-16-e|0)>>>4;do{n=g;g=g+-16|0;p=d;d=d+-16|0;c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;p=p+-4|0;o=c[p>>2]|0;c[p>>2]=0;c[n+-4>>2]=o}while((d|0)!=(f|0));g=j+(k+-1-e<<4)|0;e=c[b>>2]|0;f=c[l>>2]|0}c[b>>2]=g;c[l>>2]=h;c[m>>2]=i;d=e;if((f|0)!=(d|0))do{p=f+-4|0;f=f+-16|0;g=c[p>>2]|0;c[p>>2]=0;if(g|0)ma[c[(c[g>>2]|0)+4>>2]&255](g);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(d|0));if(!e)return;$A(e);return}function Fj(b,d,e){b=b|0;d=d|0;e=e|0;c[b>>2]=d;if(e){e=Y(299573)|0;if(!e)e=TA(OA(d)|0)|0;else e=PA(e)|0;e=(e|0)!=0&1}else e=0;a[b+4>>0]=e;return}function Gj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=e;c[a+12>>2]=f;return}function Hj(b,d,e,f,g,h,i){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;H=aa;aa=aa+64|0;G=H+8|0;F=H;C=H+40|0;E=H+24|0;D=H+12|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if((d|0)==(e|0)){aa=H;return}B=i+11|0;z=i+4|0;y=C+11|0;x=h+4|0;u=(f|0)==0;k=E+11|0;p=E+4|0;l=E+11|0;q=E+4|0;w=(g|0)==0;m=E+11|0;r=E+4|0;n=E+11|0;t=E+4|0;j=D+11|0;o=D+4|0;s=C+4|0;v=E+12|0;a:while(1){f=a[B>>0]|0;f=((f<<24>>24<0?c[z>>2]|0:f&255)|0)==0;i=f?0:2;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;a[y>>0]=i;if(!f)uC(C|0,32,i|0)|0;a[C+i>>0]=0;cB(D,C);vB(D,(a[x>>0]|0)==0?354708:299906)|0;i=c[d+8>>2]|0;if(i|0){Wn(E,c[d+4>>2]|0,i);h=a[k>>0]|0;f=h<<24>>24<0;i=c[E>>2]|0;uB(D,f?i:E,f?c[p>>2]|0:h&255)|0;if(f)$A(i);vB(D,322981)|0}if(u){h=c[d+16>>2]|0;c[F>>2]=c[d+12>>2];c[F+4>>2]=h;Ij(E,299911,F);h=a[l>>0]|0;f=h<<24>>24<0;i=c[E>>2]|0;uB(D,f?i:E,f?c[q>>2]|0:h&255)|0;if(f)$A(i)}else{i=c[d+12>>2]|0;if((i|0)!=-1?(c[G>>2]=i,Ij(E,301446,G),h=a[m>>0]|0,f=h<<24>>24<0,A=c[E>>2]|0,uB(D,f?A:E,f?c[r>>2]|0:h&255)|0,f):0)$A(A)}vB(D,(a[x>>0]|0)==0?354708:299919)|0;switch(c[d>>2]|0){case 0:{vB(D,324100)|0;break}case 1:{vB(D,324094)|0;break}default:{i=19;break a}}vB(D,299925)|0;vB(D,(a[x>>0]|0)==0?354708:299928)|0;i=d+24|0;f=a[i+11>>0]|0;h=f<<24>>24<0;uB(D,h?c[i>>2]|0:i,h?c[d+28>>2]|0:f&255)|0;wB(D,10);c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if(!w){h=d+16|0;f=d+20|0;jm(g,c[d+12>>2]|0,c[h>>2]|0,c[f>>2]|0,E);i=a[n>>0]|0;if((i<<24>>24<0?c[t>>2]|0:i&255)|0){i=a[y>>0]|0;J=i<<24>>24<0;I=J?c[C>>2]|0:C;i=J?c[s>>2]|0:i&255;uB(D,I,i)|0;J=a[n>>0]|0;K=J<<24>>24<0;uB(D,K?c[E>>2]|0:E,K?c[t>>2]|0:J&255)|0;wB(D,10);uB(D,I,i)|0;i=c[h>>2]|0;h=i+-1-(c[v>>2]|0)|0;i=(c[f>>2]|0)-i|0;f=a[n>>0]|0;f=(f<<24>>24<0?c[t>>2]|0:f&255)-h|0;i=f>>>0<i>>>0?f:i;sB(D,h,32)|0;vB(D,(a[x>>0]|0)==0?354708:299906)|0;vB(D,(a[x>>0]|0)==0?354708:299933)|0;sB(D,(i|0)==0?1:i,94)|0;vB(D,(a[x>>0]|0)==0?354708:299928)|0;wB(D,10);i=a[n>>0]|0}if(i<<24>>24<0)$A(c[E>>2]|0)}if((a[y>>0]|0)<0)$A(c[C>>2]|0);K=a[j>>0]|0;J=K<<24>>24<0;uB(b,J?c[D>>2]|0:D,J?c[o>>2]|0:K&255)|0;if((a[j>>0]|0)<0)$A(c[D>>2]|0);d=d+36|0;if((d|0)==(e|0)){i=3;break}}if((i|0)==3){aa=H;return}else if((i|0)==19)U()}function Ij(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+32|0;j=l+16|0;i=l;c[j>>2]=e;c[i>>2]=c[j>>2];j=Vz(0,0,d,j)|0;h=j+1|0;if(!h)e=0;else{if((j|0)<-1)HB();g=_A(h)|0;e=h;f=g;while(1){a[f>>0]=0;e=e+-1|0;if(!e){e=g;break}else f=f+1|0}}Vz(e,h,d,i)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if(j>>>0>4294967279)aB();if(j>>>0<11){a[b+11>>0]=j;if(j)k=11}else{d=j+16&-16;k=_A(d)|0;c[b>>2]=k;c[b+8>>2]=d|-2147483648;c[b+4>>2]=j;b=k;k=11}if((k|0)==11)sC(b|0,e|0,j|0)|0;a[b+j>>0]=0;if(!e){aa=l;return}$A(e);aa=l;return}function Jj(a,b){a=a|0;b=b|0;c[a>>2]=b;b=a+4|0;a=b+36|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function Kj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+16|0;q=w+12|0;u=w+8|0;t=w;v=a+4|0;e=c[v>>2]|0;m=a+8|0;c[m>>2]=e;s=a+16|0;d=c[s>>2]|0;n=a+20|0;c[n>>2]=d;r=a+28|0;o=a+32|0;c[o>>2]=c[r>>2];c[q>>2]=b;c[u>>2]=0;p=a+12|0;if((c[p>>2]|0)>>>0>e>>>0){c[e>>2]=0;c[m>>2]=e+4}else{Lj(v,u);d=c[n>>2]|0}l=a+24|0;if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);d=c[m>>2]|0;if((c[v>>2]|0)==(d|0)){a=0;aa=w;return a|0}k=t+4|0;i=a+36|0;j=t+4|0;a:while(1){e=d+-4|0;g=c[n>>2]|0;b=g+-4|0;h=c[b>>2]|0;b:do switch(c[e>>2]|0){case 0:{c[m>>2]=e;c[n>>2]=b;if((Nj(a,h)|0)==1){d=1;e=93;break a}break}case 1:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(!e){g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+16>>2]&511](g,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break}case 2:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(e|0){b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break b}g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+72>>2]&511](g,h)|0)==1){d=1;e=93;break a}e=c[m>>2]|0;b=e+-4|0;c[m>>2]=b;d=(c[n>>2]|0)+-4|0;c[n>>2]=d;c[o>>2]=(c[o>>2]|0)+-8;f=h+144|0;c[q>>2]=3;c[u>>2]=h;if(b>>>0<(c[p>>2]|0)>>>0){c[b>>2]=3;c[m>>2]=e}else{Oj(v,q);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=h;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,u);d=c[f>>2]|0;c[t>>2]=f;c[k>>2]=d;d=c[o>>2]|0;if(d>>>0<(c[i>>2]|0)>>>0){f=t;g=c[f+4>>2]|0;h=d;c[h>>2]=c[f>>2];c[h+4>>2]=g;c[o>>2]=(c[o>>2]|0)+8}else Pj(r,t);break}case 3:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(!e){g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+76>>2]&511](g,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break}case 4:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(!e){g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+100>>2]&511](g,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break}case 5:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(e|0){b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break b}f=h+144|0;d=c[a>>2]|0;e=c[d>>2]|0;if(!(c[h+152>>2]|0)){if((fa[c[e+204>>2]&511](d,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}if((fa[c[e+200>>2]&511](d,h)|0)==1){d=1;e=93;break a}e=c[m>>2]|0;b=e+-4|0;c[m>>2]=b;d=(c[n>>2]|0)+-4|0;c[n>>2]=d;c[o>>2]=(c[o>>2]|0)+-8;c[q>>2]=6;c[u>>2]=h;if(b>>>0<(c[p>>2]|0)>>>0){c[b>>2]=6;c[m>>2]=e}else{Oj(v,q);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=h;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,u);d=c[f>>2]|0;c[t>>2]=f;c[j>>2]=d;d=c[o>>2]|0;if(d>>>0<(c[i>>2]|0)>>>0){f=t;g=c[f+4>>2]|0;h=d;c[h>>2]=c[f>>2];c[h+4>>2]=g;c[o>>2]=(c[o>>2]|0)+8}else Pj(r,t);break}case 6:{f=(c[o>>2]|0)+-4|0;e=c[f>>2]|0;if(!e){g=c[a>>2]|0;if((fa[c[(c[g>>2]|0)+204>>2]&511](g,h)|0)==1){d=1;e=93;break a}c[m>>2]=(c[m>>2]|0)+-4;c[n>>2]=(c[n>>2]|0)+-4;c[o>>2]=(c[o>>2]|0)+-8;break b}b=e;c[f>>2]=c[e+4>>2];c[q>>2]=b;c[u>>2]=0;if(d>>>0<(c[p>>2]|0)>>>0){c[d>>2]=0;c[m>>2]=d+4;d=g}else{Lj(v,u);d=c[n>>2]|0}if(d>>>0<(c[l>>2]|0)>>>0){c[d>>2]=b;c[n>>2]=(c[n>>2]|0)+4}else Mj(s,q);break}default:{}}while(0);d=c[m>>2]|0;if((c[v>>2]|0)==(d|0)){d=0;e=93;break}}if((e|0)==93){aa=w;return d|0}return 0}function Lj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function Mj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function Nj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;g=j+12|0;h=j+8|0;i=j;do switch(c[b+32>>2]|0){case 0:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+224>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 3:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+228>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 1:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+232>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 2:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+236>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 5:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+216>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 4:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+220>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 6:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+8>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 7:{f=c[a>>2]|0;if((fa[c[(c[f>>2]|0)+12>>2]&511](f,b)|0)==1){a=1;aa=j;return a|0}f=b+112|0;c[g>>2]=1;c[h>>2]=b;e=a+8|0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=1;c[e>>2]=d+4}else Oj(a+4|0,g);e=a+20|0;d=c[e>>2]|0;if(d>>>0<(c[a+24>>2]|0)>>>0){c[d>>2]=b;c[e>>2]=(c[e>>2]|0)+4}else Mj(a+16|0,h);e=c[f>>2]|0;c[i>>2]=f;c[i+4>>2]=e;e=a+32|0;d=c[e>>2]|0;if(d>>>0<(c[a+36>>2]|0)>>>0){h=i;i=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=i;c[e>>2]=(c[e>>2]|0)+8}else Pj(a+28|0,i);break}case 8:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+20>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 9:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+24>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 10:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+28>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 11:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+32>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 12:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+36>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 13:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+40>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 14:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+44>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 15:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+48>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 16:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+52>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 17:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+56>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 18:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+60>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 19:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+64>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 20:{f=c[a>>2]|0;if((fa[c[(c[f>>2]|0)+68>>2]&511](f,b)|0)==1){a=1;aa=j;return a|0}f=b+112|0;c[g>>2]=2;c[h>>2]=b;e=a+8|0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=2;c[e>>2]=d+4}else Oj(a+4|0,g);e=a+20|0;d=c[e>>2]|0;if(d>>>0<(c[a+24>>2]|0)>>>0){c[d>>2]=b;c[e>>2]=(c[e>>2]|0)+4}else Mj(a+16|0,h);e=c[f>>2]|0;c[i>>2]=f;c[i+4>>2]=e;e=a+32|0;d=c[e>>2]|0;if(d>>>0<(c[a+36>>2]|0)>>>0){h=i;i=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=i;c[e>>2]=(c[e>>2]|0)+8}else Pj(a+28|0,i);break}case 21:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+80>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 42:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+252>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 22:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+84>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 23:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+88>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 24:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+92>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 25:{f=c[a>>2]|0;if((fa[c[(c[f>>2]|0)+96>>2]&511](f,b)|0)==1){a=1;aa=j;return a|0}f=b+112|0;c[g>>2]=4;c[h>>2]=b;e=a+8|0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=4;c[e>>2]=d+4}else Oj(a+4|0,g);e=a+20|0;d=c[e>>2]|0;if(d>>>0<(c[a+24>>2]|0)>>>0){c[d>>2]=b;c[e>>2]=(c[e>>2]|0)+4}else Mj(a+16|0,h);e=c[f>>2]|0;c[i>>2]=f;c[i+4>>2]=e;e=a+32|0;d=c[e>>2]|0;if(d>>>0<(c[a+36>>2]|0)>>>0){h=i;i=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=i;c[e>>2]=(c[e>>2]|0)+8}else Pj(a+28|0,i);break}case 26:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+104>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 27:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+108>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 28:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+112>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 29:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+116>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 30:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+120>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 31:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+124>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 44:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+128>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 45:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+132>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 46:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+136>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 47:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+140>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 50:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+144>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 48:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+148>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 49:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+152>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 34:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+156>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 33:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+160>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 32:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+164>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 35:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+212>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 36:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+168>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 37:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+172>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 38:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+176>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 39:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+180>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 43:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+184>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 52:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+208>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 53:{f=c[a>>2]|0;if((fa[c[(c[f>>2]|0)+196>>2]&511](f,b)|0)==1){a=1;aa=j;return a|0}f=b+112|0;c[g>>2]=5;c[h>>2]=b;e=a+8|0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=5;c[e>>2]=d+4}else Oj(a+4|0,g);e=a+20|0;d=c[e>>2]|0;if(d>>>0<(c[a+24>>2]|0)>>>0){c[d>>2]=b;c[e>>2]=(c[e>>2]|0)+4}else Mj(a+16|0,h);e=c[f>>2]|0;c[i>>2]=f;c[i+4>>2]=e;e=a+32|0;d=c[e>>2]|0;if(d>>>0<(c[a+36>>2]|0)>>>0){h=i;i=c[h+4>>2]|0;a=d;c[a>>2]=c[h>>2];c[a+4>>2]=i;c[e>>2]=(c[e>>2]|0)+8}else Pj(a+28|0,i);break}case 54:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+188>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 51:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+240>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 40:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+244>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 41:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+248>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}case 55:{a=c[a>>2]|0;if((fa[c[(c[a>>2]|0)+192>>2]&511](a,b)|0)==1){a=1;aa=j;return a|0}break}default:{}}while(0);a=0;aa=j;return a|0}function Oj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function Pj(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>3;d=f+1|0;if(d>>>0>536870911)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>2;e=m>>3>>>0<268435455?(e>>>0<d>>>0?d:e):536870911;do if(e)if(e>>>0>536870911)U();else{k=_A(e<<3)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<3)|0;f=b;b=c[f+4>>2]|0;m=d;c[m>>2]=c[f>>2];c[m+4>>2]=b;if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+8;c[j>>2]=k+(e<<3);if(!g)return;$A(g);return}function Qj(a,b){a=a|0;b=b|0;b=c[b>>2]|0;if(!b){a=0;return a|0}while(1){if((Kj(a,b)|0)==1){b=1;a=5;break}b=c[b+4>>2]|0;if(!b){b=0;a=5;break}}if((a|0)==5)return b|0;return 0}function Rj(a,b){a=a|0;b=b|0;b=c[b+108>>2]|0;if(!b){a=0;return a|0}while(1){if((Kj(a,b)|0)==1){b=1;a=5;break}b=c[b+4>>2]|0;if(!b){b=0;a=5;break}}if((a|0)==5)return b|0;return 0}function Sj(a,b,c){a=a|0;b=b|0;c=c|0;Xn(a,b,c,0,_n(b,c,46)|0);return}function Tj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;f=b;g=_n(b,d,47)|0;e=_n(b,d,92)|0;h=(e|0)==-1;if((e&g|0)==-1){c[a>>2]=f;c[a+4>>2]=d;return}if((g|0)==-1){if(h){c[a>>2]=f;c[a+4>>2]=d;return}}else e=h?g:g>>>0<e>>>0?e:g;Xn(a,b,d,e+1|0,-1);return}function Uj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;I=aa;aa=aa+128|0;E=I+112|0;G=I+88|0;A=I+72|0;H=I;c[H>>2]=289128;F=H+4|0;c[F>>2]=0;D=H+8|0;Jj(D,H);C=H+48|0;c[C>>2]=0;c[C+4>>2]=0;c[C+8>>2]=0;c[C+12>>2]=0;c[C+16>>2]=0;c[C+20>>2]=0;c[F>>2]=b;d=c[b+100>>2]|0;m=c[b+104>>2]|0;a:do if((d|0)!=(m|0)){t=H+52|0;w=H+56|0;v=H+60|0;u=H+64|0;s=H+68|0;q=G+11|0;n=G+8|0;o=G+4|0;p=A+11|0;r=G+20|0;while(1){i=c[d>>2]|0;switch(c[i+28>>2]|0){case 0:{k=c[t>>2]|0;l=(c[F>>2]|0)+216|0;e=t;B=9;break}case 1:{k=c[w>>2]|0;l=(c[F>>2]|0)+296|0;e=w;B=9;break}case 2:{k=c[v>>2]|0;l=(c[F>>2]|0)+316|0;e=v;B=9;break}case 3:{k=c[u>>2]|0;l=(c[F>>2]|0)+236|0;e=u;B=9;break}case 4:{k=c[s>>2]|0;l=(c[F>>2]|0)+196|0;e=s;B=9;break}default:{}}if((B|0)==9){B=0;c[e>>2]=k+1;j=i+32|0;g=i+4|0;c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;f=a[g+11>>0]|0;h=f<<24>>24<0;f=h?c[i+8>>2]|0:f&255;e=f+1|0;if(e>>>0>4294967279)break;if(e>>>0<11){a[q>>0]=1;e=G}else{J=f+17&-16;e=_A(J)|0;c[G>>2]=e;c[n>>2]=J|-2147483648;c[o>>2]=1}a[e>>0]=36;a[e+1>>0]=0;uB(G,h?c[g>>2]|0:g,f)|0;wB(G,46);c[E>>2]=c[G>>2];c[E+4>>2]=c[G+4>>2];c[E+8>>2]=c[G+8>>2];c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;g=i+16|0;J=a[g+11>>0]|0;h=J<<24>>24<0;uB(E,h?c[g>>2]|0:g,h?c[i+20>>2]|0:J&255)|0;c[A>>2]=c[E>>2];c[A+4>>2]=c[E+4>>2];c[A+8>>2]=c[E+8>>2];c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;if((a[q>>0]|0)<0)$A(c[G>>2]|0);e=a[p>>0]|0;f=e<<24>>24<0?c[A>>2]|0:A;J=a[j+11>>0]|0;if(!((J<<24>>24<0?c[i+36>>2]|0:J&255)|0)){e=0;while(1){Vj(f,-1,e,j);if(!(Wj(l,j)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[r>>2]=k;Og(E,l,j,G);Gg(l,c[E>>2]|0);e=a[p>>0]|0}if(e<<24>>24<0)$A(c[A>>2]|0)}d=d+4|0;if((d|0)==(m|0))break a}aB()}while(0);d=c[b+112>>2]|0;i=c[b+116>>2]|0;b:do if((d|0)!=(i|0)){l=A+11|0;j=A+8|0;k=A+4|0;m=G+20|0;while(1){h=c[d>>2]|0;switch(c[h+12>>2]|0){case 0:{e=c[F>>2]|0;g=h+16|0;f=Sk(e,g)|0;if(f|0){x=e+216|0;y=Ek(e,g)|0;z=f;B=37}break}case 1:{e=c[F>>2]|0;g=h+16|0;f=Vk(e,g)|0;if(f|0){x=e+296|0;y=Gk(e,g)|0;z=f;B=37}break}case 2:{e=c[F>>2]|0;g=h+16|0;f=Wk(e,g)|0;if(f|0){x=e+316|0;y=Hk(e,g)|0;z=f;B=37}break}case 3:{e=c[F>>2]|0;g=h+16|0;f=Uk(e,g)|0;if(f|0){x=e+236|0;y=Fk(e,g)|0;z=f;B=37}break}case 4:{e=c[F>>2]|0;g=h+16|0;f=Xk(e,g)|0;if(f|0){x=e+196|0;y=Jk(e,g)|0;z=f;B=37}break}default:{}}if((B|0)==37?(B=0,z|0):0){c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;f=a[h+11>>0]|0;g=f<<24>>24<0;f=g?c[h+4>>2]|0:f&255;e=f+1|0;if(e>>>0>4294967279)break;if(e>>>0<11){a[l>>0]=1;e=A}else{J=f+17&-16;e=_A(J)|0;c[A>>2]=e;c[j>>2]=J|-2147483648;c[k>>2]=1}a[e>>0]=36;a[e+1>>0]=0;uB(A,g?c[h>>2]|0:h,f)|0;e=a[l>>0]|0;f=e<<24>>24<0?c[A>>2]|0:A;J=a[z+11>>0]|0;if(!((J<<24>>24<0?c[z+4>>2]|0:J&255)|0)){e=0;while(1){Vj(f,-1,e,z);if(!(Wj(x,z)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[m>>2]=y;Og(E,x,z,G);Gg(x,c[E>>2]|0);e=a[l>>0]|0}if(e<<24>>24<0)$A(c[A>>2]|0)}d=d+4|0;if((d|0)==(i|0))break b}aB()}while(0);i=b+88|0;h=b+92|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){j=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+236|0;e=0;while(1){Vj(299950,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}i=b+124|0;h=b+128|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){j=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+276|0;e=0;while(1){Vj(299953,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}i=b+76|0;h=b+80|0;d=c[i>>2]|0;c:do if((c[h>>2]|0)!=(d|0)){j=G+20|0;g=0;do{d=c[d+(g<<2)>>2]|0;J=a[d+11>>0]|0;if(!((J<<24>>24<0?c[d+4>>2]|0:J&255)|0)){e=(c[F>>2]|0)+216|0;f=0;while(1){Vj(299956,g,f,d);if(!(Wj(e,d)|0))break;else f=f+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,e,d,G);Gg(e,c[E>>2]|0)}Xj(d);c[C>>2]=0;if((Rj(D,d)|0)==1)break c;g=g+1|0;d=c[i>>2]|0}while(g>>>0<(c[h>>2]|0)-d>>2>>>0)}while(0);j=b+136|0;h=b+140|0;e=c[h>>2]|0;d=c[j>>2]|0;if((e|0)!=(d|0)){i=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+296|0;e=0;while(1){Vj(299959,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[i>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[j>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}j=b+160|0;h=b+164|0;e=c[h>>2]|0;d=c[j>>2]|0;if((e|0)!=(d|0)){i=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+316|0;e=0;while(1){Vj(299962,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[i>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[j>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}i=b+64|0;h=b+68|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){j=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+196|0;e=0;while(1){Vj(299965,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}i=b+172|0;h=b+176|0;e=c[h>>2]|0;d=c[i>>2]|0;if((e|0)!=(d|0)){j=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+336|0;e=0;while(1){Vj(299968,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[j>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[i>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}j=b+148|0;h=b+152|0;e=c[h>>2]|0;d=c[j>>2]|0;if((e|0)!=(d|0)){i=G+20|0;g=0;do{f=c[d+(g<<2)>>2]|0;J=a[f+11>>0]|0;if(!((J<<24>>24<0?c[f+4>>2]|0:J&255)|0)){d=(c[F>>2]|0)+356|0;e=0;while(1){Vj(299965,g,e,f);if(!(Wj(d,f)|0))break;else e=e+1|0}c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;c[G+16>>2]=0;c[i>>2]=g;Og(E,d,f,G);Gg(d,c[E>>2]|0);e=c[h>>2]|0;d=c[j>>2]|0}g=g+1|0}while(g>>>0<e-d>>2>>>0)}c[F>>2]=0;c[H>>2]=289128;d=c[H+36>>2]|0;if(d|0){c[H+40>>2]=d;$A(d)}d=c[H+24>>2]|0;if(d|0){c[H+28>>2]=d;$A(d)}d=c[H+12>>2]|0;if(!d){aa=I;return}c[H+16>>2]=d;$A(d);aa=I;return}function Vj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;j=aa;aa=aa+32|0;h=j+12|0;i=j;qB(f,b)|0;if((d|0)!=-1?(BB(h,d),d=a[h+11>>0]|0,b=d<<24>>24<0,g=c[h>>2]|0,uB(f,b?g:h,b?c[h+4>>2]|0:d&255)|0,b):0)$A(g);if(!e){aa=j;return}BB(i,e);e=i+11|0;xB(i,(a[e>>0]|0)<0?c[i>>2]|0:i);c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;d=a[h+11>>0]|0;b=d<<24>>24<0;g=c[h>>2]|0;uB(f,b?g:h,b?c[h+4>>2]|0:d&255)|0;if(b)$A(g);if((a[e>>0]|0)<0)$A(c[i>>2]|0);aa=j;return}function Wj(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=a[e+11>>0]|0;r=s<<24>>24<0;t=r?c[e>>2]|0:e;s=r?c[e+4>>2]|0:s&255;if(s>>>0>3){e=t;h=s;f=s;while(1){r=v(d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24,1540483477)|0;h=(v(r>>>24^r,1540483477)|0)^(v(h,1540483477)|0);f=f+-4|0;if(f>>>0<=3)break;else e=e+4|0}r=s+-4|0;f=r&-4;g=t+(f+4)|0;e=h;f=r-f|0}else{g=t;e=s;f=s}switch(f|0){case 3:{i=d[g+2>>0]<<16^e;l=7;break}case 2:{i=e;l=7;break}case 1:{j=e;l=8;break}default:k=e}if((l|0)==7){j=d[g+1>>0]<<8^i;l=8}if((l|0)==8)k=v(j^d[g>>0],1540483477)|0;r=v(k>>>13^k,1540483477)|0;r=r>>>15^r;p=c[b+4>>2]|0;if(!p){t=0;return t|0}i=p+-1|0;f=(i&p|0)==0;if(!f)if(r>>>0<p>>>0)q=r;else q=(r>>>0)%(p>>>0)|0;else q=r&i;e=c[(c[b>>2]|0)+(q<<2)>>2]|0;if(!e){t=0;return t|0}j=c[e>>2]|0;if(!j){t=0;return t|0}k=(s|0)==0;if(f){e=j;a:while(1){l=c[e+4>>2]|0;f=(l|0)==(r|0);if(!(f|(l&i|0)==(q|0))){e=0;l=45;break}do if(f?(m=e+8|0,n=a[m+11>>0]|0,o=n<<24>>24<0,n=n&255,((o?c[e+12>>2]|0:n)|0)==(s|0)):0){f=c[m>>2]|0;g=o?f:m;f=f&255;if(o){if(k){l=45;break a}if(!(Tz(g,t,s)|0)){l=45;break a}else break}if(k){l=45;break a}if((a[t>>0]|0)==f<<24>>24){f=n;g=m;h=t;do{f=f+-1|0;g=g+1|0;if(!f){l=45;break a}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);e=c[e>>2]|0;if(!e){e=0;l=45;break}}if((l|0)==45)return e|0}b:while(1){e=c[j+4>>2]|0;do if((e|0)==(r|0)){e=j+8|0;g=a[e+11>>0]|0;i=g<<24>>24<0;g=g&255;if(((i?c[j+12>>2]|0:g)|0)==(s|0)){f=c[e>>2]|0;h=i?f:e;f=f&255;if(i){if(k){e=j;l=45;break b}if(!(Tz(h,t,s)|0)){e=j;l=45;break b}else break}if(k){e=j;l=45;break b}if((a[t>>0]|0)==f<<24>>24){f=t;do{g=g+-1|0;e=e+1|0;if(!g){e=j;l=45;break b}f=f+1|0}while((a[e>>0]|0)==(a[f>>0]|0))}}}else{if(e>>>0>=p>>>0)e=(e>>>0)%(p>>>0)|0;if((e|0)!=(q|0)){e=0;l=45;break b}}while(0);j=c[j>>2]|0;if(!j){e=0;l=45;break}}if((l|0)==45)return e|0;return 0}function Xj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+64|0;m=s+48|0;p=s+24|0;j=s+12|0;o=s;c[j>>2]=0;r=j+4|0;c[r>>2]=0;c[j+8>>2]=0;q=b+52|0;l=b+56|0;f=(c[l>>2]|0)-(c[q>>2]|0)>>2;n=b+88|0;Cl(f+(Ok(c[b+76>>2]|0,c[b+80>>2]|0)|0)|0,n,j);f=c[r>>2]|0;j=c[j>>2]|0;k=j;b=f;if((f|0)!=(j|0)){i=p+20|0;g=o+11|0;d=k;h=0;do{e=a[d+(h*12|0)+11>>0]|0;if(e<<24>>24<0)d=c[d+(h*12|0)+4>>2]|0;else d=e&255;if(!d){d=h>>>0<(c[l>>2]|0)-(c[q>>2]|0)>>2>>>0?299971:299974;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;e=0;while(1){Vj(d,h,e,o);if(!(Wj(n,o)|0))break;else e=e+1|0}c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[i>>2]=h;Og(m,n,o,p);Gg(n,c[m>>2]|0);lB(k+(h*12|0)|0,o)|0;if((a[g>>0]|0)<0)$A(c[o>>2]|0);d=k}else d=j;h=h+1|0}while(h>>>0<((f-j|0)/12|0)>>>0)}if(!j){aa=s;return}if((b|0)!=(k|0))do{b=b+-12|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0)}while((b|0)!=(k|0));c[r>>2]=k;$A(j);aa=s;return}function Yj(a){a=a|0;var b=0;c[a>>2]=289128;b=c[a+36>>2]|0;if(b|0){c[a+40>>2]=b;$A(b)}b=c[a+24>>2]|0;if(b|0){c[a+28>>2]=b;$A(b)}b=c[a+12>>2]|0;if(!b)return;c[a+16>>2]=b;$A(b);return}function Zj(a){a=a|0;var b=0;c[a>>2]=289128;b=c[a+36>>2]|0;if(b|0){c[a+40>>2]=b;$A(b)}b=c[a+24>>2]|0;if(b|0){c[a+28>>2]=b;$A(b)}b=c[a+12>>2]|0;if(!b){$A(a);return}c[a+16>>2]=b;$A(b);$A(a);return}function _j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;f=g;e=b+48|0;b=c[e>>2]|0;c[e>>2]=b+1;e=d+36|0;h=a[e+11>>0]|0;if((h<<24>>24<0?c[d+40>>2]|0:h&255)|0){aa=g;return 0}qB(e,299983)|0;if((b|0)==-1){aa=g;return 0}BB(f,b);d=a[f+11>>0]|0;h=d<<24>>24<0;b=c[f>>2]|0;uB(e,h?b:f,h?c[f+4>>2]|0:d&255)|0;if(h)$A(b);aa=g;return 0}function $j(a,b){a=a|0;b=b|0;return 0}function ak(a,b){a=a|0;b=b|0;return 0}function bk(a,b){a=a|0;b=b|0;return 0}function ck(a,b){a=a|0;b=b|0;return 0}function dk(a,b){a=a|0;b=b|0;return 0}function ek(a,b){a=a|0;b=b|0;return 0}function fk(a,b){a=a|0;b=b|0;return 0}function gk(a,b){a=a|0;b=b|0;return 0}function hk(a,b){a=a|0;b=b|0;return 0}function ik(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;f=g;e=b+48|0;b=c[e>>2]|0;c[e>>2]=b+1;e=d+36|0;h=a[e+11>>0]|0;if((h<<24>>24<0?c[d+40>>2]|0:h&255)|0){aa=g;return 0}qB(e,299980)|0;if((b|0)==-1){aa=g;return 0}BB(f,b);d=a[f+11>>0]|0;h=d<<24>>24<0;b=c[f>>2]|0;uB(e,h?b:f,h?c[f+4>>2]|0:d&255)|0;if(h)$A(b);aa=g;return 0}function jk(a,b){a=a|0;b=b|0;return 0}function kk(a,b){a=a|0;b=b|0;return 0}function lk(a,b){a=a|0;b=b|0;return 0}function mk(a,b){a=a|0;b=b|0;return 0}function nk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;f=g;e=b+48|0;b=c[e>>2]|0;c[e>>2]=b+1;e=d+36|0;h=a[e+11>>0]|0;if((h<<24>>24<0?c[d+40>>2]|0:h&255)|0){aa=g;return 0}qB(e,299977)|0;if((b|0)==-1){aa=g;return 0}BB(f,b);d=a[f+11>>0]|0;h=d<<24>>24<0;b=c[f>>2]|0;uB(e,h?b:f,h?c[f+4>>2]|0:d&255)|0;if(h)$A(b);aa=g;return 0}function ok(a,b){a=a|0;b=b|0;return 0}function pk(a,b){a=a|0;b=b|0;return 0}function qk(a,b){a=a|0;b=b|0;return 0}function rk(a,b){a=a|0;b=b|0;return 0}function sk(a,b){a=a|0;b=b|0;return 0}function tk(a,b){a=a|0;b=b|0;return 0}function uk(a,b){a=a|0;b=b|0;return 0}function vk(a,b){a=a|0;b=b|0;return 0}function wk(a,b){a=a|0;b=b|0;return 0}function xk(a,b){a=a|0;b=b|0;return 0}function yk(a,b){a=a|0;b=b|0;return 0}function zk(a,b){a=a|0;b=b|0;return 0}function Ak(a,b){a=a|0;b=b|0;return 0}function Bk(a,b){a=a|0;b=b|0;return 0}function Ck(a){a=a|0;return c[160+(a<<2)>>2]|0}function Dk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=aa;aa=aa+16|0;f=g;Wn(f,d,e);d=Lg(b+256|0,f)|0;if(!d)e=-1;else e=c[d+40>>2]|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);d=c[b+112>>2]|0;if(e>>>0>=(c[b+116>>2]|0)-d>>2>>>0){b=0;aa=g;return b|0}b=c[d+(e<<2)>>2]|0;aa=g;return b|0}function Ek(a,b){a=a|0;b=b|0;return iy(a+216|0,b)|0}function Fk(a,b){a=a|0;b=b|0;return iy(a+236|0,b)|0}function Gk(a,b){a=a|0;b=b|0;return iy(a+296|0,b)|0}function Hk(a,b){a=a|0;b=b|0;return iy(a+316|0,b)|0}function Ik(a,b){a=a|0;b=b|0;return iy(a+276|0,b)|0}function Jk(a,b){a=a|0;b=b|0;return iy(a+196|0,b)|0}function Kk(a,b){a=a|0;b=b|0;return iy(a+336|0,b)|0}function Lk(a,b){a=a|0;b=b|0;return iy(a+356|0,b)|0}function Mk(a,b,d){a=a|0;b=b|0;d=d|0;switch(b|0){case 0:{d=iy(a+216|0,d)|0;b=a+48|0;break}case 3:{d=iy(a+236|0,d)|0;b=a+60|0;break}case 2:{d=iy(a+316|0,d)|0;b=a+56|0;break}case 1:{d=iy(a+296|0,d)|0;b=a+52|0;break}case 4:{d=iy(a+196|0,d)|0;b=a+44|0;break}default:{a=0;return a|0}}a=d>>>0<(c[b>>2]|0)>>>0;return a|0}function Nk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+16|0;q=r+4|0;p=r;d=c[a>>2]|0;o=a+4|0;c[o>>2]=d;f=c[b>>2]|0;m=b+4|0;n=c[m>>2]|0;i=n;g=f;if((f|0)==(n|0)){aa=r;return}e=d;d=c[f>>2]|0;c[q>>2]=d;c[p>>2]=1;n=a+8|0;if(i-g>>2>>>0>1){e=i;j=f;h=d;f=1;k=g;g=i;l=1;while(1){i=j+(l<<2)|0;if((c[i>>2]|0)==(h|0)){j=e;i=k;f=f+1|0}else{d=c[o>>2]|0;if(d>>>0<(c[n>>2]|0)>>>0){c[d>>2]=h;c[d+4>>2]=f;c[o>>2]=d+8;f=k;d=i}else{wi(a,q,p);d=c[b>>2]|0;e=c[m>>2]|0;f=d;d=d+(l<<2)|0}h=c[d>>2]|0;c[q>>2]=h;j=e;g=e;i=f;d=h;f=1}c[p>>2]=f;l=l+1|0;if(l>>>0>=g-i>>2>>>0)break;else{e=j;j=i;k=i}}e=c[o>>2]|0}else f=1;if(e>>>0<(c[n>>2]|0)>>>0){c[e>>2]=d;c[e+4>>2]=f;c[o>>2]=e+8}else wi(a,q,p);aa=r;return}function Ok(a,b){a=a|0;b=b|0;var d=0;if((a|0)==(b|0)){b=0;return b|0}d=a;a=0;do{a=(c[d+4>>2]|0)+a|0;d=d+8|0}while((d|0)!=(b|0));return a|0}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((a|0)==(b|0)){g=0;return g|0}e=0;while(1){e=(c[a+4>>2]|0)+e|0;f=a+8|0;if(e>>>0>d>>>0)break;if((f|0)==(b|0)){a=0;g=6;break}else a=f}if((g|0)==6)return a|0;g=c[a>>2]|0;return g|0}function Qk(a,b){a=a|0;b=b|0;if(!(c[b+20>>2]|0)){b=c[b+24>>2]|0;return b|0}else{b=iy(a+88|0,b)|0;return b|0}return 0}function Rk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+216|0,b)|0;b=c[a+76>>2]|0;if(d>>>0>=(c[a+80>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Sk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+216|0,b)|0;b=c[a+76>>2]|0;if(d>>>0>=(c[a+80>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Tk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+236|0,b)|0;b=c[a+88>>2]|0;if(d>>>0>=(c[a+92>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Uk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+236|0,b)|0;b=c[a+88>>2]|0;if(d>>>0>=(c[a+92>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Vk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+296|0,b)|0;b=c[a+136>>2]|0;if(d>>>0>=(c[a+140>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Wk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+316|0,b)|0;b=c[a+160>>2]|0;if(d>>>0>=(c[a+164>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Xk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+196|0,b)|0;b=c[a+64>>2]|0;if(d>>>0>=(c[a+68>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Yk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+336|0,b)|0;b=c[a+172>>2]|0;if(d>>>0>=(c[a+176>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function Zk(a,b){a=a|0;b=b|0;var d=0;d=iy(a+356|0,b)|0;b=c[a+148>>2]|0;if(d>>>0>=(c[a+152>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function _k(a,b){a=a|0;b=b|0;var d=0;d=iy(a+276|0,b)|0;b=c[a+124>>2]|0;if(d>>>0>=(c[a+128>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function $k(a,b){a=a|0;b=b|0;var d=0;d=iy(a+276|0,b)|0;b=c[a+124>>2]|0;if(d>>>0>=(c[a+128>>2]|0)-b>>2>>>0){a=0;return a|0}a=c[b+(d<<2)>>2]|0;return a|0}function al(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=c[a+128>>2]|0;a=c[a+124>>2]|0;j=a;if((d|0)==(a|0)){l=-1;return l|0}k=c[b>>2]|0;l=(c[b+4>>2]|0)-k|0;h=c[b+12>>2]|0;i=(c[b+16>>2]|0)-h|0;g=d-a>>2;a=0;a:while(1){f=c[j+(a<<2)>>2]|0;m=c[f+16>>2]|0;d=c[f+12>>2]|0;b=d;e=m;b:do if((m-d|0)==(l|0)){if((b|0)!=(e|0)){d=k;while(1){if((c[b>>2]|0)!=(c[d>>2]|0))break b;b=b+4|0;if((b|0)==(e|0))break;else d=d+4|0}}d=c[f+28>>2]|0;m=c[f+24>>2]|0;b=m;e=d;if((d-m|0)==(i|0)){if((b|0)==(e|0)){b=14;break a}d=h;while(1){if((c[b>>2]|0)!=(c[d>>2]|0))break b;b=b+4|0;if((b|0)==(e|0)){b=14;break a}else d=d+4|0}}}while(0);a=a+1|0;if(a>>>0>=g>>>0){a=-1;b=14;break}}if((b|0)==14)return a|0;return 0}function bl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(a[d>>0]|0){m=iy(b+276|0,d+4|0)|0;return m|0}e=c[b+128>>2]|0;b=c[b+124>>2]|0;k=b;if((e|0)==(b|0)){m=-1;return m|0}l=c[d+40>>2]|0;m=(c[d+44>>2]|0)-l|0;i=c[d+52>>2]|0;j=(c[d+56>>2]|0)-i|0;h=e-b>>2;b=0;a:while(1){f=c[k+(b<<2)>>2]|0;n=c[f+16>>2]|0;e=c[f+12>>2]|0;d=e;g=n;b:do if((n-e|0)==(m|0)){if((d|0)!=(g|0)){e=l;while(1){if((c[d>>2]|0)!=(c[e>>2]|0))break b;d=d+4|0;if((d|0)==(g|0))break;else e=e+4|0}}g=c[f+28>>2]|0;n=c[f+24>>2]|0;d=n;f=g;if((g-n|0)==(j|0)){if((d|0)==(f|0)){d=16;break a}e=i;while(1){if((c[d>>2]|0)!=(c[e>>2]|0))break b;d=d+4|0;if((d|0)==(f|0)){d=16;break a}else e=e+4|0}}}while(0);b=b+1|0;if(b>>>0>=h>>>0){b=-1;d=16;break}}if((d|0)==16)return b|0;return 0}function cl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+176|0;else{k=f+12|0;f=b+176|0;e=(c[f>>2]|0)-(c[b+172>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+336|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+180>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else dl(b+172|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function dl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function el(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+152|0;else{k=f+12|0;f=b+152|0;e=(c[f>>2]|0)-(c[b+148>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+356|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+156>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else fl(b+148|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function fl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function gl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+68|0;else{k=f+12|0;f=b+68|0;e=(c[f>>2]|0)-(c[b+64>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+196|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+72>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else hl(b+64|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function hl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function il(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=aa;aa=aa+48|0;f=i+24|0;j=i;k=c[b>>2]|0;g=k+36|0;k=k+12|0;h=a+112|0;e=a+116|0;d=(c[e>>2]|0)-(c[h>>2]|0)>>2;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=d;d=a+256|0;Og(f,d,g,j);Gg(d,c[f>>2]|0);c[f>>2]=g;d=c[e>>2]|0;if(d>>>0<(c[a+120>>2]|0)>>>0){c[d>>2]=g;c[e>>2]=(c[e>>2]|0)+4}else jl(h,f);f=c[b>>2]|0;c[b>>2]=0;e=a+36|0;d=c[e>>2]|0;if(!d){k=a+32|0;c[k>>2]=f;c[e>>2]=f;k=a+40|0;j=c[k>>2]|0;j=j+1|0;c[k>>2]=j;aa=i;return}else{c[f+8>>2]=d;k=d+4|0;c[k>>2]=f;c[e>>2]=f;k=a+40|0;j=c[k>>2]|0;j=j+1|0;c[k>>2]=j;aa=i;return}}function jl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function kl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+80|0;else{k=f+12|0;f=b+80|0;e=(c[f>>2]|0)-(c[b+76>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+216|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+84>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else ll(b+76|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function ll(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function ml(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+128|0;else{k=f+12|0;f=b+128|0;e=(c[f>>2]|0)-(c[b+124>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+276|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+132>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else nl(b+124|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function nl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function ol(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+36|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+40>>2]|0;else e=e&255;if(!e)f=b+92|0;else{k=f+12|0;f=b+92|0;e=(c[f>>2]|0)-(c[b+88>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+236|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+96>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else pl(b+88|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function pl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function ql(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+48|0;k=n+28|0;m=n+24|0;l=n;e=c[(c[d>>2]|0)+36>>2]|0;c[m>>2]=e;switch(c[e+28>>2]|0){case 0:{i=e+32|0;g=b+76|0;f=b+80|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+84>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else ll(g,k);g=b+216|0;f=i;e=b+48|0;j=22;break}case 1:{i=e+32|0;g=b+136|0;f=b+140|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+144>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else rl(g,k);g=b+296|0;f=i;e=b+52|0;j=22;break}case 2:{i=e+32|0;g=b+160|0;f=b+164|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+168>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else sl(g,k);g=b+316|0;f=i;e=b+56|0;j=22;break}case 3:{i=e+32|0;g=b+88|0;f=b+92|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+96>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else pl(g,k);g=b+236|0;f=i;e=b+60|0;j=22;break}case 4:{i=e+32|0;g=b+64|0;f=b+68|0;e=c[f>>2]|0;h=e-(c[g>>2]|0)|0;c[k>>2]=i;if((c[b+72>>2]|0)>>>0>e>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else hl(g,k);g=b+196|0;f=i;e=b+44|0;j=22;break}default:{i=0;g=-1;f=0}}if((j|0)==22){c[e>>2]=(c[e>>2]|0)+1;i=g;g=h>>2}e=a[f+11>>0]|0;if(e<<24>>24<0)e=c[f+4>>2]|0;else e=e&255;if(e|0){j=(c[d>>2]|0)+12|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[l+12>>2]=c[j+12>>2];c[l+16>>2]=c[j+16>>2];c[l+20>>2]=g;tl(k,i,f,l);Gg(i,c[k>>2]|0)}f=b+104|0;e=c[f>>2]|0;if((e|0)==(c[b+108>>2]|0))ul(b+100|0,m);else{c[e>>2]=c[m>>2];c[f>>2]=(c[f>>2]|0)+4}g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){d=b+32|0;c[d>>2]=g;c[f>>2]=g;b=b+40|0;d=c[b>>2]|0;d=d+1|0;c[b>>2]=d;aa=n;return}else{c[g+8>>2]=e;d=e+4|0;c[d>>2]=g;c[f>>2]=g;b=b+40|0;d=c[b>>2]|0;d=d+1|0;c[b>>2]=d;aa=n;return}}function rl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function sl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function tl(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;i=_A(44)|0;c[b>>2]=i;c[b+4>>2]=e+8;e=i+8|0;cB(e,f);h=i+20|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];a[b+8>>0]=1;h=a[i+19>>0]|0;b=h<<24>>24<0;e=b?c[e>>2]|0:e;h=b?c[i+12>>2]|0:h&255;if(h>>>0>3){g=e;f=h;b=h;while(1){k=v(d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24,1540483477)|0;f=(v(k>>>24^k,1540483477)|0)^(v(f,1540483477)|0);b=b+-4|0;if(b>>>0<=3)break;else g=g+4|0}k=h+-4|0;g=k&-4;e=e+(g+4)|0;g=k-g|0}else{f=h;g=h}switch(g|0){case 3:{f=(d[e+2>>0]|0)<<16^f;j=7;break}case 2:{j=7;break}case 1:break;default:{j=f;k=j>>>13;j=k^j;j=v(j,1540483477)|0;k=j>>>15;j=k^j;k=i+4|0;c[k>>2]=j;c[i>>2]=0;return}}if((j|0)==7)f=(d[e+1>>0]|0)<<8^f;j=v(f^(d[e>>0]|0),1540483477)|0;k=j>>>13;j=k^j;j=v(j,1540483477)|0;k=j>>>15;j=k^j;k=i+4|0;c[k>>2]=j;c[i>>2]=0;return}function ul(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function vl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+40|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+44>>2]|0;else e=e&255;if(!e)f=b+164|0;else{k=f+12|0;f=b+164|0;e=(c[f>>2]|0)-(c[b+160>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+316|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+168>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else sl(b+160|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function wl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;f=h;g=(c[b>>2]|0)+36|0;c[f>>2]=g;e=a+188|0;d=c[e>>2]|0;if(d>>>0<(c[a+192>>2]|0)>>>0){c[d>>2]=g;c[e>>2]=(c[e>>2]|0)+4}else xl(a+184|0,f);f=c[b>>2]|0;c[b>>2]=0;e=a+36|0;d=c[e>>2]|0;if(!d){b=a+32|0;c[b>>2]=f;c[e>>2]=f;a=a+40|0;b=c[a>>2]|0;b=b+1|0;c[a>>2]=b;aa=h;return}else{c[f+8>>2]=d;b=d+4|0;c[b>>2]=f;c[e>>2]=f;a=a+40|0;b=c[a>>2]|0;b=b+1|0;c[a>>2]=b;aa=h;return}}function xl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function yl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+48|0;h=j+24|0;g=j;f=c[d>>2]|0;i=f+40|0;e=a[i+11>>0]|0;if(e<<24>>24<0)e=c[f+44>>2]|0;else e=e&255;if(!e)f=b+140|0;else{k=f+12|0;f=b+140|0;e=(c[f>>2]|0)-(c[b+136>>2]|0)>>2;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=e;e=b+296|0;Og(h,e,i,g);Gg(e,c[h>>2]|0)}c[h>>2]=i;e=c[f>>2]|0;if(e>>>0<(c[b+144>>2]|0)>>>0){c[e>>2]=i;c[f>>2]=(c[f>>2]|0)+4}else rl(b+136|0,h);g=c[d>>2]|0;c[d>>2]=0;f=b+36|0;e=c[f>>2]|0;if(!e){k=b+32|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}else{c[g+8>>2]=e;k=e+4|0;c[k>>2]=g;c[f>>2]=g;k=b+40|0;b=c[k>>2]|0;b=b+1|0;c[k>>2]=b;aa=j;return}}function zl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+80|0;o=q+64|0;n=q+40|0;e=q+32|0;l=q+28|0;m=q+24|0;f=q+20|0;g=q+16|0;h=q+12|0;i=q+8|0;j=q+4|0;k=q;p=c[b>>2]|0;d=p;do switch(c[p+32>>2]|0){case 0:{c[b>>2]=0;c[e>>2]=d;kl(a,e);d=c[e>>2]|0;c[e>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 1:{c[b>>2]=0;c[l>>2]=d;ol(a,l);d=c[l>>2]|0;c[l>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 2:{c[b>>2]=0;c[m>>2]=d;ql(a,m);d=c[m>>2]|0;c[m>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 3:{c[b>>2]=0;e=p+36|0;m=p+12|0;f=a+112|0;b=a+116|0;d=(c[b>>2]|0)-(c[f>>2]|0)>>2;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];c[n+20>>2]=d;d=a+256|0;Og(o,d,e,n);Gg(d,c[o>>2]|0);c[o>>2]=e;d=c[b>>2]|0;if(d>>>0<(c[a+120>>2]|0)>>>0){c[d>>2]=e;c[b>>2]=(c[b>>2]|0)+4}else jl(f,o);b=a+36|0;d=c[b>>2]|0;if(!d)d=a+32|0;else{c[p+8>>2]=d;d=d+4|0}c[d>>2]=p;c[b>>2]=p;a=a+40|0;c[a>>2]=(c[a>>2]|0)+1;aa=q;return}case 4:{c[b>>2]=0;c[f>>2]=d;ml(a,f);d=c[f>>2]|0;c[f>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 5:{c[b>>2]=0;c[g>>2]=d;yl(a,g);d=c[g>>2]|0;c[g>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 6:{c[b>>2]=0;c[h>>2]=d;el(a,h);d=c[h>>2]|0;c[h>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 7:{c[b>>2]=0;c[i>>2]=d;vl(a,i);d=c[i>>2]|0;c[i>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 8:{c[b>>2]=0;c[j>>2]=d;cl(a,j);d=c[j>>2]|0;c[j>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}case 9:{c[b>>2]=0;e=p+36|0;c[o>>2]=e;b=a+188|0;d=c[b>>2]|0;if(d>>>0<(c[a+192>>2]|0)>>>0){c[d>>2]=e;c[b>>2]=(c[b>>2]|0)+4}else xl(a+184|0,o);b=a+36|0;d=c[b>>2]|0;if(!d)d=a+32|0;else{c[p+8>>2]=d;d=d+4|0}c[d>>2]=p;c[b>>2]=p;a=a+40|0;c[a>>2]=(c[a>>2]|0)+1;aa=q;return}case 10:{c[b>>2]=0;c[k>>2]=d;gl(a,k);d=c[k>>2]|0;c[k>>2]=0;if(!d){aa=q;return}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=q;return}default:{aa=q;return}}while(0)}function Al(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+16|0;g=j;i=b+8|0;d=c[i>>2]|0;if(!d){aa=j;return}h=b+4|0;do{e=c[b>>2]|0;if((e|0)==(c[h>>2]|0)){c[h>>2]=0;c[b>>2]=0;f=e+4|0}else{f=e+4|0;k=c[f>>2]|0;c[b>>2]=k;c[k+8>>2]=0}c[e+8>>2]=0;c[f>>2]=0;c[i>>2]=d+-1;c[g>>2]=e;zl(a,g);d=c[g>>2]|0;c[g>>2]=0;if(d|0)ma[c[(c[d>>2]|0)+4>>2]&255](d);d=c[i>>2]|0}while((d|0)!=0);aa=j;return}function Bl(a,b){a=a|0;b=b|0;var d=0;d=iy(a+12|0,b)|0;b=c[a>>2]|0;if(d>>>0>=(c[a+4>>2]|0)-b>>2>>>0){a=0;return a|0}a=(c[b+(d<<2)>>2]|0)+8|0;return a|0}function Cl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=c[e>>2]|0;i=e+4|0;g=c[i>>2]|0;h=f;if((g|0)==(f|0))g=h;else{do{g=g+-12|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0)}while((g|0)!=(f|0));g=c[e>>2]|0}c[i>>2]=f;h=(h-g|0)/12|0;if(h>>>0>=b>>>0){if(h>>>0>b>>>0){g=g+(b*12|0)|0;if((g|0)!=(f|0))do{f=f+-12|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(g|0));c[i>>2]=g}}else Dl(e,b-h|0);f=c[d+8>>2]|0;if(!f)return;do{d=f;lB((c[e>>2]|0)+((c[d+40>>2]|0)*12|0)|0,d+8|0)|0;f=c[f>>2]|0}while((f|0)!=0);return}function Dl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=b+8|0;g=c[m>>2]|0;n=b+4|0;f=c[n>>2]|0;k=f;if(((g-f|0)/12|0)>>>0>=d>>>0){e=d;do{c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;f=(c[n>>2]|0)+12|0;c[n>>2]=f;e=e+-1|0}while((e|0)!=0);return}e=c[b>>2]|0;h=(f-e|0)/12|0;i=h+d|0;l=e;if(i>>>0>357913941)HB();g=(g-e|0)/12|0;f=g<<1;f=g>>>0<178956970?(f>>>0<i>>>0?i:f):357913941;do if(f)if(f>>>0>357913941)U();else{j=_A(f*12|0)|0;break}else j=0;while(0);h=j+(h*12|0)|0;uC(h|0,0,d*12|0)|0;d=j+(f*12|0)|0;i=j+(i*12|0)|0;if((k|0)!=(l|0)){e=k;do{h=h+-12|0;e=e+-12|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0}while((e|0)!=(l|0));e=c[b>>2]|0;f=c[n>>2]|0;g=e;c[b>>2]=h;c[n>>2]=i;c[m>>2]=d;if((f|0)!=(g|0))do{f=f+-12|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(g|0))}else{c[b>>2]=h;c[n>>2]=i;c[m>>2]=d}if(!e)return;$A(e);return}function El(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=0;c[a+24>>2]=b;return}function Fl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=1;Vn(a+24|0,b,d);return}function Gl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+16|0;g=i;h=b+20|0;e=b+24|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[e>>2]=-1;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];f=d+24|0;if(!(c[d+20>>2]|0)){g=c[f>>2]|0;c[h>>2]=0;c[e>>2]=g;aa=i;return}e=a[f+11>>0]|0;j=e<<24>>24<0;Wn(g,j?c[f>>2]|0:f,j?c[d+28>>2]|0:e&255);e=b+24|0;if((c[h>>2]|0)==1?(a[e+11>>0]|0)<0:0)$A(c[e>>2]|0);c[h>>2]=1;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];aa=i;return}function Hl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;g=h;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];e=d+24|0;if(!(c[d+20>>2]|0)){e=c[e>>2]|0;d=b+20|0;if((c[d>>2]|0)==1?(f=b+24|0,(a[f+11>>0]|0)<0):0)$A(c[f>>2]|0);c[d>>2]=0;c[b+24>>2]=e;aa=h;return b|0}else{f=a[e+11>>0]|0;i=f<<24>>24<0;Wn(g,i?c[e>>2]|0:e,i?c[d+28>>2]|0:f&255);d=b+20|0;e=b+24|0;if((c[d>>2]|0)==1?(a[e+11>>0]|0)<0:0)$A(c[e>>2]|0);c[d>>2]=1;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];aa=h;return b|0}return 0}function Il(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+16|0;g=i;h=b+20|0;e=b+24|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[e>>2]=-1;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];f=d+24|0;if(!(c[d+20>>2]|0)){g=c[f>>2]|0;c[h>>2]=0;c[e>>2]=g;aa=i;return}e=a[f+11>>0]|0;j=e<<24>>24<0;Wn(g,j?c[f>>2]|0:f,j?c[d+28>>2]|0:e&255);e=b+24|0;if((c[h>>2]|0)==1?(a[e+11>>0]|0)<0:0)$A(c[e>>2]|0);c[h>>2]=1;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];aa=i;return}function Jl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;g=h;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];e=d+24|0;if(!(c[d+20>>2]|0)){e=c[e>>2]|0;d=b+20|0;if((c[d>>2]|0)==1?(f=b+24|0,(a[f+11>>0]|0)<0):0)$A(c[f>>2]|0);c[d>>2]=0;c[b+24>>2]=e;aa=h;return b|0}else{f=a[e+11>>0]|0;i=f<<24>>24<0;Wn(g,i?c[e>>2]|0:e,i?c[d+28>>2]|0:f&255);d=b+20|0;e=b+24|0;if((c[d>>2]|0)==1?(a[e+11>>0]|0)<0:0)$A(c[e>>2]|0);c[d>>2]=1;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];aa=h;return b|0}return 0}function Kl(b,d){b=b|0;d=d|0;var e=0,f=0;f=b+20|0;if((c[f>>2]|0)==1?(e=b+24|0,(a[e+11>>0]|0)<0):0)$A(c[e>>2]|0);c[f>>2]=0;c[b+24>>2]=d;return}function Ll(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=aa;aa=aa+16|0;f=g;Wn(f,d,e);e=b+20|0;d=b+24|0;if((c[e>>2]|0)==1?(a[d+11>>0]|0)<0:0)$A(c[d>>2]|0);c[e>>2]=1;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];aa=g;return}function Ml(b){b=b|0;if((c[b+20>>2]|0)!=1)return;b=b+24|0;if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Nl(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=-1;c[a+24>>2]=b;return}function Ol(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=-2;a=a+24|0;c[a>>2]=b;c[a+4>>2]=d;return}function Pl(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=-3;c[a+24>>2]=b;return}function Ql(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=-4;a=a+24|0;c[a>>2]=b;c[a+4>>2]=d;return}function Rl(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];c[a+16>>2]=c[d+16>>2];c[a+20>>2]=-5;a=a+24|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Sl(a){a=a|0;var b=0;b=0;do{a=a>>>7;b=b+1|0}while((a|0)!=0);return b|0}function Tl(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;f=aa;aa=aa+16|0;g=f;a[g>>0]=d|128;a[g+1>>0]=d>>>7|128;a[g+2>>0]=d>>>14|128;a[g+3>>0]=d>>>21|128;a[g+4>>0]=d>>>28;Nn(b,c,g,5,e);aa=f;return}function Ul(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;e=c>>>7;if(!e){g=i;f=1;e=c}else{h=0;while(1){a[i+h>>0]=c|128;c=h+1|0;f=e>>>7;if(!f)break;else{g=e;h=c;e=f;c=g}}g=i+c|0;f=h+2|0}a[g>>0]=e&127;Qn(b,i,f,d,0);aa=j;return}function Vl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;e=aa;aa=aa+16|0;f=e;a[f>>0]=c|128;a[f+1>>0]=c>>>7|128;a[f+2>>0]=c>>>14|128;a[f+3>>0]=c>>>21|128;a[f+4>>0]=c>>>28;Qn(b,f,5,d,0);aa=e;return}function Wl(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;f=d>>>7;if(!f){h=j;g=1;f=d}else{i=0;while(1){a[j+i>>0]=d|128;d=i+1|0;g=f>>>7;if(!g)break;else{h=f;i=d;f=g;d=h}}h=j+d|0;g=i+2|0}a[h>>0]=f&127;Nn(b,c,j,g,e);aa=k;return}function Xl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;e=d>>>7;if(!e){g=i;f=1;e=d}else{h=0;while(1){a[i+h>>0]=d|128;d=h+1|0;f=e>>>7;if(!f)break;else{g=e;h=d;e=f;d=g}}g=i+d|0;f=h+2|0}a[g>>0]=e&127;if((c-b|0)>>>0<f>>>0){c=0;aa=j;return c|0}sC(b|0,i|0,f|0)|0;c=f;aa=j;return c|0}function Yl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;e=c>>7;if((c|0)<0)if((e|0)!=-1|(c&64|0)==0){f=0;while(1){a[h+f>>0]=c|128;f=f+1|0;c=e>>7;if(!((c|0)!=-1|(e&64|0)==0))break;else{g=e;e=c;c=g}}g=h+f|0;c=e}else{g=h;f=0}else if(!(e|c&64)){g=h;f=0}else{f=0;while(1){a[h+f>>0]=c|128;f=f+1|0;c=e>>7;if(!(c|e&64))break;else{g=e;e=c;c=g}}g=h+f|0;c=e}a[g>>0]=c&127;Qn(b,h,f+1|0,d,0);aa=i;return}function Zl(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;g=h;f=c&255;c=nC(c|0,d|0,7)|0;e=z()|0;if((d|0)<0)if((c|0)!=-1|(e|0)!=-1|(f&64)==0){d=c;c=0;do{a[g+c>>0]=f|-128;c=c+1|0;f=d&255;d=nC(d|0,e|0,7)|0;e=z()|0}while((d|0)!=-1|(e|0)!=-1|(f&64)==0);e=f;d=g+c|0}else{e=f;d=g;c=0}else if((c|0)==0&(e|0)==0&(f&64)==0){e=f;d=g;c=0}else{d=c;c=0;do{a[g+c>>0]=f|-128;c=c+1|0;f=d&255;d=nC(d|0,e|0,7)|0;e=z()|0}while(!((d|0)==0&(e|0)==0&(f&64)==0));e=f;d=g+c|0}a[d>>0]=e&127;Qn(b,g,c+1|0,298513,0);aa=h;return}function _l(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(b>>>0<e>>>0?(g=d[b>>0]|0,(g&128|0)==0):0){g=g&127;h=1}else i=4;do if((i|0)==4){j=b+1|0;if(j>>>0<e>>>0?(h=d[j>>0]|0,(h&128|0)==0):0){g=h<<7&16256|a[b>>0]&127;h=2;break}i=b+2|0;if(i>>>0<e>>>0?(k=d[i>>0]|0,(k&128|0)==0):0){g=k<<14&2080768|a[b>>0]&127|(a[j>>0]&127)<<7;h=3;break}h=b+3|0;if(h>>>0<e>>>0?(l=d[h>>0]|0,(l&128|0)==0):0){g=(a[i>>0]&127)<<14|l<<21&266338304|a[b>>0]&127|(a[j>>0]&127)<<7;h=4;break}g=b+4|0;if(g>>>0<e>>>0?(m=d[g>>0]|0,(m&128|0)==0):0)if(!(m&240)){g=(a[h>>0]&127)<<21|m<<28|(a[i>>0]&127)<<14|a[b>>0]&127|(a[j>>0]&127)<<7;h=5;break}else{f=0;return f|0}else{g=0;h=0}}while(0);c[f>>2]=g;f=h;return f|0}function $l(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;if(b>>>0<e>>>0?(g=d[b>>0]|0,(g&128|0)==0):0){c[f>>2]=g<<25>>25;b=1;return b|0}m=b+1|0;if(m>>>0<e>>>0?(h=d[m>>0]|0,(h&128|0)==0):0){c[f>>2]=(h<<7|a[b>>0]&127)<<18>>18;b=2;return b|0}l=b+2|0;if(l>>>0<e>>>0?(i=d[l>>0]|0,(i&128|0)==0):0){c[f>>2]=(i<<14|a[b>>0]&127|(a[m>>0]&127)<<7)<<11>>11;b=3;return b|0}k=b+3|0;if(k>>>0<e>>>0?(j=d[k>>0]|0,(j&128|0)==0):0){c[f>>2]=((a[l>>0]&127)<<14|j<<21|a[b>>0]&127|(a[m>>0]&127)<<7)<<4>>4;b=4;return b|0}g=b+4|0;if(g>>>0>=e>>>0){b=0;return b|0}h=d[g>>0]|0;if(h&128|0){b=0;return b|0}i=(h&8|0)!=0;g=h&240;if(i&(g|0)!=112){b=0;return b|0}if((g|0)!=0&(i^1)){b=0;return b|0}c[f>>2]=(a[k>>0]&127)<<21|h<<28|(a[l>>0]&127)<<14|a[b>>0]&127|(a[m>>0]&127)<<7;b=5;return b|0}function am(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if(b>>>0<d>>>0?(f=a[b>>0]|0,f<<24>>24>-1):0){r=pC(f&255|0,0,57)|0;r=nC(r|0,z()|0,57)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=1;return b|0}s=b+1|0;if(s>>>0<d>>>0?(g=a[s>>0]|0,g<<24>>24>-1):0){s=pC(g&255|0,0,7)|0;r=z()|0;r=pC(s|a[b>>0]&127|0,r|0,50)|0;r=nC(r|0,z()|0,50)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=2;return b|0}r=b+2|0;if(r>>>0<d>>>0?(h=a[r>>0]|0,h<<24>>24>-1):0){d=pC(h&255|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(d|a[b>>0]&127|s|0,q|r|0,43)|0;r=nC(r|0,z()|0,43)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=3;return b|0}q=b+3|0;if(q>>>0<d>>>0?(i=a[q>>0]|0,i<<24>>24>-1):0){p=pC(i&255|0,0,21)|0;q=z()|0;o=pC(a[r>>0]&127|0,0,14)|0;d=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(o|p|a[b>>0]&127|s|0,d|q|r|0,36)|0;r=nC(r|0,z()|0,36)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=4;return b|0}p=b+4|0;if(p>>>0<d>>>0?(j=a[p>>0]|0,j<<24>>24>-1):0){n=pC(j&255|0,0,28)|0;d=z()|0;m=pC(a[q>>0]&127|0,0,21)|0;p=z()|0;o=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(m|n|o|a[b>>0]&127|s|0,p|d|q|r|0,29)|0;r=nC(r|0,z()|0,29)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=5;return b|0}o=b+5|0;if(o>>>0<d>>>0?(k=a[o>>0]|0,k<<24>>24>-1):0){l=pC(k&255|0,0,35)|0;o=z()|0;k=pC(a[p>>0]&127|0,0,28)|0;p=z()|0;m=pC(a[q>>0]&127|0,0,21)|0;d=z()|0;n=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(k|l|m|n|a[b>>0]&127|s|0,p|o|d|q|r|0,22)|0;r=nC(r|0,z()|0,22)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=6;return b|0}k=b+6|0;if(k>>>0<d>>>0?(l=a[k>>0]|0,l<<24>>24>-1):0){j=pC(l&255|0,0,42)|0;n=z()|0;i=pC(a[o>>0]&127|0,0,35)|0;o=z()|0;k=pC(a[p>>0]&127|0,0,28)|0;p=z()|0;l=pC(a[q>>0]&127|0,0,21)|0;d=z()|0;m=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(i|j|k|l|m|a[b>>0]&127|s|0,o|n|p|d|q|r|0,15)|0;r=nC(r|0,z()|0,15)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=7;return b|0}j=b+7|0;if(j>>>0<d>>>0?(m=a[j>>0]|0,m<<24>>24>-1):0){h=pC(m&255|0,0,49)|0;n=z()|0;g=pC(a[k>>0]&127|0,0,42)|0;m=z()|0;i=pC(a[o>>0]&127|0,0,35)|0;o=z()|0;j=pC(a[p>>0]&127|0,0,28)|0;p=z()|0;k=pC(a[q>>0]&127|0,0,21)|0;d=z()|0;l=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(g|h|i|j|k|l|a[b>>0]&127|s|0,m|n|o|p|d|q|r|0,8)|0;r=nC(r|0,z()|0,8)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=8;return b|0}i=b+8|0;if(i>>>0<d>>>0?(n=a[i>>0]|0,n<<24>>24>-1):0){f=pC(n&127|0,0,56)|0;m=z()|0;t=pC(a[j>>0]&127|0,0,49)|0;l=z()|0;g=pC(a[k>>0]&127|0,0,42)|0;n=z()|0;h=pC(a[o>>0]&127|0,0,35)|0;o=z()|0;i=pC(a[p>>0]&127|0,0,28)|0;p=z()|0;j=pC(a[q>>0]&127|0,0,21)|0;d=z()|0;k=pC(a[r>>0]&127|0,0,14)|0;q=z()|0;s=pC(a[s>>0]&127|0,0,7)|0;r=z()|0;r=pC(t|f|g|h|i|j|k|a[b>>0]&127|s|0,l|m|n|o|p|d|q|r|0,1)|0;r=nC(r|0,z()|0,1)|0;s=z()|0;b=e;c[b>>2]=r;c[b+4>>2]=s;b=9;return b|0}f=b+9|0;if(f>>>0>=d>>>0){t=0;return t|0}g=a[f>>0]|0;f=g&255;if(f&128|0){t=0;return t|0}h=(f&1|0)!=0;f=f&254;if(h&(f|0)!=126){t=0;return t|0}if((f|0)!=0&(h^1)){t=0;return t|0}v=pC(g&255|0,0,63)|0;l=z()|0;w=pC(a[i>>0]&127|0,0,56)|0;i=z()|0;u=pC(a[j>>0]&127|0,0,49)|0;m=z()|0;f=pC(a[k>>0]&127|0,0,42)|0;n=z()|0;g=pC(a[o>>0]&127|0,0,35)|0;o=z()|0;h=pC(a[p>>0]&127|0,0,28)|0;d=z()|0;j=pC(a[q>>0]&127|0,0,21)|0;q=z()|0;k=pC(a[r>>0]&127|0,0,14)|0;r=z()|0;p=pC(a[s>>0]&127|0,0,7)|0;s=z()|0;t=e;c[t>>2]=w|v|u|f|g|h|j|k|a[b>>0]&127|p;c[t+4>>2]=i|l|m|n|o|d|q|r|s;t=10;return t|0}function bm(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=0;return}function cm(a,b){a=a|0;b=b|0;var d=0,e=0;d=_A(12)|0;e=c[b+4>>2]|0;c[d>>2]=c[b>>2];c[d+4>>2]=e;c[d+8>>2]=c[b+8>>2];c[a>>2]=d;return}function dm(a,b){a=a|0;b=b|0;c[b>>2]=a;return}function em(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+8|0;e=c[f>>2]|0;d=(c[a+4>>2]|0)-e|0;d=d>>>0<65536?d:65536;if(!d)return d|0;sC(b|0,(c[a>>2]|0)+e|0,d|0)|0;c[f>>2]=(c[f>>2]|0)+d;return d|0}function fm(a){a=a|0;if(!(c[a+4>>2]|0))return;c[a+8>>2]=0;return}function gm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=c[d>>2]|0;n=c[d+4>>2]|0;m=c[b+4>>2]|0;l=m>>>0<l>>>0?m:l;n=(m>>>0<n>>>0?m:n)-l|0;if(!n)return 0;m=e+4|0;f=c[m>>2]|0;h=c[e>>2]|0;k=f-h|0;i=h;a:do if(n>>>0>k>>>0){d=n-k|0;j=e+8|0;g=c[j>>2]|0;if((g-f|0)>>>0>=d>>>0)while(1){a[f>>0]=0;f=(c[m>>2]|0)+1|0;c[m>>2]=f;d=d+-1|0;if(!d)break a}if((n|0)<0)HB();f=g-h|0;g=f<<1;g=f>>>0<1073741823?(g>>>0<n>>>0?n:g):2147483647;if(!g)f=0;else f=_A(g)|0;uC(f+k|0,0,d|0)|0;if((k|0)>0)sC(f|0,i|0,k|0)|0;c[e>>2]=f;c[m>>2]=f+n;c[j>>2]=f+g;if(h|0)$A(i)}else if(n>>>0<k>>>0)c[m>>2]=i+n;while(0);sC(c[e>>2]|0,(c[b>>2]|0)+l|0,n|0)|0;return 0}function hm(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+16|0;g=i+4|0;h=i;j=c[d>>2]|0;c[d>>2]=0;c[a>>2]=j;f=a+4|0;e=a+8|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;b[f+16>>1]=0;fm(j);c[g>>2]=0;c[h>>2]=0;d=c[e>>2]|0;if(d>>>0<(c[a+12>>2]|0)>>>0){c[d>>2]=0;c[d+4>>2]=0;c[e>>2]=d+8;aa=i;return}else{im(f,g,h);aa=i;return}}function im(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;i=a+4|0;g=c[a>>2]|0;m=(c[i>>2]|0)-g|0;l=m>>3;e=l+1|0;if(e>>>0>536870911)HB();j=a+8|0;n=(c[j>>2]|0)-g|0;f=n>>2;f=n>>3>>>0<268435455?(f>>>0<e>>>0?e:f):536870911;do if(f)if(f>>>0>536870911)U();else{k=_A(f<<3)|0;h=k;break}else{h=0;k=0}while(0);e=k+(l<<3)|0;n=c[d>>2]|0;c[e>>2]=c[b>>2];c[k+(l<<3)+4>>2]=n;if((m|0)>0)sC(h|0,g|0,m|0)|0;c[a>>2]=k;c[i>>2]=e+8;c[j>>2]=k+(f<<3);if(!g)return;$A(g);return}function jm(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+48|0;l=m+32|0;g=m+8|0;k=m+16|0;j=m;c[g>>2]=0;i=g+4|0;c[i>>2]=0;if((km(a,b,g)|0)==1){aa=m;return}b=g;h=c[b>>2]|0;b=c[b+4>>2]|0;if((b-h|0)>>>0>80){g=(e-d|0)>>>0>80?d:(e+d|0)/2|0;g=((g+-1|0)>>>0>40?g+-41|0:0)+h|0;b=b+-80|0;g=b>>>0<g>>>0?b:g;b=g+80|0;d=(c[i>>2]|0)!=(b|0);c[f+12>>2]=g-h;if((g|0)!=(h|0)){vB(f,330828)|0;h=g+3|0}}else{d=(c[i>>2]|0)!=(b|0);c[f+12>>2]=0}c[k>>2]=0;g=k+4|0;c[g>>2]=0;c[k+8>>2]=0;a=c[a>>2]|0;i=j;c[i>>2]=h;c[i+4>>2]=d?b+-3|0:b;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];if((gm(a,l,k)|0)!=1?(lm(f,c[k>>2]|0,c[g>>2]|0)|0,d):0)vB(f,330828)|0;b=c[k>>2]|0;if(b|0){c[g>>2]=b;$A(b)}aa=m;return}function km(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=aa;aa=aa+16|0;s=x+4|0;u=x;v=b+4|0;r=b+8|0;g=c[v>>2]|0;if((c[r>>2]|0)-g>>3>>>0>e>>>0){v=g+(e<<3)|0;b=c[v+4>>2]|0;w=f;c[w>>2]=c[v>>2];c[w+4>>2]=b;w=0;aa=x;return w|0}t=_A(65536)|0;m=t;uC(t|0,0,65536)|0;c[s>>2]=0;o=b+21|0;p=b+20|0;q=b+16|0;n=b+12|0;while(1){if(a[o>>0]|0){g=1;break}dm(c[(c[b>>2]|0)+8>>2]|0,s);l=em(c[b>>2]|0,t)|0;if(l>>>0<65536)a[o>>0]=1;k=t+l|0;if((l|0)>0){j=t;h=m;while(1){g=a[j>>0]|0;if(g<<24>>24==10){g=d[p>>0]|0;i=h-m+(c[s>>2]|0)-g|0;c[u>>2]=i;h=c[r>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[h>>2]=c[q>>2];c[h+4>>2]=i;c[r>>2]=h+8}else{mm(v,q,u);g=d[p>>0]|0}c[q>>2]=i+1+g;g=a[j>>0]|0}a[p>>0]=g<<24>>24==13&1;g=j+1|0;if(k>>>0>g>>>0){j=g;h=g}else break}}if(a[o>>0]|0){h=(c[s>>2]|0)+l|0;c[u>>2]=h;g=c[r>>2]|0;if(g>>>0<(c[n>>2]|0)>>>0){c[g>>2]=c[q>>2];c[g+4>>2]=h;c[r>>2]=g+8}else mm(v,q,u)}g=c[v>>2]|0;if((c[r>>2]|0)-g>>3>>>0>e>>>0){w=21;break}}if((w|0)==21){b=g+(e<<3)|0;w=c[b+4>>2]|0;g=f;c[g>>2]=c[b>>2];c[g+4>>2]=w;g=0}$A(t);w=g;aa=x;return w|0}function lm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+16|0;j=d;k=o;n=b+11|0;f=a[n>>0]|0;g=f<<24>>24<0;if(g){i=(c[b+8>>2]&2147483647)+-1|0;l=c[b+4>>2]|0}else{i=10;l=f&255}m=e-j|0;if(!m){aa=o;return b|0}if(g){g=c[b>>2]|0;h=c[b+4>>2]|0}else{g=b;h=f&255}if(!(g>>>0<=d>>>0&(g+h|0)>>>0>d>>>0)){if((i-l|0)>>>0<m>>>0){tB(b,i,m+l-i|0,l,l,0);f=a[n>>0]|0}if(f<<24>>24<0)f=c[b>>2]|0;else f=b;f=f+l|0;if((d|0)!=(e|0))do{a[f>>0]=a[d>>0]|0;f=f+1|0;d=d+1|0}while((d|0)!=(e|0));a[f>>0]=0;f=m+l|0;if((a[n>>0]|0)<0){c[b+4>>2]=f;aa=o;return b|0}else{a[n>>0]=f;aa=o;return b|0}}else{c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;if(m>>>0>4294967279)aB();if(m>>>0<11){a[k+11>>0]=m;f=k}else{n=m+16&-16;f=_A(n)|0;c[k>>2]=f;c[k+8>>2]=n|-2147483648;c[k+4>>2]=m}if((d|0)!=(e|0)){g=f;while(1){a[g>>0]=a[d>>0]|0;d=d+1|0;if((d|0)==(e|0))break;else g=g+1|0}f=f+(e-j)|0}a[f>>0]=0;n=a[k+11>>0]|0;e=n<<24>>24<0;f=c[k>>2]|0;uB(b,e?f:k,e?c[k+4>>2]|0:n&255)|0;if(e)$A(f);aa=o;return b|0}return 0} +function nq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+16|0;t=u;c[t>>2]=0;p=t+4|0;c[p>>2]=0;r=t+8|0;c[r>>2]=0;s=cq(a,0)|0;d=cq(a,1)|0;if((s|0)!=21){t=0;aa=u;return t|0}q=b+4|0;s=b+8|0;a:while(1){if(!(dq(d)|0))switch(d|0){case 102:case 70:case 75:case 52:break;default:{d=0;break a}}if(!(lq(a,t)|0)){d=c[t>>2]|0;if(d|0){n=c[q>>2]|0;f=d;j=c[p>>2]|0;o=c[r>>2]|0;l=d;m=c[s>>2]|0;while(1){k=n;n=l;l=c[n+4>>2]|0;do if((f|0)!=(j|0)){d=n+8|0;i=c[d>>2]|0;e=n+4|0;h=i;if(!i){g=l;c[t>>2]=l;f=g}else{c[i+4>>2]=l;g=c[e>>2]|0}if(!g){c[p>>2]=h;g=i;break}else{c[g+8>>2]=h;g=j;break}}else{c[p>>2]=0;c[t>>2]=0;f=0;g=0;e=n+4|0;d=n+8|0}while(0);c[d>>2]=0;c[e>>2]=0;o=o+-1|0;if(!k)d=b;else{c[n+8>>2]=k;d=k+4|0}c[d>>2]=n;m=m+1|0;if(!l)break;else j=g}c[r>>2]=o;c[q>>2]=n;c[s>>2]=m}}else if((fq(a,99)|0)==1){d=1;break}o=cq(a,0)|0;d=cq(a,1)|0;if((o|0)!=21){d=0;break}}e=c[t>>2]|0;if(!e){t=d;aa=u;return t|0}do{t=e;e=c[e+4>>2]|0;ma[c[(c[t>>2]|0)+4>>2]&255](t)}while((e|0)!=0);aa=u;return d|0}function oq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;f=aa;aa=aa+16|0;e=f;if((cq(b,0)|0)!=110){b=d+11|0;if((a[b>>0]|0)<0){a[c[d>>2]>>0]=0;c[d+4>>2]=0;aa=f;return}else{a[d>>0]=0;a[b>>0]=0;aa=f;return}}else{i=b+92|0;g=c[i>>2]&1;j=b+16+(g*36|0)|0;h=c[b+16+(g*36|0)+24>>2]|0;g=c[b+16+(g*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[i>>2]=c[i>>2]&1^1;b=b+88|0;c[b>>2]=(c[b>>2]|0)+-1;Wn(e,h,g);b=d+11|0;if((a[b>>0]|0)<0){a[c[d>>2]>>0]=0;c[d+4>>2]=0;b=d}else{a[d>>0]=0;a[b>>0]=0;b=d}pB(d);c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];aa=f;return}}function pq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;e=h;if((qq(a,b+12|0)|0)==1){a=1;aa=h;return a|0}if((rq(a,b+76|0)|0)==1){a=1;aa=h;return a|0}d=a+88|0;if(!(c[d>>2]|0)){Sp(e,c[a>>2]|0,a);g=c[d>>2]|0;c[d>>2]=g+1;d=a+92|0;g=a+16+(((c[d>>2]|0)+g&1)*36|0)|0;f=g+36|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(f|0))}else d=a+92|0;tC(b+88|0,a+16+((c[d>>2]&1)*36|0)|0,20)|0;a=0;aa=h;return a|0}function qq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+96|0;e=h+64|0;f=h;a[f>>0]=0;g=f+4|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;El(g,-1,e);e=f+40|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;if(((wq(b,f)|0)!=1?(xq(b,26,e)|0)!=1:0)?(xq(b,29,f+52|0)|0)!=1:0){a[d>>0]=a[f>>0]|0;Jl(d+4|0,g)|0;if((f|0)==(d|0))e=0;else{Bg(d+40|0,c[e>>2]|0,c[f+44>>2]|0);Bg(d+52|0,c[f+52>>2]|0,c[f+56>>2]|0);e=0}}else e=1;d=c[f+52>>2]|0;if(d|0){c[f+56>>2]=d;$A(d)}d=c[f+40>>2]|0;if(!d){Ml(g);aa=h;return e|0}c[f+44>>2]=d;$A(d);Ml(g);aa=h;return e|0}function rq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+16|0;t=u;c[t>>2]=0;p=t+4|0;c[p>>2]=0;r=t+8|0;c[r>>2]=0;q=b+4|0;s=b+8|0;a:while(1){d=cq(a,0)|0;e=cq(a,1)|0;b:do if(!(dq(d)|0)){switch(d|0){case 102:case 70:case 75:case 52:break b;case 21:break;default:{e=0;break a}}if(!(dq(e)|0))switch(e|0){case 102:case 70:case 75:case 52:break;default:{e=0;break a}}}while(0);if(!(sq(a,t)|0)){d=c[t>>2]|0;if(d|0){n=c[q>>2]|0;f=d;j=c[p>>2]|0;o=c[r>>2]|0;l=d;m=c[s>>2]|0;while(1){k=n;n=l;l=c[n+4>>2]|0;do if((f|0)!=(j|0)){d=n+8|0;i=c[d>>2]|0;e=n+4|0;h=i;if(!i){g=l;c[t>>2]=l;f=g}else{c[i+4>>2]=l;g=c[e>>2]|0}if(!g){c[p>>2]=h;g=i;break}else{c[g+8>>2]=h;g=j;break}}else{c[p>>2]=0;c[t>>2]=0;f=0;g=0;e=n+4|0;d=n+8|0}while(0);c[d>>2]=0;c[e>>2]=0;o=o+-1|0;if(!k)d=b;else{c[n+8>>2]=k;d=k+4|0}c[d>>2]=n;m=m+1|0;if(!l)break;else j=g}c[r>>2]=o;c[q>>2]=n;c[s>>2]=m}}else if((fq(a,100)|0)==1){e=1;break}}d=c[t>>2]|0;if(!d){aa=u;return e|0}do{t=d;d=c[d+4>>2]|0;ma[c[(c[t>>2]|0)+4>>2]&255](t)}while((d|0)!=0);aa=u;return e|0}function sq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+16|0;f=g;if(dq(cq(a,0)|0)|0){c[f>>2]=0;e=(mq(a,f)|0)==1;a=c[f>>2]|0;c[f>>2]=0;if(e)if(!a)d=1;else{ma[c[(c[a>>2]|0)+4>>2]&255](a);d=1}else{e=b+4|0;d=c[e>>2]|0;if(!d)d=b;else{c[a+8>>2]=d;d=d+4|0}c[d>>2]=a;c[e>>2]=a;d=b+8|0;c[d>>2]=(c[d>>2]|0)+1;c[f>>2]=0;d=0}b=d;aa=g;return b|0}switch(cq(a,0)|0){case 102:case 70:case 75:case 52:break;default:{f=cq(a,0)|0;d=cq(a,1)|0;if((f|0)!=21){b=1;aa=g;return b|0}a:do if(!(dq(d)|0)){switch(d|0){case 102:case 70:case 75:case 52:break a;default:d=1}aa=g;return d|0}while(0);b=lq(a,b)|0;aa=g;return b|0}}c[f>>2]=0;e=(uq(a,f)|0)==1;a=c[f>>2]|0;c[f>>2]=0;if(e)if(!a)d=1;else{ma[c[(c[a>>2]|0)+4>>2]&255](a);d=1}else{e=b+4|0;d=c[e>>2]|0;if(!d)d=b;else{c[a+8>>2]=d;d=d+4|0}c[d>>2]=a;c[e>>2]=a;d=b+8|0;c[d>>2]=(c[d>>2]|0)+1;c[f>>2]=0;d=0}b=d;aa=g;return b|0}function tq(a){a=a|0;var b=0;b=c[a>>2]|0;a:do if(!(dq(b)|0)){switch(b|0){case 102:case 70:case 75:case 52:{b=1;break a}default:{}}b=c[a+4>>2]|0;if((c[a>>2]|0)==21)if(dq(b)|0)b=1;else{switch(b|0){case 102:case 70:case 75:case 52:{b=1;break a}default:{}}b=0}else b=0}else b=1;while(0);return b|0}function uq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+96|0;m=n+48|0;g=n+24|0;j=n+28|0;f=n;i=b+88|0;if(!(c[i>>2]|0)){Sp(m,c[b>>2]|0,b);k=c[i>>2]|0;c[i>>2]=k+1;e=b+92|0;k=b+16+(((c[e>>2]|0)+k&1)*36|0)|0;h=m;l=k+36|0;do{c[k>>2]=c[h>>2];k=k+4|0;h=h+4|0}while((k|0)<(l|0))}else e=b+92|0;l=b+16+((c[e>>2]&1)*36|0)|0;c[j>>2]=c[l>>2];c[j+4>>2]=c[l+4>>2];c[j+8>>2]=c[l+8>>2];c[j+12>>2]=c[l+12>>2];c[j+16>>2]=c[l+16>>2];switch(cq(b,0)|0){case 52:{f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;f=_A(144)|0;c[f+4>>2]=0;c[f+8>>2]=0;e=f+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];c[f+32>>2]=7;c[f>>2]=288732;e=f+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(f+52|0,-1,m);k=f+88|0;l=k+56|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}if((eq(b,67)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}vq(b,e);e=c[d>>2]|0;c[d>>2]=f;if(!e){d=0;aa=n;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=n;return d|0}case 75:{f=b+92|0;e=b+16+((c[f>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;f=_A(144)|0;c[f+4>>2]=0;c[f+8>>2]=0;e=f+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];c[f+32>>2]=25;c[f>>2]=288476;e=f+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(f+52|0,-1,m);k=f+88|0;l=k+56|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}if((eq(b,67)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}vq(b,e);e=c[d>>2]|0;c[d>>2]=f;if(!e){d=0;aa=n;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=n;return d|0}case 70:{f=b+92|0;g=b+16+((c[f>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;g=_A(176)|0;c[g+4>>2]=0;c[g+8>>2]=0;e=g+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];c[g+32>>2]=20;c[g>>2]=288556;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(g+52|0,-1,m);k=g+88|0;l=k+88|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=n;return d|0}if((cq(b,0)|0)==66){l=b+16+((c[f>>2]&1)*36|0)|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;vq(b,e);if((kq(b,g+144|0)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=n;return d|0}if(!(c[i>>2]|0)){Sp(m,c[b>>2]|0,b);k=c[i>>2]|0;c[i>>2]=k+1;k=b+16+(((c[f>>2]|0)+k&1)*36|0)|0;h=m;l=k+36|0;do{c[k>>2]=c[h>>2];k=k+4|0;h=h+4|0}while((k|0)<(l|0))}l=b+16+((c[f>>2]&1)*36|0)|0;m=g+156|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];c[m+16>>2]=c[l+16>>2]}if((eq(b,67)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);d=1;aa=n;return d|0}vq(b,e);e=c[d>>2]|0;c[d>>2]=g;if(!e){d=0;aa=n;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=n;return d|0}case 102:{l=b+92|0;e=c[l>>2]&1;k=b+16+(e*36|0)|0;c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];c[f+8>>2]=c[k+8>>2];c[f+12>>2]=c[k+12>>2];c[f+16>>2]=c[k+16>>2];c[f+20>>2]=c[k+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[l>>2]=c[l>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;if(!(Dm(e,c[b+12>>2]|0)|0)){Am(m,e);c[g>>2]=c[m>>2];c[m>>2]=c[f>>2];c[m+4>>2]=c[f+4>>2];c[m+8>>2]=c[f+8>>2];c[m+12>>2]=c[f+12>>2];c[m+16>>2]=c[f+16>>2];aq(b,m,309809,g)}f=_A(156)|0;c[f+4>>2]=0;c[f+8>>2]=0;e=f+12|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];c[e+16>>2]=c[j+16>>2];c[f+32>>2]=53;c[f>>2]=288092;e=f+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;a[e+12>>0]=0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;El(f+52|0,-1,m);k=f+88|0;l=k+68|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));oq(b,e);if((pq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}if((eq(b,59)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}vq(b,e);if((kq(b,f+144|0)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}if((eq(b,67)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);d=1;aa=n;return d|0}vq(b,e);e=c[d>>2]|0;c[d>>2]=f;if(!e){d=0;aa=n;return d|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);d=0;aa=n;return d|0}default:{d=1;aa=n;return d|0}}return 0}function vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+112|0;p=s+68|0;r=s+8|0;l=s;n=s+28|0;q=s+16|0;o=s+48|0;e=b+88|0;if(!(c[e>>2]|0)){Sp(p,c[b>>2]|0,b);f=c[e>>2]|0;c[e>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=p;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;j=b+16+((c[e>>2]&1)*36|0)|0;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;oq(b,q);j=q+11|0;g=a[j>>0]|0;k=g<<24>>24<0;g=k?c[q+4>>2]|0:g&255;a:do if(g|0){f=a[d+11>>0]|0;i=f<<24>>24<0;f=f&255;e=i?c[d+4>>2]|0:f;if(!e){c[l>>2]=k?c[q>>2]|0:q;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];c[p+8>>2]=c[n+8>>2];c[p+12>>2]=c[n+12>>2];c[p+16>>2]=c[n+16>>2];aq(b,p,309984,l);break}do if((e|0)==(g|0)){e=c[d>>2]|0;h=k?c[q>>2]|0:q;if(i){if(!(Tz(e,h,g)|0))break a;c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];break}if((a[h>>0]|0)!=(e&255)<<24>>24){c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];m=18;break}g=d;e=h;while(1){f=f+-1|0;g=g+1|0;if(!f)break a;e=e+1|0;if((a[g>>0]|0)!=(a[e>>0]|0)){m=16;break}}}else m=16;while(0);if((m|0)==16){c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];if(i)e=c[d>>2]|0;else m=18}if((m|0)==18)e=d;n=k?c[q>>2]|0:q;c[r>>2]=e;c[r+4>>2]=n;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];c[p+16>>2]=c[o+16>>2];aq(b,p,310006,r)}while(0);if((a[j>>0]|0)>=0){aa=s;return}$A(c[q>>2]|0);aa=s;return}function wq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if((cq(b,0)|0)==21?(cq(b,1)|0)==35:0){f=b+92|0;g=b+16+((c[f>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;g=c[f>>2]&1^1;c[f>>2]=g;e=b+88|0;c[e>>2]=(c[e>>2]|0)+-1;g=b+16+(g*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[e>>2]=(c[e>>2]|0)+-1;a[d>>0]=1;if((hq(b,d+4|0)|0)==1){g=1;return g|0}if((eq(b,30)|0)==1){g=1;return g|0}}else a[d>>0]=0;g=0;return g|0}function xq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;i=l;if((cq(a,0)|0)!=21){d=0;aa=l;return d|0}h=a+92|0;k=a+88|0;f=d+4|0;g=d+8|0;while(1){if((cq(a,1)|0)!=(b|0)){e=0;f=12;break}j=a+16+((c[h>>2]&1)*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;j=c[h>>2]&1^1;c[h>>2]=j;c[k>>2]=(c[k>>2]|0)+-1;j=a+16+(j*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[h>>2]=c[h>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;if((cq(a,0)|0)==111)do{j=c[h>>2]&1;e=a+16+(j*36|0)|0;j=c[a+16+(j*36|0)+24>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[h>>2]=c[h>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;c[i>>2]=j;e=c[f>>2]|0;if(e>>>0<(c[g>>2]|0)>>>0){c[e>>2]=j;c[f>>2]=e+4}else yq(d,i)}while((cq(a,0)|0)==111);if((eq(a,30)|0)==1){e=1;f=12;break}if((cq(a,0)|0)!=21){e=0;f=12;break}}if((f|0)==12){aa=l;return e|0}return 0}function yq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function zq(a){a=a|0;a:do if((c[a>>2]|0)==21){a=c[a+4>>2]|0;if(dq(a)|0)a=1;else{switch(a|0){case 102:case 70:case 75:case 52:{a=1;break a}default:{}}a=0}}else a=0;while(0);return a|0}function Aq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+96|0;i=j+56|0;h=j+36|0;g=j;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(i,-1,h);e=b+4|0;f=b+8|0;while(1){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(g,-1,h);if((cq(a,0)|0)!=44?(cq(a,0)|0)!=110:0)break;hq(a,i)|0;Ml(g);d=c[e>>2]|0;if(d>>>0<(c[f>>2]|0)>>>0){Il(d,i);c[e>>2]=(c[e>>2]|0)+36}else Gq(b,i)}Jl(i,g)|0;Ml(g);a=(c[b>>2]|0)==(c[e>>2]|0)&1;Ml(i);aa=j;return a|0}function Bq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=aa;aa=aa+64|0;h=j+44|0;g=j+32|0;i=j+8|0;d=j;if((cq(a,0)|0)!=107){c[b>>2]=0;aa=j;return}k=a+92|0;f=c[k>>2]&1;l=a+16+(f*36|0)|0;c[i>>2]=c[l>>2];c[i+4>>2]=c[l+4>>2];c[i+8>>2]=c[l+8>>2];c[i+12>>2]=c[l+12>>2];c[i+16>>2]=c[l+16>>2];c[i+20>>2]=c[l+20>>2];e=c[a+16+(f*36|0)+24>>2]|0;f=c[a+16+(f*36|0)+28>>2]|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[k>>2]=c[k>>2]&1^1;k=a+88|0;c[k>>2]=(c[k>>2]|0)+-1;if((pm(e,e+f|0,d)|0)==1){c[g>>2]=f;c[g+4>>2]=e;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];aq(a,h,310407,g)}l=d;d=c[l>>2]|0;l=c[l+4>>2]|0;if(l>>>0>0|(l|0)==0&d>>>0>4294967295){c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];aq(a,h,310429,j+40|0)}c[b>>2]=d;aa=j;return}function Cq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=aa;aa=aa+64|0;d=i+36|0;h=i+24|0;e=i;if((cq(a,0)|0)!=105){c[b>>2]=-1;aa=i;return}j=a+92|0;g=c[j>>2]&1;k=a+16+(g*36|0)|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];c[e+16>>2]=c[k+16>>2];c[e+20>>2]=c[k+20>>2];f=c[a+16+(g*36|0)+24>>2]|0;g=c[a+16+(g*36|0)+28>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[j>>2]=c[j>>2]&1^1;j=a+88|0;c[j>>2]=(c[j>>2]|0)+-1;if((sm(f,f+g|0,b,0)|0)==1){c[h>>2]=g;c[h+4>>2]=f;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[d+16>>2]=c[e+16>>2];aq(a,d,310351,h)}k=c[b>>2]|0;if(!((k|0)!=0&(k+-1&k|0)==0)){c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[d+16>>2]=c[e+16>>2];aq(a,d,310376,i+32|0)}aa=i;return}function Dq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+96|0;o=p+52|0;n=p+32|0;i=p+24|0;g=p;k=p+40|0;j=b+92|0;m=c[j>>2]&1;e=b+16+(m*36|0)|0;c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[g+16>>2]=c[e+16>>2];c[g+20>>2]=c[e+20>>2];m=c[b+16+(m*36|0)+24>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=c[j>>2]&1^1;c[j>>2]=e;l=b+88|0;h=(c[l>>2]|0)+-1|0;c[l>>2]=h;if(!h){Sp(o,c[b>>2]|0,b);e=c[l>>2]|0;c[l>>2]=e+1;e=b+16+(((c[j>>2]|0)+e&1)*36|0)|0;f=o;h=e+36|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));e=c[j>>2]|0}tC(d|0,b+16+((e&1)*36|0)|0,20)|0;e=cq(b,0)|0;if((m|0)==213){if(!(Dm(213,c[b+12>>2]|0)|0)){Am(o,213);c[i>>2]=c[o>>2];c[o>>2]=c[g>>2];c[o+4>>2]=c[g+4>>2];c[o+8>>2]=c[g+8>>2];c[o+12>>2]=c[g+12>>2];c[o+16>>2]=c[g+16>>2];aq(b,o,309809,i)}c[d+20>>2]=-5;o=(Fq(b,d,e)|0)==1&1;aa=p;return o|0}if((e+-42|0)>>>0>=3){g=_A(32)|0;c[k>>2]=g;c[k+8>>2]=-2147483616;c[k+4>>2]=17;e=g;f=310157;h=e+17|0;do{a[e>>0]=a[f>>0]|0;e=e+1|0;f=f+1|0}while((e|0)<(h|0));a[g+17>>0]=0;e=o+4|0;f=_A(12)|0;c[o>>2]=f;n=f+12|0;c[o+8>>2]=n;cB(f,k);c[e>>2]=n;gq(b,o,310175);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g);o=1;aa=p;return o|0}h=c[j>>2]&1;e=b+16+(h*36|0)|0;f=c[b+16+(h*36|0)+24>>2]|0;g=c[b+16+(h*36|0)+28>>2]|0;h=c[b+16+(h*36|0)+32>>2]|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[l>>2]=(c[l>>2]|0)+-1;e=g+h|0;switch(m|0){case 52:{c[d+20>>2]=-1;e=sm(g,e,d+24|0,1)|0;break}case 53:{c[d+20>>2]=-2;e=pm(g,e,d+24|0)|0;break}case 54:{c[d+20>>2]=-3;e=tm(f,g,e,d+24|0)|0;break}case 55:{c[d+20>>2]=-4;e=vm(f,g,e,d+24|0)|0;break}default:{o=1;aa=p;return o|0}}if((e|0)!=1){o=0;aa=p;return o|0}c[n>>2]=h;c[n+4>>2]=g;c[o>>2]=c[d>>2];c[o+4>>2]=c[d+4>>2];c[o+8>>2]=c[d+8>>2];c[o+12>>2]=c[d+12>>2];c[o+16>>2]=c[d+16>>2];aq(b,o,310071,n);o=1;aa=p;return o|0}function Eq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=aa;aa=aa+64|0;i=j+36|0;g=j;h=j+8|0;if((cq(b,0)|0)==44){k=b+92|0;f=c[k>>2]&1;l=b+16+(f*36|0)|0;c[h>>2]=c[l>>2];c[h+4>>2]=c[l+4>>2];c[h+8>>2]=c[l+8>>2];c[h+12>>2]=c[l+12>>2];c[h+16>>2]=c[l+16>>2];c[h+20>>2]=c[l+20>>2];c[h+24>>2]=c[l+24>>2];e=c[b+16+(f*36|0)+28>>2]|0;f=c[b+16+(f*36|0)+32>>2]|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[k>>2]=c[k>>2]&1^1;k=b+88|0;c[k>>2]=(c[k>>2]|0)+-1;if((om(e,e+f|0,d)|0)==1){c[g>>2]=f;c[g+4>>2]=e;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2];aq(b,i,309870,g)}l=0;aa=j;return l|0}else{g=_A(32)|0;c[h>>2]=g;c[h+8>>2]=-2147483616;c[h+4>>2]=16;d=g;e=310136;f=d+16|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));a[g+16>>0]=0;d=i+4|0;e=_A(12)|0;c[i>>2]=e;l=e+12|0;c[i+8>>2]=l;cB(e,h);c[d>>2]=l;gq(b,i,310153);if((a[e+11>>0]|0)<0)$A(c[e>>2]|0);c[d>>2]=e;$A(e);$A(g);l=1;aa=j;return l|0}return 0}function Fq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,w=0,x=0,y=0,z=0,A=0;A=aa;aa=aa+112|0;z=A+48|0;w=A+8|0;f=A;t=A+88|0;u=A+28|0;y=A+16|0;switch(e|0){case 36:{g=1;r=16;break}case 37:{g=1;r=8;break}case 38:{g=1;r=4;break}case 39:{g=1;r=2;break}case 40:{g=0;r=4;break}case 41:{g=0;r=2;break}default:{y=jy(e)|0;c[f>>2]=y;c[z>>2]=c[d>>2];c[z+4>>2]=c[d+4>>2];c[z+8>>2]=c[d+8>>2];c[z+12>>2]=c[d+12>>2];c[z+16>>2]=c[d+16>>2];aq(b,z,310191,f);b=1;aa=A;return b|0}}q=b+92|0;e=b+16+((c[q>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=c[q>>2]&1^1;c[q>>2]=e;s=b+88|0;f=(c[s>>2]|0)+-1|0;c[s>>2]=f;p=16/(r>>>0)|0;h=t;l=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(l|0));if(!f){Sp(z,c[b>>2]|0,b);h=c[s>>2]|0;c[s>>2]=h+1;h=b+16+(((c[q>>2]|0)+h&1)*36|0)|0;e=z;l=h+36|0;do{c[h>>2]=c[e>>2];h=h+4|0;e=e+4|0}while((h|0)<(l|0));e=c[q>>2]|0;o=b}else o=b;tC(d|0,b+16+((e&1)*36|0)|0,20)|0;j=(r+-2|0)>>>1;k=r&255;a:do if(g){i=0;while(1){if(!(c[s>>2]|0)){Sp(z,c[o>>2]|0,b);h=c[s>>2]|0;c[s>>2]=h+1;h=b+16+(((c[q>>2]|0)+h&1)*36|0)|0;e=z;l=h+36|0;do{c[h>>2]=c[e>>2];h=h+4|0;e=e+4|0}while((h|0)<(l|0))}n=b+16+((c[q>>2]&1)*36|0)|0;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];c[u+16>>2]=c[n+16>>2];if((cq(b,0)|0)!=43?(cq(b,0)|0)!=44:0)break;e=c[q>>2]&1;g=b+16+(e*36|0)|0;f=c[b+16+(e*36|0)+28>>2]|0;e=c[b+16+(e*36|0)+32>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;g=f+e|0;h=t+(v(i,p)|0)|0;switch(j&2147483647|0){case 7:{m=qm(f,g,h)|0;x=23;break}case 3:{m=rm(f,g,h)|0;x=23;break}case 1:{m=sm(f,g,h,1)|0;x=23;break}case 0:{m=pm(f,g,h)|0;x=23;break}default:{}}if((x|0)==23?(x=0,(m|0)==1):0){x=38;break a}i=i+1|0;if(i>>>0>=r>>>0){x=41;break a}}g=_A(32)|0;c[y>>2]=g;c[y+8>>2]=-2147483616;c[y+4>>2]=24;h=g;e=310305;l=h+24|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(l|0));a[g+24>>0]=0;e=z+4|0;f=_A(12)|0;c[z>>2]=f;x=f+12|0;c[z+8>>2]=x;cB(f,y);c[e>>2]=x;gq(b,z,310153);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g);x=40}else{j=0;while(1){if(!(c[s>>2]|0)){Sp(z,c[o>>2]|0,b);h=c[s>>2]|0;c[s>>2]=h+1;h=b+16+(((c[q>>2]|0)+h&1)*36|0)|0;e=z;l=h+36|0;do{c[h>>2]=c[e>>2];h=h+4|0;e=e+4|0}while((h|0)<(l|0))}m=b+16+((c[q>>2]&1)*36|0)|0;c[u>>2]=c[m>>2];c[u+4>>2]=c[m+4>>2];c[u+8>>2]=c[m+8>>2];c[u+12>>2]=c[m+12>>2];c[u+16>>2]=c[m+16>>2];if((cq(b,0)|0)!=42)break;e=c[q>>2]&1;g=b+16+(e*36|0)|0;i=c[b+16+(e*36|0)+24>>2]|0;f=c[b+16+(e*36|0)+28>>2]|0;e=c[b+16+(e*36|0)+32>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;g=f+e|0;h=t+(v(j,p)|0)|0;switch(k&31){case 4:{n=tm(i,f,g,h)|0;x=37;break}case 2:{n=vm(i,f,g,h)|0;x=37;break}default:{}}if((x|0)==37?(x=0,(n|0)==1):0){x=38;break a}j=j+1|0;if(j>>>0>=r>>>0){x=41;break a}}g=_A(16)|0;c[y>>2]=g;c[y+8>>2]=-2147483632;c[y+4>>2]=15;h=g;e=310330;l=h+15|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(l|0));a[g+15>>0]=0;e=z+4|0;f=_A(12)|0;c[z>>2]=f;x=f+12|0;c[z+8>>2]=x;cB(f,y);c[e>>2]=x;gq(b,z,310346);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g);x=40}while(0);if((x|0)==38){c[w>>2]=e;c[w+4>>2]=f;c[z>>2]=c[u>>2];c[z+4>>2]=c[u+4>>2];c[z+8>>2]=c[u+8>>2];c[z+12>>2]=c[u+12>>2];c[z+16>>2]=c[u+16>>2];aq(b,z,310071,w);x=40}else if((x|0)==41){h=d+24|0;e=t;l=h+16|0;do{a[h>>0]=a[e>>0]|0;h=h+1|0;e=e+1|0}while((h|0)<(l|0));e=0}if((x|0)==40)e=1;b=e;aa=A;return b|0}function Gq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=a+4|0;d=c[a>>2]|0;f=((c[i>>2]|0)-d|0)/36|0;e=f+1|0;if(e>>>0>119304647)HB();j=a+8|0;h=((c[j>>2]|0)-d|0)/36|0;d=h<<1;d=h>>>0<59652323?(d>>>0<e>>>0?e:d):119304647;do if(d)if(d>>>0>119304647)U();else{g=_A(d*36|0)|0;break}else g=0;while(0);e=g+(f*36|0)|0;h=g+(d*36|0)|0;Il(e,b);b=e+36|0;g=c[a>>2]|0;d=c[i>>2]|0;if((d|0)==(g|0)){f=g;d=g}else{do{e=e+-36|0;d=d+-36|0;Il(e,d)}while((d|0)!=(g|0));f=c[a>>2]|0;d=c[i>>2]|0}c[a>>2]=e;c[i>>2]=b;c[j>>2]=h;e=f;if((d|0)!=(e|0))do{d=d+-36|0;Ml(d)}while((d|0)!=(e|0));if(!f)return;$A(f);return}function Hq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+32|0;t=w;s=w+20|0;l=w+8|0;c[l>>2]=0;v=l+4|0;c[v>>2]=0;i=l+8|0;c[i>>2]=0;if((cq(b,0)|0)!=109){v=0;aa=w;return v|0}j=b+92|0;k=b+88|0;e=0;f=0;while(1){h=c[j>>2]&1;p=b+16+(h*36|0)|0;h=b+16+(h*36|0)+24|0;g=c[h>>2]|0;h=c[h+4>>2]|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;p=t;c[p>>2]=g;c[p+4>>2]=h;if(e>>>0<f>>>0){p=e;c[p>>2]=g;c[p+4>>2]=h;c[v>>2]=e+8}else Iq(l,t);if((cq(b,0)|0)!=109)break;e=c[v>>2]|0;f=c[i>>2]|0}p=c[l>>2]|0;o=c[v>>2]|0;a:do if((p|0)!=(o|0)){m=d+4|0;n=d+8|0;b=p;b:while(1){e=c[b+4>>2]|0;if(e>>>0>=3?(Xn(t,c[b>>2]|0,e,1,e+-2|0),q=t,l=c[q+4>>2]|0,q=c[q>>2]|0,r=q+l|0,(l|0)>0):0){l=q;do{k=a[l>>0]|0;c:do if(k<<24>>24!=92){e=c[m>>2]|0;f=c[n>>2]|0;if(e>>>0<f>>>0){a[e>>0]=k;c[m>>2]=(c[m>>2]|0)+1;e=l;break}j=c[d>>2]|0;i=e-j|0;e=i+1|0;h=j;if((e|0)<0){e=91;break b}f=f-j|0;g=f<<1;g=f>>>0<1073741823?(g>>>0<e>>>0?e:g):2147483647;if(!g)f=0;else f=_A(g)|0;e=f+i|0;a[e>>0]=k;if((i|0)>0)sC(f|0,h|0,i|0)|0;c[d>>2]=f;c[m>>2]=e+1;c[n>>2]=f+g;if(!j)e=l;else{$A(h);e=l}}else{e=l+1|0;f=a[e>>0]|0;switch(f<<24>>24|0){case 110:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=10;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=18;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=10;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 114:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=13;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=28;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=13;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 116:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=9;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=38;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=9;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 92:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=92;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=48;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=92;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 39:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=39;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=58;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=39;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}case 34:{f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=34;c[m>>2]=(c[m>>2]|0)+1;break c}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=68;break b}l=g-k|0;h=l<<1;h=l>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=34;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(!k)break c;$A(i);break c}default:{e=l+2|0;do if((nm(f,t)|0)==0?(nm(a[e>>0]|0,s)|0)==0:0){l=(c[t>>2]<<4|c[s>>2])&255;f=c[m>>2]|0;g=c[n>>2]|0;if(f>>>0<g>>>0){a[f>>0]=l;c[m>>2]=(c[m>>2]|0)+1;break}k=c[d>>2]|0;j=f-k|0;f=j+1|0;i=k;if((f|0)<0){e=80;break b}g=g-k|0;h=g<<1;h=g>>>0<1073741823?(h>>>0<f>>>0?f:h):2147483647;if(!h)g=0;else g=_A(h)|0;f=g+j|0;a[f>>0]=l;if((j|0)>0)sC(g|0,i|0,j|0)|0;c[d>>2]=g;c[m>>2]=f+1;c[n>>2]=g+h;if(k|0)$A(i)}while(0);break c}}}while(0);l=e+1|0}while(l>>>0<r>>>0)}b=b+8|0;if((b|0)==(o|0)){u=o;break a}}if((e|0)==18)HB();else if((e|0)==28)HB();else if((e|0)==38)HB();else if((e|0)==48)HB();else if((e|0)==58)HB();else if((e|0)==68)HB();else if((e|0)==80)HB();else if((e|0)==91)HB()}else u=p;while(0);e=(p|0)!=(u|0);if(!p){v=e;aa=w;return v|0}c[v>>2]=p;$A(p);v=e;aa=w;return v|0}function Iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>3;d=f+1|0;if(d>>>0>536870911)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>2;e=m>>3>>>0<268435455?(e>>>0<d>>>0?d:e):536870911;do if(e)if(e>>>0>536870911)U();else{k=_A(e<<3)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<3)|0;f=b;b=c[f+4>>2]|0;m=d;c[m>>2]=c[f>>2];c[m+4>>2]=b;if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+8;c[j>>2]=k+(e<<3);if(!g)return;$A(g);return}function Jq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+112|0;h=j+72|0;i=j+36|0;g=j;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(i,-1,h);e=b+4|0;f=b+8|0;while(1){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(g,-1,h);if((cq(a,0)|0)!=44?(cq(a,0)|0)!=110:0)break;hq(a,i)|0;Ml(g);d=c[e>>2]|0;if(d>>>0<(c[f>>2]|0)>>>0){Il(h,i);c[d>>2]=1;Il(d+4|0,h);Ml(h);c[e>>2]=(c[e>>2]|0)+40}else Kq(b,i)}Jl(i,g)|0;Ml(g);a=(c[b>>2]|0)!=(c[e>>2]|0);Ml(i);aa=j;return a|0}function Kq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+48|0;f=l;j=a+4|0;d=c[a>>2]|0;h=((c[j>>2]|0)-d|0)/40|0;e=h+1|0;if(e>>>0>107374182)HB();k=a+8|0;i=((c[k>>2]|0)-d|0)/40|0;d=i<<1;d=i>>>0<53687091?(d>>>0<e>>>0?e:d):107374182;do if(d)if(d>>>0>107374182)U();else{g=_A(d*40|0)|0;break}else g=0;while(0);e=g+(h*40|0)|0;i=g+(d*40|0)|0;Il(f,b);c[e>>2]=1;Il(g+(h*40|0)+4|0,f);Ml(f);g=e+40|0;f=c[a>>2]|0;d=c[j>>2]|0;if((d|0)==(f|0)){b=f;d=f}else{do{h=d;d=d+-40|0;c[e+-40>>2]=c[d>>2];Il(e+-36|0,h+-36|0);e=e+-40|0}while((d|0)!=(f|0));b=c[a>>2]|0;d=c[j>>2]|0}c[a>>2]=e;c[j>>2]=g;c[k>>2]=i;e=b;if((d|0)!=(e|0))do{Ml(d+-36|0);d=d+-40|0}while((d|0)!=(e|0));if(!b){aa=l;return}$A(b);aa=l;return}function Lq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+112|0;l=m+84|0;g=m+80|0;f=m+72|0;k=m;if((cq(b,0)|0)==111){j=b+92|0;e=c[j>>2]&1;i=b+16+(e*36|0)|0;c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];c[k+16>>2]=c[i+16>>2];c[k+20>>2]=c[i+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[j>>2]=c[j>>2]&1^1;j=b+88|0;c[j>>2]=(c[j>>2]|0)+-1;switch(e|0){case -5:{if(!(a[(c[b+12>>2]|0)+4>>0]|0)){c[f>>2]=330963;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];c[l+12>>2]=c[k+12>>2];c[l+16>>2]=c[k+16>>2];aq(b,l,310477,f);d=1}else h=10;break}case -17:{if(!(a[(c[b+12>>2]|0)+9>>0]|0)){c[g>>2]=330923;c[l>>2]=c[k>>2];c[l+4>>2]=c[k+4>>2];c[l+8>>2]=c[k+8>>2];c[l+12>>2]=c[k+12>>2];c[l+16>>2]=c[k+16>>2];aq(b,l,310477,g);d=1}else h=10;break}default:h=10}if((h|0)==10){c[d>>2]=e;d=0}l=d;aa=m;return l|0}e=k+4|0;c[e>>2]=0;c[e+4>>2]=50331648;a[k>>0]=a[330980]|0;a[k+1>>0]=a[330981]|0;a[k+2>>0]=a[330982]|0;a[k+3>>0]=0;e=k+12|0;f=k+16|0;c[f>>2]=0;c[f+4>>2]=50331648;a[e>>0]=a[330976]|0;a[e+1>>0]=a[330977]|0;a[e+2>>0]=a[330978]|0;a[e+3>>0]=0;f=k+24|0;g=k+28|0;c[g>>2]=0;c[g+4>>2]=50331648;a[f>>0]=a[330972]|0;a[f+1>>0]=a[330973]|0;a[f+2>>0]=a[330974]|0;a[f+3>>0]=0;g=k+36|0;h=k+40|0;c[h>>2]=0;c[h+4>>2]=50331648;a[g>>0]=a[330968]|0;a[g+1>>0]=a[330969]|0;a[g+2>>0]=a[330970]|0;a[g+3>>0]=0;h=k+48|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;a[h+11>>0]=4;c[h>>2]=942813558;a[k+52>>0]=0;o=k+60|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;a[o+11>>0]=6;a[o>>0]=a[330923]|0;a[o+1>>0]=a[330924]|0;a[o+2>>0]=a[330925]|0;a[o+3>>0]=a[330926]|0;a[o+4>>0]=a[330927]|0;a[o+5>>0]=a[330928]|0;a[o+6>>0]=0;i=l+4|0;j=_A(72)|0;c[l>>2]=j;n=j+72|0;c[l+8>>2]=n;cB(j,k);d=j+12|0;cB(d,e);e=j+24|0;cB(e,f);f=j+36|0;cB(f,g);g=j+48|0;cB(g,h);h=j+60|0;cB(h,o);c[i>>2]=n;gq(b,l,0);if((a[j+71>>0]|0)<0)$A(c[h>>2]|0);if((a[j+59>>0]|0)<0)$A(c[g>>2]|0);if((a[j+47>>0]|0)<0)$A(c[f>>2]|0);if((a[j+35>>0]|0)<0)$A(c[e>>2]|0);if((a[j+23>>0]|0)<0)$A(c[d>>2]|0);if((a[j+11>>0]|0)<0)$A(c[j>>2]|0);c[i>>2]=j;$A(j);o=1;aa=m;return o|0}function Mq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=aa;aa=aa+48|0;h=i+28|0;f=i+24|0;g=i;if((cq(b,0)|0)==111){j=b+92|0;e=c[j>>2]&1;k=b+16+(e*36|0)|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];c[g+16>>2]=c[k+16>>2];c[g+20>>2]=c[k+20>>2];e=c[b+16+(e*36|0)+24>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[j>>2]=c[j>>2]&1^1;j=b+88|0;c[j>>2]=(c[j>>2]|0)+-1;if((e|0)==-17?(a[(c[b+12>>2]|0)+9>>0]|0)==0:0){c[f>>2]=330923;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];aq(b,h,310477,f);d=1}else{c[d>>2]=e;d=0}k=d;aa=i;return k|0}else{c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+11>>0]=6;a[g>>0]=a[330923]|0;a[g+1>>0]=a[330924]|0;a[g+2>>0]=a[330925]|0;a[g+3>>0]=a[330926]|0;a[g+4>>0]=a[330927]|0;a[g+5>>0]=a[330928]|0;a[g+6>>0]=0;j=g+12|0;c[g+20>>2]=117440512;a[j>>0]=a[330955]|0;a[j+1>>0]=a[330956]|0;a[j+2>>0]=a[330957]|0;a[j+3>>0]=a[330958]|0;a[j+4>>0]=a[330959]|0;a[j+5>>0]=a[330960]|0;a[j+6>>0]=a[330961]|0;a[j+7>>0]=0;e=h+4|0;f=_A(24)|0;c[h>>2]=f;k=f+24|0;c[h+8>>2]=k;cB(f,g);d=f+12|0;cB(d,j);c[e>>2]=k;gq(b,h,0);if((a[f+23>>0]|0)<0)$A(c[d>>2]|0);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);k=1;aa=i;return k|0}return 0}function Nq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+64|0;l=m+32|0;j=m+24|0;k=m+52|0;i=m;if((cq(b,0)|0)!=109){h=_A(16)|0;c[k>>2]=h;c[k+8>>2]=-2147483632;c[k+4>>2]=15;e=h;f=310504;g=e+15|0;do{a[e>>0]=a[f>>0]|0;e=e+1|0;f=f+1|0}while((e|0)<(g|0));a[h+15>>0]=0;e=l+4|0;f=_A(12)|0;c[l>>2]=f;j=f+12|0;c[l+8>>2]=j;cB(f,k);c[e>>2]=j;gq(b,l,310520);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(h);l=1;aa=m;return l|0}n=b+92|0;g=c[n>>2]&1;o=b+16+(g*36|0)|0;c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[i+16>>2]=c[o+16>>2];c[i+20>>2]=c[o+20>>2];f=c[b+16+(g*36|0)+24>>2]|0;g=c[b+16+(g*36|0)+28>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[n>>2]=c[n>>2]&1^1;n=b+88|0;c[n>>2]=(c[n>>2]|0)+-1;if(g>>>0>=3?(Xn(l,f,g,1,g+-2|0),e=l,o=c[e+4>>2]|0,e=c[e>>2]|0,h=e+o|0,(o|0)>0):0){g=e;while(1){f=a[g>>0]|0;e=g+1|0;if(f<<24>>24==92){f=a[e>>0]|0;switch(f<<24>>24|0){case 110:{wB(d,10);break}case 114:{wB(d,13);break}case 116:{wB(d,9);break}case 92:{wB(d,92);break}case 39:{wB(d,39);break}case 34:{wB(d,34);break}default:{e=g+2|0;if((nm(f,l)|0)==0?(nm(a[e>>0]|0,k)|0)==0:0)wB(d,(c[l>>2]<<4|c[k>>2])&255)}}e=e+1|0}else wB(d,f);if(e>>>0<h>>>0)g=e;else break}}e=a[d+11>>0]|0;if(e<<24>>24<0){f=c[d+4>>2]|0;e=c[d>>2]|0}else{f=e&255;e=d}if(!(Lz(e,f)|0)){c[l>>2]=c[i>>2];c[l+4>>2]=c[i+4>>2];c[l+8>>2]=c[i+8>>2];c[l+12>>2]=c[i+12>>2];c[l+16>>2]=c[i+16>>2];aq(b,l,310526,j)}o=0;aa=m;return o|0}function Oq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=aa;aa=aa+48|0;k=m+24|0;i=m;j=_A(376)|0;uC(j|0,0,212)|0;c[j+212>>2]=1065353216;l=j+216|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+232>>2]=1065353216;l=j+236|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+252>>2]=1065353216;l=j+256|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+272>>2]=1065353216;l=j+276|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+292>>2]=1065353216;l=j+296|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+312>>2]=1065353216;l=j+316|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+332>>2]=1065353216;l=j+336|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+352>>2]=1065353216;l=j+356|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[j+372>>2]=1065353216;l=j;do if((cq(b,0)|0)==21?(cq(b,1)|0)==23:0){c[k>>2]=0;if((Pq(b,0,k)|0)==1){e=c[k>>2]|0;c[k>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);break}else{e=c[k>>2]|0;c[k>>2]=0;Qq(j,e+8|0)|0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);f=18;break}}else f=10;while(0);a:do if((f|0)==10){h=cq(b,0)|0;e=cq(b,1)|0;b:do if((h|0)==21){switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break;default:break b}if((Rq(b,j)|0)==1)break a;else{f=18;break a}}while(0);if((cq(b,0)|0)==21){h=b+92|0;g=b+16+((c[h>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h>>2]=c[h>>2]&1^1;h=b+88|0;c[h>>2]=(c[h>>2]|0)+-1}h=_A(16)|0;c[i>>2]=h;c[i+8>>2]=-2147483632;c[i+4>>2]=14;e=h;f=310570;g=e+14|0;do{a[e>>0]=a[f>>0]|0;e=e+1|0;f=f+1|0}while((e|0)<(g|0));a[h+14>>0]=0;o=i+12|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;a[o+11>>0]=8;f=o;c[f>>2]=1869422689;c[f+4>>2]=1701606756;a[i+20>>0]=0;f=k+4|0;g=_A(24)|0;c[k>>2]=g;n=g+24|0;c[k+8>>2]=n;cB(g,i);e=g+12|0;cB(e,o);c[f>>2]=n;gq(b,k,0);if((a[g+23>>0]|0)<0)$A(c[e>>2]|0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);$A(h);f=18}while(0);if(((f|0)==18?(eq(b,12)|0)!=1:0)?(o=c[b+8>>2]|0,(c[o+4>>2]|0)==(c[o>>2]|0)):0){e=c[d>>2]|0;c[d>>2]=l;if(!e){o=0;aa=m;return o|0}db(e);$A(e);o=0;aa=m;return o|0}db(j);$A(j);o=1;aa=m;return o|0}function Pq(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=aa;aa=aa+128|0;u=x+96|0;q=x+8|0;p=x;g=x+92|0;v=x+48|0;s=x+16|0;n=x+72|0;o=x+28|0;c[g>>2]=0;a:do if((qr(d,g)|0)!=1){w=_A(384)|0;t=w;c[t>>2]=0;c[t+4>>2]=0;c[w>>2]=290384;t=w+8|0;uC(t|0,0,212)|0;c[w+220>>2]=1065353216;i=w+224|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+240>>2]=1065353216;i=w+244|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+260>>2]=1065353216;i=w+264|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+280>>2]=1065353216;i=w+284|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+300>>2]=1065353216;i=w+304|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+320>>2]=1065353216;i=w+324|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+340>>2]=1065353216;i=w+344|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+360>>2]=1065353216;i=w+364|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[w+380>>2]=1065353216;i=c[g>>2]|0;switch(c[i+4>>2]|0){case 0:{Qq(t,i+8|0)|0;break}case 1:{a[v>>0]=0;a[v+1>>0]=1;h=v+2|0;b[h>>1]=0;b[h+2>>1]=0;b[h+4>>1]=0;b[h+6>>1]=0;a[h+8>>0]=0;c[v+12>>2]=0;a[v+16>>0]=0;a[v+17>>0]=1;a[v+18>>0]=1;h=v;j=c[d+12>>2]|0;k=h+11|0;do{a[h>>0]=a[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(k|0));c[s>>2]=0;r=s+4|0;c[r>>2]=0;c[s+8>>2]=0;m=c[i+40>>2]|0;Oc(310714,m,(c[i+44>>2]|0)-m|0,v,s,t)|0;lB(w+28|0,i+28|0)|0;m=i+8|0;c[t>>2]=c[m>>2];c[t+4>>2]=c[m+4>>2];c[t+8>>2]=c[m+8>>2];c[t+12>>2]=c[m+12>>2];c[t+16>>2]=c[m+16>>2];k=c[s>>2]|0;l=c[r>>2]|0;if((k|0)!=(l|0)){do{j=k+12|0;if((c[j>>2]|0)==-1){c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];h=k+24|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;c[p>>2]=h;c[u>>2]=c[n>>2];c[u+4>>2]=c[n+4>>2];c[u+8>>2]=c[n+8>>2];c[u+12>>2]=c[n+12>>2];c[u+16>>2]=c[n+16>>2];aq(d,u,310721,p)}else{c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];h=k+24|0;if((a[h+11>>0]|0)<0)h=c[h>>2]|0;c[q>>2]=c[j>>2];c[q+4>>2]=h;c[u>>2]=c[o>>2];c[u+4>>2]=c[o+4>>2];c[u+8>>2]=c[o+8>>2];c[u+12>>2]=c[o+12>>2];c[u+16>>2]=c[o+16>>2];aq(d,u,310748,q)}k=k+36|0}while((k|0)!=(l|0));k=c[s>>2]|0}if(k|0){h=c[r>>2]|0;if((h|0)==(k|0))h=k;else{do{j=h+-12|0;h=h+-36|0;if((a[j+11>>0]|0)<0)$A(c[j>>2]|0)}while((h|0)!=(k|0));h=c[s>>2]|0}c[r>>2]=k;$A(h)}break}case 2:{m=_A(16)|0;c[v>>2]=m;c[v+8>>2]=-2147483632;c[v+4>>2]=15;h=m;j=310785;k=h+15|0;do{a[h>>0]=a[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(k|0));a[m+15>>0]=0;l=_A(16)|0;c[v+12>>2]=l;c[v+20>>2]=-2147483632;c[v+16>>2]=13;h=l;j=310801;k=h+13|0;do{a[h>>0]=a[j>>0]|0;h=h+1|0;j=j+1|0}while((h|0)<(k|0));a[l+13>>0]=0;h=u+4|0;j=_A(24)|0;c[u>>2]=j;f=j+24|0;c[u+8>>2]=f;cB(j,v);k=j+12|0;cB(k,v+12|0);c[h>>2]=f;gq(d,u,0);if((a[j+23>>0]|0)<0)$A(c[k>>2]|0);if((a[j+11>>0]|0)<0)$A(c[j>>2]|0);c[h>>2]=j;$A(j);$A(l);$A(m);ma[c[(c[w>>2]|0)+4>>2]&255](w);h=1;break a}default:{}}if(e|0){j=(c[e+4>>2]|0)-(c[e>>2]|0)>>2;h=a[w+39>>0]|0;if(h<<24>>24<0)h=c[w+32>>2]|0;else h=h&255;if(h|0){c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];c[v+20>>2]=j;e=e+12|0;Og(u,e,w+28|0,v);Gg(e,c[u>>2]|0)}c[d+4>>2]=j}h=c[f>>2]|0;c[f>>2]=w;if(!h)h=0;else{ma[c[(c[h>>2]|0)+4>>2]&255](h);h=0}}else{i=c[g>>2]|0;h=1}while(0);c[g>>2]=0;if(!i){aa=x;return h|0}ma[c[(c[i>>2]|0)+4>>2]&255](i);aa=x;return h|0}function Qq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];f=b+20|0;g=d+20|0;e=f+11|0;if((a[e>>0]|0)<0){a[c[f>>2]>>0]=0;c[b+24>>2]=0;e=f}else{a[f>>0]=0;a[e>>0]=0;e=f}pB(f);c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;f=b+32|0;g=d+32|0;e=c[f>>2]|0;if(e|0)do{h=e;e=c[e+4>>2]|0;ma[c[(c[h>>2]|0)+4>>2]&255](h)}while((e|0)!=0);h=b+36|0;c[h>>2]=0;c[f>>2]=0;i=b+40|0;c[i>>2]=0;c[f>>2]=c[g>>2];e=d+36|0;c[h>>2]=c[e>>2];h=d+40|0;c[i>>2]=c[h>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+44|0;h=d+44|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];c[g+16>>2]=c[h+16>>2];g=b+64|0;h=d+64|0;e=c[g>>2]|0;if(!e){e=b+68|0;f=b+72|0}else{i=b+68|0;c[i>>2]=e;$A(e);f=b+72|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+68|0;c[e>>2]=c[g>>2];e=d+72|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+76|0;h=d+76|0;e=c[g>>2]|0;if(!e){e=b+80|0;f=b+84|0}else{i=b+80|0;c[i>>2]=e;$A(e);f=b+84|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+80|0;c[e>>2]=c[g>>2];e=d+84|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+88|0;h=d+88|0;e=c[g>>2]|0;if(!e){e=b+92|0;f=b+96|0}else{i=b+92|0;c[i>>2]=e;$A(e);f=b+96|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+92|0;c[e>>2]=c[g>>2];e=d+96|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+100|0;h=d+100|0;e=c[g>>2]|0;if(!e){e=b+104|0;f=b+108|0}else{i=b+104|0;c[i>>2]=e;$A(e);f=b+108|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+104|0;c[e>>2]=c[g>>2];e=d+108|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+112|0;h=d+112|0;e=c[g>>2]|0;if(!e){e=b+116|0;f=b+120|0}else{i=b+116|0;c[i>>2]=e;$A(e);f=b+120|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+116|0;c[e>>2]=c[g>>2];e=d+120|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+124|0;h=d+124|0;e=c[g>>2]|0;if(!e){e=b+128|0;f=b+132|0}else{i=b+128|0;c[i>>2]=e;$A(e);f=b+132|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+128|0;c[e>>2]=c[g>>2];e=d+132|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+136|0;h=d+136|0;e=c[g>>2]|0;if(!e){e=b+140|0;f=b+144|0}else{i=b+140|0;c[i>>2]=e;$A(e);f=b+144|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+140|0;c[e>>2]=c[g>>2];e=d+144|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+148|0;h=d+148|0;e=c[g>>2]|0;if(!e){e=b+152|0;f=b+156|0}else{i=b+152|0;c[i>>2]=e;$A(e);f=b+156|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+152|0;c[e>>2]=c[g>>2];e=d+156|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+160|0;h=d+160|0;e=c[g>>2]|0;if(!e){e=b+164|0;f=b+168|0}else{i=b+164|0;c[i>>2]=e;$A(e);f=b+168|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+164|0;c[e>>2]=c[g>>2];e=d+168|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+172|0;h=d+172|0;e=c[g>>2]|0;if(!e){e=b+176|0;f=b+180|0}else{i=b+176|0;c[i>>2]=e;$A(e);f=b+180|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];g=d+176|0;c[e>>2]=c[g>>2];e=d+180|0;c[f>>2]=c[e>>2];c[e>>2]=0;c[g>>2]=0;c[h>>2]=0;g=b+184|0;h=d+184|0;e=c[g>>2]|0;if(!e){e=b+188|0;f=b+192|0}else{i=b+188|0;c[i>>2]=e;$A(e);f=b+192|0;c[f>>2]=0;c[i>>2]=0;c[g>>2]=0;e=i}c[g>>2]=c[h>>2];i=d+188|0;c[e>>2]=c[i>>2];g=d+192|0;c[f>>2]=c[g>>2];c[g>>2]=0;c[i>>2]=0;c[h>>2]=0;pr(b+196|0,d+196|0);pr(b+216|0,d+216|0);pr(b+236|0,d+236|0);pr(b+256|0,d+256|0);pr(b+276|0,d+276|0);pr(b+296|0,d+296|0);pr(b+316|0,d+316|0);pr(b+336|0,d+336|0);pr(b+356|0,d+356|0);return b|0}function Rq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+112|0;q=w+80|0;p=w;u=w+40|0;k=w+16|0;m=w+4|0;o=cq(b,0)|0;e=cq(b,1)|0;a:do if((o|0)==21){l=b+92|0;n=b+88|0;o=u+20|0;j=m+11|0;b:while(1){switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break;default:break a}if((Sq(b,d)|0)==1){i=0;c:while(1){h=cq(b,0)|0;e=cq(b,1)|0;if((h|0)==21)switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break c;default:{}}e=b+16+((c[l>>2]&1)*36|0)|0;f=u;g=e;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[l>>2]=c[l>>2]&1^1;c[n>>2]=(c[n>>2]|0)+-1;if((c[o>>2]|0)==108?(c[k>>2]=c[u>>2],c[k+4>>2]=c[u+4>>2],c[k+8>>2]=c[u+8>>2],c[k+12>>2]=c[u+12>>2],c[k+16>>2]=c[u+16>>2],qy(m,u),c[p>>2]=(a[j>>0]|0)<0?c[m>>2]|0:m,c[q>>2]=c[k>>2],c[q+4>>2]=c[k+4>>2],c[q+8>>2]=c[k+8>>2],c[q+12>>2]=c[k+12>>2],c[q+16>>2]=c[k+16>>2],aq(b,q,309788,p),(a[j>>0]|0)<0):0)$A(c[m>>2]|0);i=i+1|0;if(i>>>0>=10)break b}}i=cq(b,0)|0;e=cq(b,1)|0;if((i|0)!=21)break a}v=1;aa=w;return v|0}while(0);e=c[d+32>>2]|0;if(!e){v=0;aa=w;return v|0}o=q+4|0;j=u+28|0;k=u+16|0;m=u+32|0;l=u+4|0;n=u+20|0;b=u+8|0;while(1){i=e;f=e;d:do switch(c[i+32>>2]|0){case 0:{g=f+48|0;f=f+36|0;v=25;break}case 10:{g=e+48|0;f=0;v=25;break}case 2:{f=c[e+36>>2]|0;g=c[f+28>>2]|0;h=(f|0)==0;if(!(h|(g|0)!=0)){g=f+44|0;f=0;v=25;break d}if(!(h|(g|0)!=4)){g=f+44|0;f=0;v=25}break}default:{}}while(0);if((v|0)==25){v=0;if((((a[g>>0]|0?(s=g+40|0,(c[g+52>>2]|0)==(c[g+56>>2]|0)):0)?(c[s>>2]|0)==(c[g+44>>2]|0):0)?(r=_k(d,g+4|0)|0,r|0):0)?(t=r+12|0,(s|0)!=(t|0)):0){Bg(s,c[t>>2]|0,c[r+16>>2]|0);Bg(g+52|0,c[r+24>>2]|0,c[r+28>>2]|0)}Tq(i+12|0,d,g);if(f|0){c[q>>2]=290120;c[o>>2]=d;Jj(u,q);Rj(u,f)|0;f=c[j>>2]|0;if(f|0){c[m>>2]=f;$A(f)}f=c[k>>2]|0;if(f|0){c[n>>2]=f;$A(f)}f=c[l>>2]|0;if(f|0){c[b>>2]=f;$A(f)}}}e=c[e+4>>2]|0;if(!e){e=0;break}}aa=w;return e|0}function Sq(a,b){a=a|0;b=b|0;do switch(cq(a,1)|0){case 10:{b=$q(a,b)|0;break}case 11:{b=ar(a,b)|0;break}case 13:{b=br(a,b)|0;break}case 14:{b=cr(a,b)|0;break}case 15:{b=dr(a,b)|0;break}case 35:{b=er(a,b)|0;break}case 17:{b=fr(a,b)|0;break}case 18:{b=gr(a,b)|0;break}case 22:{b=hr(a,b)|0;break}case 32:{b=ir(a,b)|0;break}case 33:{b=jr(a,b)|0;break}default:b=1}while(0);return b|0}function Tq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+16|0;h=i;if(a[e>>0]|0){aa=i;return}g=e+40|0;if((al(d,g)|0)!=-1){aa=i;return}f=_A(72)|0;c[f+4>>2]=0;c[f+8>>2]=0;j=f+12|0;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2];c[j+16>>2]=c[b+16>>2];c[f+32>>2]=4;c[f>>2]=289068;Wn(f+36|0,0,0);b=f+48|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;if((g|0)!=(b|0)){Bg(b,c[g>>2]|0,c[e+44>>2]|0);Bg(f+60|0,c[e+52>>2]|0,c[e+56>>2]|0)}c[h>>2]=f;ml(d,h);b=c[h>>2]|0;c[h>>2]=0;if(!b){aa=i;return}ma[c[(c[b>>2]|0)+4>>2]&255](b);aa=i;return}function Uq(a){a=a|0;$A(a);return}function Vq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=d+12|0;h=d+48|0;f=b+4|0;e=c[f>>2]|0;b=d+88|0;if((((a[h>>0]|0?(c[d+100>>2]|0)==(c[d+104>>2]|0):0)?(c[b>>2]|0)==(c[d+92>>2]|0):0)?(g=_k(e,d+52|0)|0,g|0):0)?(j=g+12|0,(b|0)!=(j|0)):0){Bg(b,c[j>>2]|0,c[g+16>>2]|0);Bg(d+100|0,c[g+24>>2]|0,c[g+28>>2]|0)}if((c[d+92>>2]|0)==(c[b>>2]|0)?(c[d+104>>2]|0)-(c[d+100>>2]|0)>>2>>>0<2:0)return 0;Tq(i,c[f>>2]|0,h);return 0}function Wq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b+4|0;b=c[e>>2]|0;g=d+36|0;if(((((a[g>>0]|0)!=0?(h=d+76|0,(c[d+88>>2]|0)==(c[d+92>>2]|0)):0)?(c[h>>2]|0)==(c[d+80>>2]|0):0)?(f=_k(b,d+40|0)|0,(f|0)!=0):0)?(i=f+12|0,(h|0)!=(i|0)):0){Bg(h,c[i>>2]|0,c[f+16>>2]|0);Bg(d+88|0,c[f+24>>2]|0,c[f+28>>2]|0);b=c[e>>2]|0}Tq(d+12|0,b,g);return 0}function Xq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=d+12|0;h=d+48|0;f=b+4|0;e=c[f>>2]|0;b=d+88|0;if((((a[h>>0]|0?(c[d+100>>2]|0)==(c[d+104>>2]|0):0)?(c[b>>2]|0)==(c[d+92>>2]|0):0)?(g=_k(e,d+52|0)|0,g|0):0)?(j=g+12|0,(b|0)!=(j|0)):0){Bg(b,c[j>>2]|0,c[g+16>>2]|0);Bg(d+100|0,c[g+24>>2]|0,c[g+28>>2]|0)}if((c[d+92>>2]|0)==(c[b>>2]|0)?(c[d+104>>2]|0)-(c[d+100>>2]|0)>>2>>>0<2:0)return 0;Tq(i,c[f>>2]|0,h);return 0}function Yq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=d+12|0;h=d+48|0;f=b+4|0;e=c[f>>2]|0;b=d+88|0;if((((a[h>>0]|0?(c[d+100>>2]|0)==(c[d+104>>2]|0):0)?(c[b>>2]|0)==(c[d+92>>2]|0):0)?(g=_k(e,d+52|0)|0,g|0):0)?(j=g+12|0,(b|0)!=(j|0)):0){Bg(b,c[j>>2]|0,c[g+16>>2]|0);Bg(d+100|0,c[g+24>>2]|0,c[g+28>>2]|0)}if((c[d+92>>2]|0)==(c[b>>2]|0)?(c[d+104>>2]|0)-(c[d+100>>2]|0)>>2>>>0<2:0)return 0;Tq(i,c[f>>2]|0,h);return 0}function Zq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b+4|0;b=c[e>>2]|0;g=d+36|0;if(((((a[g>>0]|0)!=0?(h=d+76|0,(c[d+88>>2]|0)==(c[d+92>>2]|0)):0)?(c[h>>2]|0)==(c[d+80>>2]|0):0)?(f=_k(b,d+40|0)|0,(f|0)!=0):0)?(i=f+12|0,(h|0)!=(i|0)):0){Bg(h,c[i>>2]|0,c[f+16>>2]|0);Bg(d+88|0,c[f+24>>2]|0,c[f+28>>2]|0);b=c[e>>2]|0}Tq(d+12|0,b,g);return 0}function _q(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=d+12|0;h=d+48|0;f=b+4|0;e=c[f>>2]|0;b=d+88|0;if((((a[h>>0]|0?(c[d+100>>2]|0)==(c[d+104>>2]|0):0)?(c[b>>2]|0)==(c[d+92>>2]|0):0)?(g=_k(e,d+52|0)|0,g|0):0)?(j=g+12|0,(b|0)!=(j|0)):0){Bg(b,c[j>>2]|0,c[g+16>>2]|0);Bg(d+100|0,c[g+24>>2]|0,c[g+28>>2]|0)}if((c[d+92>>2]|0)==(c[b>>2]|0)?(c[d+104>>2]|0)-(c[d+100>>2]|0)>>2>>>0<2:0)return 0;Tq(i,c[f>>2]|0,h);return 0}function $q(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+112|0;n=r+72|0;p=r+16|0;m=r;o=r+36|0;q=r+12|0;if((eq(b,21)|0)==1){q=1;aa=r;return q|0}i=b+88|0;if(!(c[i>>2]|0)){Sp(n,c[b>>2]|0,b);f=c[i>>2]|0;c[i>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=n;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;l=b+16+((c[e>>2]&1)*36|0)|0;c[p>>2]=c[l>>2];c[p+4>>2]=c[l+4>>2];c[p+8>>2]=c[l+8>>2];c[p+12>>2]=c[l+12>>2];c[p+16>>2]=c[l+16>>2];if((eq(b,10)|0)==1)e=1;else{c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;if((cq(b,0)|0)==110){k=b+92|0;g=c[k>>2]&1;j=b+16+(g*36|0)|0;l=c[b+16+(g*36|0)+24>>2]|0;g=c[b+16+(g*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[k>>2]=c[k>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;Wn(n,l,g);g=m+11|0;if((a[g>>0]|0)<0){a[c[m>>2]>>0]=0;e=m+4|0;c[e>>2]=0;f=m}else{a[m>>0]=0;a[g>>0]=0;f=m;e=m+4|0}pB(m);c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];h=a[g>>0]|0;i=c[f>>2]|0;e=c[e>>2]|0;l=f;k=g}else{h=0;i=0;e=0;l=m;k=m+11|0}j=_A(112)|0;f=h<<24>>24<0;c[j+4>>2]=0;c[j+8>>2]=0;g=j+12|0;c[g>>2]=c[p>>2];c[g+4>>2]=c[p+4>>2];c[g+8>>2]=c[p+8>>2];c[g+12>>2]=c[p+12>>2];c[g+16>>2]=c[p+16>>2];c[j+32>>2]=8;c[j>>2]=287964;Wn(j+36|0,f?i:m,f?e:h&255);h=j+48|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;El(h,-1,n);e=j+84|0;a[e>>0]=0;f=j+88|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;g=j;El(o,0,p);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0){Jl(h,o)|0;Ml(o);if(jq(b,f)|0)f=17;else{a[e>>0]=1;f=17}}else{hq(b,h)|0;Ml(o);if((iq(b,f)|0)==1)f=20;else f=17}if((f|0)==17){Hq(b,j+100|0)|0;if((eq(b,30)|0)!=1){c[q>>2]=g;cl(d,q);e=c[q>>2]|0;c[q>>2]=0;if(!e)e=0;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);e=0}}else f=20}if((f|0)==20){ma[c[(c[j>>2]|0)+4>>2]&255](j);e=1}if((a[k>>0]|0)<0)$A(c[l>>2]|0)}q=e;aa=r;return q|0}function ar(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=aa;aa=aa+224|0;t=z+180|0;m=z+88|0;y=z+72|0;w=z+36|0;n=z+144|0;u=z+24|0;q=z;l=z+108|0;x=z+84|0;if((eq(b,21)|0)==1){y=1;aa=z;return y|0}v=b+88|0;if(!(c[v>>2]|0)){Sp(t,c[b>>2]|0,b);i=c[v>>2]|0;c[v>>2]=i+1;e=b+92|0;i=b+16+(((c[e>>2]|0)+i&1)*36|0)|0;j=t;k=i+36|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0))}else e=b+92|0;s=b+16+((c[e>>2]&1)*36|0)|0;c[m>>2]=c[s>>2];c[m+4>>2]=c[s+4>>2];c[m+8>>2]=c[s+8>>2];c[m+12>>2]=c[s+12>>2];c[m+16>>2]=c[s+16>>2];if((eq(b,11)|0)==1)e=1;else{c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;if((cq(b,0)|0)==110){p=b+92|0;e=c[p>>2]&1;o=b+16+(e*36|0)|0;s=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[p>>2]=c[p>>2]&1^1;c[v>>2]=(c[v>>2]|0)+-1;Wn(t,s,e);e=y+11|0;if((a[e>>0]|0)<0){a[c[y>>2]>>0]=0;c[y+4>>2]=0}else{a[y>>0]=0;a[e>>0]=0}pB(y);c[y>>2]=c[t>>2];c[y+4>>2]=c[t+4>>2];c[y+8>>2]=c[t+8>>2];s=e}else s=y+11|0;p=_A(116)|0;h=a[s>>0]|0;g=h<<24>>24<0;e=g?c[y>>2]|0:y;h=g?c[y+4>>2]|0:h&255;c[p+4>>2]=0;c[p+8>>2]=0;g=p+12|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];c[g+16>>2]=c[m+16>>2];c[p+32>>2]=6;c[p>>2]=287980;Wn(p+36|0,e,h);h=p+48|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(h,-1,t);e=p+84|0;a[e>>0]=0;g=p+92|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;o=p;f=p+88|0;do if((cq(b,0)|0)==111){j=b+92|0;i=c[j>>2]&1;k=b+16+(i*36|0)|0;i=c[b+16+(i*36|0)+24>>2]|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[k+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[v>>2]=(c[v>>2]|0)+-1;if((i|0)==-17?(a[(c[b+12>>2]|0)+9>>0]|0)==0:0){r=44;break}c[f>>2]=i;a[e>>0]=1;f=p+108|0;g=p+112|0;h=p+104|0;a:while(1){c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(w,-1,t);if((cq(b,0)|0)==21?(cq(b,1)|0)==84:0){e=b+16+((c[j>>2]&1)*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=c[j>>2]&1^1;c[j>>2]=e;c[v>>2]=(c[v>>2]|0)+-1;e=b+16+(e*36|0)|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[v>>2]=(c[v>>2]|0)+-1;e=c[f>>2]|0;if(e>>>0<(c[g>>2]|0)>>>0){c[e>>2]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(e+4|0,-1,t);c[f>>2]=(c[f>>2]|0)+40}else Sg(h);if((eq(b,30)|0)==1)break}else r=22;do if((r|0)==22){r=0;if((cq(b,0)|0)==21?(cq(b,1)|0)==82:0){m=b+16+((c[j>>2]&1)*36|0)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;m=c[j>>2]&1^1;c[j>>2]=m;c[v>>2]=(c[v>>2]|0)+-1;m=b+16+(m*36|0)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[v>>2]=(c[v>>2]|0)+-1;if((hq(b,w)|0)==1)break a;e=c[f>>2]|0;if(e>>>0<(c[g>>2]|0)>>>0){Il(t,w);c[e>>2]=1;Il(e+4|0,t);Ml(t);c[f>>2]=(c[f>>2]|0)+40}else Kq(h,w);if((eq(b,30)|0)==1)break a;else break};c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(n,-1,t);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0){r=34;break a}hq(b,w)|0;Ml(n);e=c[f>>2]|0;if(e>>>0<(c[g>>2]|0)>>>0){Il(t,w);c[e>>2]=1;Il(e+4|0,t);Ml(t);c[f>>2]=(c[f>>2]|0)+40;break}else{Kq(h,w);break}}while(0);Ml(w)}if((r|0)==34){Jl(w,n)|0;Ml(n);c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;a[q+11>>0]=8;n=q;c[n>>2]=778462578;c[n+4>>2]=1819047278;a[q+8>>0]=0;n=q+12|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;a[n+11>>0]=8;g=n;c[g>>2]=778462578;c[g+4>>2]=1668183398;a[q+20>>0]=0;g=u+4|0;h=_A(24)|0;c[u>>2]=h;r=h+24|0;c[u+8>>2]=r;cB(h,q);f=h+12|0;cB(f,n);c[g>>2]=r;if((cq(b,0)|0)==21){r=b+16+((c[j>>2]&1)*36|0)|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[j>>2]=c[j>>2]&1^1;r=(c[v>>2]|0)+-1|0;c[v>>2]=r;if(!r){Sp(t,c[b>>2]|0,b);i=c[v>>2]|0;c[v>>2]=i+1;i=b+16+(((c[j>>2]|0)+i&1)*36|0)|0;j=t;k=i+36|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0))}gq(b,u,0);e=1}else e=0;if((a[h+23>>0]|0)<0)$A(c[f>>2]|0);if((a[h+11>>0]|0)<0)$A(c[h>>2]|0);c[g>>2]=h;$A(h);if(!e){Ml(w);r=50;break}}Ml(w);r=53}else r=44;while(0);if((r|0)==44){c[f>>2]=-16;El(l,0,m);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(h,l)|0;else hq(b,h)|0;Ml(l);if((iq(b,g)|0)==1)r=53;else{Jq(b,p+104|0)|0;r=50}}if((r|0)==50)if((eq(b,30)|0)!=1){c[x>>2]=o;el(d,x);e=c[x>>2]|0;c[x>>2]=0;if(!e)e=0;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);e=0}}else r=53;if((r|0)==53){ma[c[(c[p>>2]|0)+4>>2]&255](p);e=1}if((a[s>>0]|0)<0)$A(c[y>>2]|0)}y=e;aa=z;return y|0}function br(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;n=aa;aa=aa+48|0;l=n+4|0;m=n;if((eq(b,21)|0)==1){m=1;aa=n;return m|0}k=b+88|0;if(!(c[k>>2]|0)){Sp(l,c[b>>2]|0,b);f=c[k>>2]|0;c[k>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=l;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;f=b+16+((c[e>>2]&1)*36|0)|0;h=_A(112)|0;c[h+4>>2]=0;c[h+8>>2]=0;i=h+12|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[h+32>>2]=10;c[h>>2]=287948;i=h+36|0;Wn(i,0,0);f=h+48|0;a[f>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(h+52|0,-1,l);j=h+88|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;g=h;if((eq(b,13)|0)!=1){if((cq(b,0)|0)==110){p=b+92|0;e=c[p>>2]&1;q=b+16+(e*36|0)|0;o=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[p>>2]=c[p>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;Wn(l,o,e);e=h+47|0;if((a[e>>0]|0)<0){a[c[i>>2]>>0]=0;c[h+40>>2]=0}else{a[i>>0]=0;a[e>>0]=0}pB(i);c[i>>2]=c[l>>2];c[i+4>>2]=c[l+4>>2];c[i+8>>2]=c[l+8>>2]}if((((wq(b,f)|0)!=1?(xq(b,26,j)|0)!=1:0)?(xq(b,29,h+100|0)|0)!=1:0)?(eq(b,30)|0)!=1:0){c[m>>2]=g;gl(d,m);e=c[m>>2]|0;c[m>>2]=0;if(!e){q=0;aa=n;return q|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);q=0;aa=n;return q|0}}ma[c[(c[h>>2]|0)+4>>2]&255](h);q=1;aa=n;return q|0}function cr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+48|0;h=j+4|0;i=j;if((eq(a,21)|0)==1){i=1;aa=j;return i|0}d=a+88|0;if(!(c[d>>2]|0)){Sp(h,c[a>>2]|0,a);e=c[d>>2]|0;c[d>>2]=e+1;d=a+92|0;e=a+16+(((c[d>>2]|0)+e&1)*36|0)|0;f=h;g=e+36|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0))}else d=a+92|0;d=a+16+((c[d>>2]&1)*36|0)|0;e=_A(88)|0;c[e+4>>2]=0;c[e+8>>2]=0;f=e+12|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];c[e+32>>2]=3;c[e>>2]=288876;f=e+36|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(e+52|0,-1,h);d=e;if((((eq(a,14)|0)!=1?(Nq(a,f)|0)!=1:0)?(or(a,f)|0)!=1:0)?(eq(a,30)|0)!=1:0){c[i>>2]=d;il(b,i);d=c[i>>2]|0;c[i>>2]=0;if(!d){i=0;aa=j;return i|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);i=0;aa=j;return i|0}ma[c[(c[e>>2]|0)+4>>2]&255](e);i=1;aa=j;return i|0}function dr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+160|0;t=w+124|0;s=w+84|0;f=w+60|0;v=w+48|0;u=w+36|0;m=w;q=w+120|0;l=w+80|0;if((eq(b,21)|0)==1){v=1;aa=w;return v|0}n=b+88|0;if(!(c[n>>2]|0)){Sp(t,c[b>>2]|0,b);o=c[n>>2]|0;c[n>>2]=o+1;e=b+92|0;o=b+16+(((c[e>>2]|0)+o&1)*36|0)|0;j=t;p=o+36|0;do{c[o>>2]=c[j>>2];o=o+4|0;j=j+4|0}while((o|0)<(p|0))}else e=b+92|0;p=b+16+((c[e>>2]&1)*36|0)|0;c[f>>2]=c[p>>2];c[f+4>>2]=c[p+4>>2];c[f+8>>2]=c[p+8>>2];c[f+12>>2]=c[p+12>>2];c[f+16>>2]=c[p+16>>2];if((eq(b,15)|0)==1)e=1;else{c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;if((cq(b,0)|0)==110){o=b+92|0;e=c[o>>2]&1;j=b+16+(e*36|0)|0;p=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[o>>2]=c[o>>2]&1^1;c[n>>2]=(c[n>>2]|0)+-1;Wn(t,p,e);e=v+11|0;if((a[e>>0]|0)<0){a[c[v>>2]>>0]=0;c[v+4>>2]=0}else{a[v>>0]=0;a[e>>0]=0}pB(v);c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2]}c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;a:do if((kr(b,u,0)|0)==1)e=1;else{do if((cq(b,0)|0)==21?(cq(b,1)|0)==18:0){lr(b,d);k=_A(152)|0;f=a[v+11>>0]|0;g=f<<24>>24<0;h=g?c[v>>2]|0:v;f=g?c[v+4>>2]|0:f&255;g=k+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[k>>2]=289052;Wn(k+32|0,h,f);f=k+44|0;a[f>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(k+48|0,-1,t);h=k+84|0;e=k+136|0;o=h;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[e>>2]=1065353216;c[k+140>>2]=0;c[k+144>>2]=0;c[k+148>>2]=0;l=k;if(((((eq(b,21)|0)!=1?(eq(b,18)|0)!=1:0)?(Nq(b,g)|0)!=1:0)?(Nq(b,k+16|0)|0)!=1:0)?(eq(b,30)|0)!=1:0){if((wq(b,f)|0)==1){ma[c[(c[k>>2]|0)+4>>2]&255](k);e=1;break a}if((mr(b,26,h,k+120|0,0)|0)!=1?(xq(b,29,k+96|0)|0)!=1:0){c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;a[m+11>>0]=4;c[m>>2]=1701869940;a[m+4>>0]=0;g=m+12|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;a[g+11>>0]=5;a[g>>0]=a[330308]|0;a[g+1>>0]=a[330309]|0;a[g+2>>0]=a[330310]|0;a[g+3>>0]=a[330311]|0;a[g+4>>0]=a[330312]|0;a[g+5>>0]=0;o=m+24|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;a[o+11>>0]=6;a[o>>0]=a[330329]|0;a[o+1>>0]=a[330330]|0;a[o+2>>0]=a[330331]|0;a[o+3>>0]=a[330332]|0;a[o+4>>0]=a[330333]|0;a[o+5>>0]=a[330334]|0;a[o+6>>0]=0;h=s+4|0;i=_A(36)|0;c[s>>2]=i;p=i+36|0;c[s+8>>2]=p;cB(i,m);f=i+12|0;cB(f,g);g=i+24|0;cB(g,o);c[h>>2]=p;if((cq(b,0)|0)==21){e=b+92|0;p=b+16+((c[e>>2]&1)*36|0)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[e>>2]=c[e>>2]&1^1;p=(c[n>>2]|0)+-1|0;c[n>>2]=p;if(!p){Sp(t,c[b>>2]|0,b);o=c[n>>2]|0;c[n>>2]=o+1;o=b+16+(((c[e>>2]|0)+o&1)*36|0)|0;j=t;p=o+36|0;do{c[o>>2]=c[j>>2];o=o+4|0;j=j+4|0}while((o|0)<(p|0))}gq(b,s,0);e=1}else e=0;if((a[i+35>>0]|0)<0)$A(c[g>>2]|0);if((a[i+23>>0]|0)<0)$A(c[f>>2]|0);if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);c[h>>2]=i;$A(i);if(e){ma[c[(c[k>>2]|0)+4>>2]&255](k);e=1;break a}if(!(c[n>>2]|0)){Sp(t,c[b>>2]|0,b);o=c[n>>2]|0;c[n>>2]=o+1;e=b+92|0;o=b+16+(((c[e>>2]|0)+o&1)*36|0)|0;j=t;p=o+36|0;do{c[o>>2]=c[j>>2];o=o+4|0;j=j+4|0}while((o|0)<(p|0))}else e=b+92|0;o=b+16+((c[e>>2]&1)*36|0)|0;e=_A(40)|0;c[e+4>>2]=0;c[e+8>>2]=0;p=e+12|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];c[p+16>>2]=c[o+16>>2];c[e+32>>2]=2;c[e>>2]=288972;c[e+36>>2]=l;c[q>>2]=e;ql(d,q);e=c[q>>2]|0;c[q>>2]=0;if(!e)break;ma[c[(c[e>>2]|0)+4>>2]&255](e);break}ma[c[(c[k>>2]|0)+4>>2]&255](k);e=1;break a}ma[c[(c[k>>2]|0)+4>>2]&255](k);e=1;break a}else r=38;while(0);if((r|0)==38){j=_A(156)|0;g=a[v+11>>0]|0;e=g<<24>>24<0;i=e?c[v>>2]|0:v;g=e?c[v+4>>2]|0:g&255;c[j+4>>2]=0;c[j+8>>2]=0;e=j+12|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[j+32>>2]=0;c[j>>2]=288940;Wn(j+36|0,i,g);g=j+48|0;a[g>>0]=0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(j+52|0,-1,t);i=j+88|0;e=j+140|0;o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[e>>2]=1065353216;e=j+144|0;c[e>>2]=0;c[j+148>>2]=0;c[j+152>>2]=0;f=j;if(((wq(b,g)|0)!=1?(k=j+124|0,(mr(b,26,i,k,0)|0)!=1):0)?(xq(b,29,j+100|0)|0)!=1:0){c[t>>2]=0;h=t+4|0;c[h>>2]=0;c[t+8>>2]=0;if((mr(b,20,t,k,(c[j+92>>2]|0)-(c[i>>2]|0)>>2)|0)!=1?(Nk(j+112|0,t),(kq(b,e)|0)!=1):0){c[l>>2]=f;kl(d,l);e=c[l>>2]|0;c[l>>2]=0;if(!e){e=0;f=0}else{ma[c[(c[e>>2]|0)+4>>2]&255](e);e=0;f=0}}else e=1;g=c[t>>2]|0;if(g|0){c[h>>2]=g;$A(g)}if(f)r=48}else{e=1;r=48}if((r|0)==48)ma[c[(c[f>>2]|0)+4>>2]&255](f);if(e|0){e=1;break}}f=((c[d+80>>2]|0)-(c[d+76>>2]|0)>>2)+-1|0;e=(c[d+36>>2]|0)+12|0;c[t>>2]=c[e>>2];c[t+4>>2]=c[e+4>>2];c[t+8>>2]=c[e+8>>2];c[t+12>>2]=c[e+12>>2];c[t+16>>2]=c[e+16>>2];e=c[u>>2]|0;if(e|0)do{El(s,f,t);Hl(e+52|0,s)|0;Ml(s);e=c[e+4>>2]|0}while((e|0)!=0);Al(d,u);e=(eq(b,30)|0)==1&1}while(0);f=c[u>>2]|0;if(f|0)do{u=f;f=c[f+4>>2]|0;ma[c[(c[u>>2]|0)+4>>2]&255](u)}while((f|0)!=0);if((a[v+11>>0]|0)<0)$A(c[v>>2]|0)}v=e;aa=w;return v|0}function er(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+96|0;n=s+60|0;r=s+40|0;o=s+24|0;m=s;q=s+36|0;if((eq(b,21)|0)==1){r=1;aa=s;return r|0}p=b+88|0;if(!(c[p>>2]|0)){Sp(n,c[b>>2]|0,b);h=c[p>>2]|0;c[p>>2]=h+1;e=b+92|0;h=b+16+(((c[e>>2]|0)+h&1)*36|0)|0;i=n;j=h+36|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}else e=b+92|0;i=b+16+((c[e>>2]&1)*36|0)|0;g=_A(72)|0;c[g+4>>2]=0;c[g+8>>2]=0;h=g+12|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];c[g+32>>2]=4;c[g>>2]=289068;h=g+36|0;Wn(h,0,0);i=g+48|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;f=g;if((eq(b,35)|0)!=1){if((cq(b,0)|0)==110){k=b+92|0;e=c[k>>2]&1;j=b+16+(e*36|0)|0;l=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[k>>2]=c[k>>2]&1^1;c[p>>2]=(c[p>>2]|0)+-1;Wn(n,l,e);e=g+47|0;if((a[e>>0]|0)<0){a[c[h>>2]>>0]=0;c[g+40>>2]=0}else{a[h>>0]=0;a[e>>0]=0}pB(h);c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];c[h+8>>2]=c[n+8>>2]}if((eq(b,21)|0)!=1?(eq(b,15)|0)!=1:0){c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=1065353216;if((mr(b,26,i,r,0)|0)!=1?(xq(b,29,g+60|0)|0)!=1:0){c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;a[m+11>>0]=5;a[m>>0]=a[330308]|0;a[m+1>>0]=a[330309]|0;a[m+2>>0]=a[330310]|0;a[m+3>>0]=a[330311]|0;a[m+4>>0]=a[330312]|0;a[m+5>>0]=0;i=m+12|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;a[i+11>>0]=6;a[i>>0]=a[330329]|0;a[i+1>>0]=a[330330]|0;a[i+2>>0]=a[330331]|0;a[i+3>>0]=a[330332]|0;a[i+4>>0]=a[330333]|0;a[i+5>>0]=a[330334]|0;a[i+6>>0]=0;k=o+4|0;l=_A(24)|0;c[o>>2]=l;j=l+24|0;c[o+8>>2]=j;cB(l,m);g=l+12|0;cB(g,i);c[k>>2]=j;if((cq(b,0)|0)==21){e=b+92|0;m=b+16+((c[e>>2]&1)*36|0)|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=0;c[e>>2]=c[e>>2]&1^1;m=(c[p>>2]|0)+-1|0;c[p>>2]=m;if(!m){Sp(n,c[b>>2]|0,b);h=c[p>>2]|0;c[p>>2]=h+1;h=b+16+(((c[e>>2]|0)+h&1)*36|0)|0;i=n;j=h+36|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}gq(b,o,0);e=1}else e=0;if((a[l+23>>0]|0)<0)$A(c[g>>2]|0);if((a[l+11>>0]|0)<0)$A(c[l>>2]|0);c[k>>2]=l;$A(l);if((!e?(eq(b,30)|0)!=1:0)?(eq(b,30)|0)!=1:0){c[q>>2]=f;ml(d,q);e=c[q>>2]|0;c[q>>2]=0;if(!e){f=0;e=0}else{ma[c[(c[e>>2]|0)+4>>2]&255](e);f=0;e=0}}else e=1}else e=1;g=c[r+8>>2]|0;if(g|0)do{h=g;g=c[g>>2]|0;i=h+8|0;if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);$A(h)}while((g|0)!=0);g=c[r>>2]|0;c[r>>2]=0;if(g|0)$A(g);if(!f){r=e;aa=s;return r|0}}else e=1}else e=1;ma[c[(c[f>>2]|0)+4>>2]&255](f);r=e;aa=s;return r|0}function fr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+128|0;o=r+88|0;n=r+52|0;i=r+28|0;q=r+12|0;p=r;l=r+48|0;j=r+24|0;if((eq(b,21)|0)==1){q=1;aa=r;return q|0}k=b+88|0;if(!(c[k>>2]|0)){Sp(o,c[b>>2]|0,b);f=c[k>>2]|0;c[k>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=o;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;h=b+16+((c[e>>2]&1)*36|0)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2];if((eq(b,17)|0)==1)e=1;else{c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;if((cq(b,0)|0)==110){g=b+92|0;e=c[g>>2]&1;f=b+16+(e*36|0)|0;h=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;Wn(o,h,e);e=q+11|0;if((a[e>>0]|0)<0){a[c[q>>2]>>0]=0;c[q+4>>2]=0}else{a[q>>0]=0;a[e>>0]=0}pB(q);c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2]}c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;a:do if((kr(b,p,3)|0)==1)e=1;else{do if((cq(b,0)|0)==21?(cq(b,1)|0)==18:0){lr(b,d);e=_A(64)|0;i=a[q+11>>0]|0;f=i<<24>>24<0;j=f?c[q>>2]|0:q;i=f?c[q+4>>2]|0:i&255;f=e+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[e+28>>2]=3;c[e>>2]=289004;g=e+32|0;Wn(g,j,i);c[e+44>>2]=-64;a[e+48>>0]=0;c[e+52>>2]=0;c[e+56>>2]=0;c[e+60>>2]=0;i=e;if(((((eq(b,21)|0)!=1?(eq(b,18)|0)!=1:0)?(Nq(b,f)|0)!=1:0)?(Nq(b,e+16|0)|0)!=1:0)?(eq(b,30)|0)!=1:0){if((nr(b,g)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);e=1;break a}if(!(c[k>>2]|0)){Sp(o,c[b>>2]|0,b);f=c[k>>2]|0;c[k>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=o;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;j=b+16+((c[e>>2]&1)*36|0)|0;e=_A(40)|0;c[e+4>>2]=0;c[e+8>>2]=0;k=e+12|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];c[k+16>>2]=c[j+16>>2];c[e+32>>2]=2;c[e>>2]=288972;c[e+36>>2]=i;c[l>>2]=e;ql(d,l);e=c[l>>2]|0;c[l>>2]=0;if(!e)break;ma[c[(c[e>>2]|0)+4>>2]&255](e);break}ma[c[(c[e>>2]|0)+4>>2]&255](e);e=1;break a}else m=27;while(0);if((m|0)==27){f=_A(68)|0;e=a[q+11>>0]|0;m=e<<24>>24<0;l=m?c[q>>2]|0:q;e=m?c[q+4>>2]|0:e&255;c[f+4>>2]=0;c[f+8>>2]=0;m=f+12|0;c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];c[m+16>>2]=c[i+16>>2];c[f+32>>2]=1;c[f>>2]=288892;m=f+36|0;Wn(m,l,e);c[f+48>>2]=-64;a[f+52>>0]=0;e=f+56|0;c[e>>2]=0;c[f+60>>2]=0;c[f+64>>2]=0;if((nr(b,m)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);e=1;break}if((kq(b,e)|0)==1){ma[c[(c[f>>2]|0)+4>>2]&255](f);e=1;break}c[j>>2]=f;ol(d,j);e=c[j>>2]|0;c[j>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e)}f=((c[d+92>>2]|0)-(c[d+88>>2]|0)>>2)+-1|0;e=(c[d+36>>2]|0)+12|0;c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];c[o+16>>2]=c[e+16>>2];e=c[p>>2]|0;if(e|0)do{El(n,f,o);Hl(e+52|0,n)|0;Ml(n);e=c[e+4>>2]|0}while((e|0)!=0);Al(d,p);e=(eq(b,30)|0)==1&1}while(0);f=c[p>>2]|0;if(f|0)do{p=f;f=c[f+4>>2]|0;ma[c[(c[p>>2]|0)+4>>2]&255](p)}while((f|0)!=0);if((a[q+11>>0]|0)<0)$A(c[q>>2]|0)}q=e;aa=r;return q|0}function gr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=aa;aa=aa+144|0;r=z+96|0;t=z+72|0;y=z+60|0;x=z+48|0;w=z+36|0;q=z+24|0;p=z;u=z+92|0;if((eq(d,21)|0)==1){y=1;aa=z;return y|0}s=d+88|0;if(!(c[s>>2]|0)){Sp(r,c[d>>2]|0,d);n=c[s>>2]|0;c[s>>2]=n+1;f=d+92|0;n=d+16+(((c[f>>2]|0)+n&1)*36|0)|0;m=r;o=n+36|0;do{c[n>>2]=c[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(o|0))}else f=d+92|0;o=d+16+((c[f>>2]&1)*36|0)|0;c[t>>2]=c[o>>2];c[t+4>>2]=c[o+4>>2];c[t+8>>2]=c[o+8>>2];c[t+12>>2]=c[o+12>>2];c[t+16>>2]=c[o+16>>2];lr(d,e);if((eq(d,18)|0)==1)f=1;else{c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;if(((Nq(d,y)|0)!=1?(Nq(d,x)|0)!=1:0)?(eq(d,21)|0)!=1:0){c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;a:do switch(cq(d,0)|0){case 15:{m=d+92|0;o=d+16+((c[m>>2]&1)*36|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[m>>2]=c[m>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){f=c[m>>2]&1;n=d+16+(f*36|0)|0;o=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[m>>2]=c[m>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,o,f);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(152)|0;h=a[f>>0]|0;f=h<<24>>24<0;i=f?c[w>>2]|0:w;h=f?c[w+4>>2]|0:h&255;f=g+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[g>>2]=289052;Wn(g+32|0,i,h);h=g+44|0;a[h>>0]=0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;El(g+48|0,-1,r);i=g+136|0;n=g+84|0;o=n+52|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(o|0));c[i>>2]=1065353216;c[g+140>>2]=0;c[g+144>>2]=0;c[g+148>>2]=0;if((cq(d,0)|0)==21?(cq(d,1)|0)==35:0){a[h>>0]=1;if((wq(d,h)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}}else{j=g;v=23}do if((v|0)==23){if((mr(d,26,j+84|0,j+120|0,0)|0)!=1?(xq(d,29,j+96|0)|0)!=1:0){c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;a[p+11>>0]=5;a[p>>0]=a[330308]|0;a[p+1>>0]=a[330309]|0;a[p+2>>0]=a[330310]|0;a[p+3>>0]=a[330311]|0;a[p+4>>0]=a[330312]|0;a[p+5>>0]=0;n=p+12|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;a[n+11>>0]=6;a[n>>0]=a[330329]|0;a[n+1>>0]=a[330330]|0;a[n+2>>0]=a[330331]|0;a[n+3>>0]=a[330332]|0;a[n+4>>0]=a[330333]|0;a[n+5>>0]=a[330334]|0;a[n+6>>0]=0;k=q+4|0;l=_A(24)|0;c[q>>2]=l;o=l+24|0;c[q+8>>2]=o;cB(l,p);i=l+12|0;cB(i,n);c[k>>2]=o;if((cq(d,0)|0)==21){p=d+16+((c[m>>2]&1)*36|0)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[m>>2]=c[m>>2]&1^1;p=(c[s>>2]|0)+-1|0;c[s>>2]=p;if(!p){Sp(r,c[d>>2]|0,d);n=c[s>>2]|0;c[s>>2]=n+1;n=d+16+(((c[m>>2]|0)+n&1)*36|0)|0;m=r;o=n+36|0;do{c[n>>2]=c[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(o|0))}gq(d,q,0);h=1}else h=0;if((a[l+23>>0]|0)<0)$A(c[i>>2]|0);if((a[l+11>>0]|0)<0)$A(c[l>>2]|0);c[k>>2]=l;$A(l);if(!h?(eq(d,30)|0)!=1:0)break}ma[c[(c[j>>2]|0)+4>>2]&255](j);f=1;break a}while(0);h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break}case 33:{j=d+92|0;q=d+16+((c[j>>2]&1)*36|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){f=c[j>>2]&1;p=d+16+(f*36|0)|0;q=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,q,f);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(80)|0;r=a[f>>0]|0;f=r<<24>>24<0;i=f?c[w>>2]|0:w;r=f?c[w+4>>2]|0:r&255;f=g+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[g+28>>2]=1;c[g>>2]=289036;Wn(g+32|0,i,r);r=g+48|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;b[r+16>>1]=0;i=g+72|0;c[i>>2]=-16;do if((Eq(d,r)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,g+56|0)|0)==1)break;else h=1;else h=0;a[g+64>>0]=h;if((cq(d,0)|0)==31){r=d+16+((c[j>>2]&1)*36|0)|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;a[g+65>>0]=1}if((Mq(d,i)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}else{h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break a}}while(0);ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break}case 22:{i=d+92|0;q=d+16+((c[i>>2]&1)*36|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){f=c[i>>2]&1;p=d+16+(f*36|0)|0;q=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,q,f);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(72)|0;r=a[f>>0]|0;f=r<<24>>24<0;q=f?c[w>>2]|0:w;r=f?c[w+4>>2]|0:r&255;f=g+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[g+28>>2]=2;c[g>>2]=289020;Wn(g+32|0,q,r);r=g+48|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;b[r+16>>1]=0;do if((Eq(d,r)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,g+56|0)|0)==1)break;else h=1;else h=0;a[g+64>>0]=h;if((cq(d,0)|0)==31){r=d+16+((c[i>>2]&1)*36|0)|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[i>>2]=c[i>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;a[g+65>>0]=1}if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}else{h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break a}}while(0);ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break}case 17:{f=d+92|0;q=d+16+((c[f>>2]&1)*36|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){q=c[f>>2]&1;o=d+16+(q*36|0)|0;p=c[d+16+(q*36|0)+24>>2]|0;q=c[d+16+(q*36|0)+28>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,p,q);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(64)|0;r=a[f>>0]|0;f=r<<24>>24<0;q=f?c[w>>2]|0:w;r=f?c[w+4>>2]|0:r&255;f=g+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[g+28>>2]=3;c[g>>2]=289004;s=g+32|0;Wn(s,q,r);c[g+44>>2]=-64;a[g+48>>0]=0;c[g+52>>2]=0;c[g+56>>2]=0;c[g+60>>2]=0;if((nr(d,s)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}else{h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break a}}case 13:{f=d+92|0;q=d+16+((c[f>>2]&1)*36|0)|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;c[q+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(d,0)|0)==110){q=c[f>>2]&1;o=d+16+(q*36|0)|0;p=c[d+16+(q*36|0)+24>>2]|0;q=c[d+16+(q*36|0)+28>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(r,p,q);f=w+11|0;if((a[f>>0]|0)<0){a[c[w>>2]>>0]=0;c[w+4>>2]=0}else{a[w>>0]=0;a[f>>0]=0}pB(w);c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2]}else f=w+11|0;g=_A(108)|0;s=a[f>>0]|0;f=s<<24>>24<0;h=f?c[w>>2]|0:w;s=f?c[w+4>>2]|0:s&255;f=g+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[g+28>>2]=4;c[g>>2]=288956;Wn(g+32|0,h,s);s=g+44|0;a[s>>0]=0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;El(g+48|0,-1,r);h=g+84|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;if((wq(d,s)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}if((xq(d,26,h)|0)!=1?(xq(d,29,g+96|0)|0)!=1:0)if((eq(d,30)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break a}else{h=_A(40)|0;c[h+4>>2]=0;c[h+8>>2]=0;v=h+12|0;c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2];c[v+12>>2]=c[t+12>>2];c[v+16>>2]=c[t+16>>2];v=95;break a}ma[c[(c[g>>2]|0)+4>>2]&255](g);f=1;break}default:{h=_A(32)|0;c[q>>2]=h;c[q+8>>2]=-2147483616;c[q+4>>2]=16;n=h;m=310697;o=n+16|0;do{a[n>>0]=a[m>>0]|0;n=n+1|0;m=m+1|0}while((n|0)<(o|0));a[h+16>>0]=0;f=r+4|0;g=_A(12)|0;c[r>>2]=g;u=g+12|0;c[r+8>>2]=u;cB(g,q);c[f>>2]=u;gq(d,r,0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);$A(h);f=1}}while(0);if((v|0)==95){c[h+32>>2]=2;c[h>>2]=288972;v=h+36|0;c[v>>2]=g;lB(f,y)|0;lB((c[v>>2]|0)+16|0,x)|0;c[u>>2]=h;ql(e,u);f=c[u>>2]|0;c[u>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);f=(eq(d,30)|0)==1&1}if((a[w+11>>0]|0)<0)$A(c[w>>2]|0)}else f=1;if((a[x+11>>0]|0)<0)$A(c[x>>2]|0);if((a[y+11>>0]|0)<0)$A(c[y>>2]|0)}y=f;aa=z;return y|0}function hr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+144|0;r=u;q=u+100|0;n=u+72|0;t=u+56|0;s=u+40|0;j=u+96|0;m=u+92|0;p=u+68|0;i=u+52|0;if((eq(d,21)|0)==1){t=1;aa=u;return t|0}k=d+88|0;if(!(c[k>>2]|0)){Sp(r,c[d>>2]|0,d);g=c[k>>2]|0;c[k>>2]=g+1;f=d+92|0;g=d+16+(((c[f>>2]|0)+g&1)*36|0)|0;h=r;l=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(l|0))}else f=d+92|0;l=d+16+((c[f>>2]&1)*36|0)|0;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];c[n+8>>2]=c[l+8>>2];c[n+12>>2]=c[l+12>>2];c[n+16>>2]=c[l+16>>2];if((eq(d,22)|0)==1)f=1;else{c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;if((cq(d,0)|0)==110){h=d+92|0;f=c[h>>2]&1;g=d+16+(f*36|0)|0;l=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h>>2]=c[h>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;Wn(r,l,f);f=t+11|0;if((a[f>>0]|0)<0){a[c[t>>2]>>0]=0;c[t+4>>2]=0}else{a[t>>0]=0;a[f>>0]=0}pB(t);c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2]}c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;a:do if((kr(d,s,2)|0)==1)f=1;else{b:do if((cq(d,0)|0)==21?(cq(d,1)|0)==18:0){lr(d,e);h=_A(72)|0;g=a[t+11>>0]|0;f=g<<24>>24<0;i=f?c[t>>2]|0:t;g=f?c[t+4>>2]|0:g&255;f=h+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[h+28>>2]=2;c[h>>2]=289020;Wn(h+32|0,i,g);g=h+48|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;b[g+16>>1]=0;i=h;if(((((eq(d,21)|0)!=1?(eq(d,18)|0)!=1:0)?(Nq(d,f)|0)!=1:0)?(Nq(d,h+16|0)|0)!=1:0)?(eq(d,30)|0)!=1:0){do if((Eq(d,g)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,h+56|0)|0)==1)break;else f=1;else f=0;a[h+64>>0]=f;if((cq(d,0)|0)==31){f=d+92|0;p=d+16+((c[f>>2]&1)*36|0)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[f>>2]=c[f>>2]&1^1;f=(c[k>>2]|0)+-1|0;c[k>>2]=f;a[h+65>>0]=1}else f=c[k>>2]|0;if(!f){Sp(r,c[d>>2]|0,d);g=c[k>>2]|0;c[k>>2]=g+1;f=d+92|0;g=d+16+(((c[f>>2]|0)+g&1)*36|0)|0;h=r;l=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(l|0))}else f=d+92|0;n=d+16+((c[f>>2]&1)*36|0)|0;f=_A(40)|0;c[f+4>>2]=0;c[f+8>>2]=0;p=f+12|0;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];c[p+8>>2]=c[n+8>>2];c[p+12>>2]=c[n+12>>2];c[p+16>>2]=c[n+16>>2];c[f+32>>2]=2;c[f>>2]=288972;c[f+36>>2]=i;c[j>>2]=f;ql(e,j);f=c[j>>2]|0;c[j>>2]=0;if(!f)break b;ma[c[(c[f>>2]|0)+4>>2]&255](f);break b}while(0);ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}else o=32;while(0);c:do if((o|0)==32){if((cq(d,0)|0)==21?(cq(d,1)|0)==10:0){j=d+92|0;i=d+16+((c[j>>2]&1)*36|0)|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;i=c[j>>2]&1^1;c[j>>2]=i;c[k>>2]=(c[k>>2]|0)+-1;i=d+16+(i*36|0)|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;j=_A(112)|0;c[j+4>>2]=0;c[j+8>>2]=0;i=j+12|0;c[i>>2]=c[n>>2];c[i+4>>2]=c[n+4>>2];c[i+8>>2]=c[n+8>>2];c[i+12>>2]=c[n+12>>2];c[i+16>>2]=c[n+16>>2];c[j+32>>2]=8;c[j>>2]=287964;Wn(j+36|0,0,0);i=j+48|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;El(i,-1,r);a[j+84>>0]=0;f=j+88|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;k=j;g=(c[e+164>>2]|0)-(c[e+160>>2]|0)>>2;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;El(r,g,q);Hl(i,r)|0;Ml(r);c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+16>>2]=0;Nl(r,0,q);i=_A(80)|0;g=i+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[g+24>>2]=0;c[i+32>>2]=15;c[i>>2]=287916;g=i+40|0;h=r;l=g+40|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(l|0));h=j+92|0;g=c[h>>2]|0;if(g){c[i+8>>2]=g;f=g+4|0}c[f>>2]=i;c[h>>2]=i;f=j+96|0;c[f>>2]=(c[f>>2]|0)+1;f=i+12|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];c[f+16>>2]=c[n+16>>2];f=j+100|0;Hq(d,f)|0;if((eq(d,30)|0)==1){ma[c[(c[j>>2]|0)+4>>2]&255](j);f=1;break a}o=_A(80)|0;l=a[t+11>>0]|0;h=l<<24>>24<0;i=h?c[t>>2]|0:t;l=h?c[t+4>>2]|0:l&255;c[o+4>>2]=0;c[o+8>>2]=0;h=o+12|0;c[h>>2]=c[n>>2];c[h+4>>2]=c[n+4>>2];c[h+8>>2]=c[n+8>>2];c[h+12>>2]=c[n+12>>2];c[h+16>>2]=c[n+16>>2];c[o+32>>2]=7;c[o>>2]=288908;Wn(o+40|0,i,l);l=o+56|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;b[l+16>>1]=0;n=((c[j+104>>2]|0)+65535-(c[f>>2]|0)|0)>>>16;f=l;c[f>>2]=n;c[f+4>>2]=0;f=o+64|0;c[f>>2]=n;c[f+4>>2]=0;a[o+72>>0]=1;c[m>>2]=o;vl(e,m);f=c[m>>2]|0;c[m>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);c[p>>2]=k;cl(e,p);f=c[p>>2]|0;c[p>>2]=0;if(!f)break;ma[c[(c[f>>2]|0)+4>>2]&255](f);break}h=_A(80)|0;p=a[t+11>>0]|0;o=p<<24>>24<0;g=o?c[t>>2]|0:t;p=o?c[t+4>>2]|0:p&255;c[h+4>>2]=0;c[h+8>>2]=0;o=h+12|0;c[o>>2]=c[n>>2];c[o+4>>2]=c[n+4>>2];c[o+8>>2]=c[n+8>>2];c[o+12>>2]=c[n+12>>2];c[o+16>>2]=c[n+16>>2];c[h+32>>2]=7;c[h>>2]=288908;Wn(h+40|0,g,p);p=h+56|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;b[p+16>>1]=0;g=h;do if((Eq(d,p)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,h+64|0)|0)==1)break;else f=1;else f=0;a[h+72>>0]=f;if((cq(d,0)|0)==31){p=d+92|0;o=d+16+((c[p>>2]&1)*36|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[p>>2]=c[p>>2]&1^1;c[k>>2]=(c[k>>2]|0)+-1;a[h+73>>0]=1}c[i>>2]=g;vl(e,i);f=c[i>>2]|0;c[i>>2]=0;if(!f)break c;ma[c[(c[f>>2]|0)+4>>2]&255](f);break c}while(0);ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}while(0);g=((c[e+164>>2]|0)-(c[e+160>>2]|0)>>2)+-1|0;f=(c[e+36>>2]|0)+12|0;c[r>>2]=c[f>>2];c[r+4>>2]=c[f+4>>2];c[r+8>>2]=c[f+8>>2];c[r+12>>2]=c[f+12>>2];c[r+16>>2]=c[f+16>>2];f=c[s>>2]|0;if(f|0)do{El(q,g,r);Hl(f+52|0,q)|0;Ml(q);f=c[f+4>>2]|0}while((f|0)!=0);Al(e,s);f=(eq(d,30)|0)==1&1}while(0);g=c[s>>2]|0;if(g|0)do{s=g;g=c[g+4>>2]|0;ma[c[(c[s>>2]|0)+4>>2]&255](s)}while((g|0)!=0);if((a[t+11>>0]|0)<0)$A(c[t>>2]|0)}t=f;aa=u;return t|0}function ir(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+96|0;i=l+60|0;h=l+40|0;k=l;j=l+36|0;if((eq(a,21)|0)==1){k=1;aa=l;return k|0}d=a+88|0;if(!(c[d>>2]|0)){Sp(i,c[a>>2]|0,a);e=c[d>>2]|0;c[d>>2]=e+1;d=a+92|0;e=a+16+(((c[d>>2]|0)+e&1)*36|0)|0;f=i;g=e+36|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0))}else d=a+92|0;g=a+16+((c[d>>2]&1)*36|0)|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];if((eq(a,32)|0)==1)d=1;else{c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;El(k,-1,i);if((hq(a,k)|0)!=1?(eq(a,30)|0)!=1:0){d=_A(72)|0;Il(i,k);c[d+4>>2]=0;c[d+8>>2]=0;a=d+12|0;c[a>>2]=c[h>>2];c[a+4>>2]=c[h+4>>2];c[a+8>>2]=c[h+8>>2];c[a+12>>2]=c[h+12>>2];c[a+16>>2]=c[h+16>>2];c[d+32>>2]=9;c[d>>2]=288860;Il(d+36|0,i);c[j>>2]=d;Ml(i);wl(b,j);d=c[j>>2]|0;c[j>>2]=0;if(!d)d=0;else{ma[c[(c[d>>2]|0)+4>>2]&255](d);d=0}}else d=1;Ml(k)}k=d;aa=l;return k|0}function jr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+160|0;t=w;s=w+120|0;o=w+96|0;v=w+80|0;u=w+64|0;k=w+116|0;g=w+40|0;n=w+92|0;q=w+76|0;j=w+60|0;if((eq(d,21)|0)==1){v=1;aa=w;return v|0}r=d+88|0;if(!(c[r>>2]|0)){Sp(t,c[d>>2]|0,d);h=c[r>>2]|0;c[r>>2]=h+1;f=d+92|0;h=d+16+(((c[f>>2]|0)+h&1)*36|0)|0;l=t;m=h+36|0;do{c[h>>2]=c[l>>2];h=h+4|0;l=l+4|0}while((h|0)<(m|0))}else f=d+92|0;m=d+16+((c[f>>2]&1)*36|0)|0;c[o>>2]=c[m>>2];c[o+4>>2]=c[m+4>>2];c[o+8>>2]=c[m+8>>2];c[o+12>>2]=c[m+12>>2];c[o+16>>2]=c[m+16>>2];if((eq(d,33)|0)==1)f=1;else{c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;if((cq(d,0)|0)==110){l=d+92|0;f=c[l>>2]&1;i=d+16+(f*36|0)|0;m=c[d+16+(f*36|0)+24>>2]|0;f=c[d+16+(f*36|0)+28>>2]|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[l>>2]=c[l>>2]&1^1;c[r>>2]=(c[r>>2]|0)+-1;Wn(t,m,f);f=v+11|0;if((a[f>>0]|0)<0){a[c[v>>2]>>0]=0;c[v+4>>2]=0}else{a[v>>0]=0;a[f>>0]=0}pB(v);c[v>>2]=c[t>>2];c[v+4>>2]=c[t+4>>2];c[v+8>>2]=c[t+8>>2]}c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;a:do if((kr(d,u,1)|0)==1)f=1;else{b:do if((cq(d,0)|0)==21?(cq(d,1)|0)==18:0){lr(d,e);h=_A(80)|0;f=a[v+11>>0]|0;g=f<<24>>24<0;i=g?c[v>>2]|0:v;f=g?c[v+4>>2]|0:f&255;g=h+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h+28>>2]=1;c[h>>2]=289036;Wn(h+32|0,i,f);f=h+48|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;b[f+16>>1]=0;i=h+72|0;c[i>>2]=-16;j=h;if(((((eq(d,21)|0)!=1?(eq(d,18)|0)!=1:0)?(Nq(d,g)|0)!=1:0)?(Nq(d,h+16|0)|0)!=1:0)?(eq(d,30)|0)!=1:0){do if((Eq(d,f)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,h+56|0)|0)==1)break;else f=1;else f=0;a[h+64>>0]=f;if((cq(d,0)|0)==31){q=d+92|0;o=d+16+((c[q>>2]&1)*36|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[r>>2]=(c[r>>2]|0)+-1;a[h+65>>0]=1}if((Mq(d,i)|0)==1){ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}if(!(c[r>>2]|0)){Sp(t,c[d>>2]|0,d);h=c[r>>2]|0;c[r>>2]=h+1;f=d+92|0;h=d+16+(((c[f>>2]|0)+h&1)*36|0)|0;l=t;m=h+36|0;do{c[h>>2]=c[l>>2];h=h+4|0;l=l+4|0}while((h|0)<(m|0))}else f=d+92|0;q=d+16+((c[f>>2]&1)*36|0)|0;f=_A(40)|0;c[f+4>>2]=0;c[f+8>>2]=0;r=f+12|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];c[r+16>>2]=c[q+16>>2];c[f+32>>2]=2;c[f>>2]=288972;c[f+36>>2]=j;c[k>>2]=f;ql(e,k);f=c[k>>2]|0;c[k>>2]=0;if(!f)break b;ma[c[(c[f>>2]|0)+4>>2]&255](f);break b}while(0);ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}ma[c[(c[h>>2]|0)+4>>2]&255](h);f=1;break a}else p=33;while(0);c:do if((p|0)==33){if((cq(d,0)|0)!=111){i=_A(88)|0;q=a[v+11>>0]|0;g=q<<24>>24<0;h=g?c[v>>2]|0:v;q=g?c[v+4>>2]|0:q&255;c[i+4>>2]=0;c[i+8>>2]=0;g=i+12|0;c[g>>2]=c[o>>2];c[g+4>>2]=c[o+4>>2];c[g+8>>2]=c[o+8>>2];c[g+12>>2]=c[o+12>>2];c[g+16>>2]=c[o+16>>2];c[i+32>>2]=5;c[i>>2]=288924;Wn(i+40|0,h,q);q=i+56|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;b[q+16>>1]=0;h=i+80|0;c[h>>2]=-16;g=i;do if((Eq(d,q)|0)!=1){if((cq(d,0)|0)==44)if((Eq(d,i+64|0)|0)==1)break;else f=1;else f=0;a[i+72>>0]=f;if((cq(d,0)|0)==31){q=d+92|0;p=d+16+((c[q>>2]&1)*36|0)|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[r>>2]=(c[r>>2]|0)+-1;a[i+73>>0]=1}if((Mq(d,h)|0)==1){ma[c[(c[i>>2]|0)+4>>2]&255](i);f=1;break a}c[j>>2]=g;yl(e,j);f=c[j>>2]|0;c[j>>2]=0;if(!f)break c;ma[c[(c[f>>2]|0)+4>>2]&255](f);break c}while(0);ma[c[(c[i>>2]|0)+4>>2]&255](i);f=1;break a}if(((Mq(d,s)|0)!=1?(eq(d,21)|0)!=1:0)?(eq(d,11)|0)!=1:0){j=_A(116)|0;c[j+4>>2]=0;c[j+8>>2]=0;i=j+12|0;c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];c[i+16>>2]=c[o+16>>2];c[j+32>>2]=6;c[j>>2]=287980;Wn(j+36|0,0,0);i=j+48|0;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[t+16>>2]=0;El(i,-1,t);a[j+84>>0]=0;f=j+92|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;k=j;h=(c[e+140>>2]|0)-(c[e+136>>2]|0)>>2;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(t,h,g);Hl(i,t)|0;Ml(t);c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;Nl(t,0,g);i=_A(80)|0;h=i+4|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;c[i+32>>2]=15;c[i>>2]=287916;h=i+40|0;l=t;m=h+40|0;do{c[h>>2]=c[l>>2];h=h+4|0;l=l+4|0}while((h|0)<(m|0));h=j+96|0;g=c[h>>2]|0;if(g){c[i+8>>2]=g;f=g+4|0}c[f>>2]=i;c[h>>2]=i;f=j+100|0;c[f>>2]=(c[f>>2]|0)+1;f=i+12|0;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];f=j+104|0;if(Jq(d,f)|0?(eq(d,30)|0)!=1:0){r=_A(88)|0;p=a[v+11>>0]|0;l=p<<24>>24<0;m=l?c[v>>2]|0:v;p=l?c[v+4>>2]|0:p&255;c[r+4>>2]=0;c[r+8>>2]=0;l=r+12|0;c[l>>2]=c[o>>2];c[l+4>>2]=c[o+4>>2];c[l+8>>2]=c[o+8>>2];c[l+12>>2]=c[o+12>>2];c[l+16>>2]=c[o+16>>2];c[r+32>>2]=5;c[r>>2]=288924;Wn(r+40|0,m,p);o=r+56|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;b[o+16>>1]=0;p=((c[j+108>>2]|0)-(c[f>>2]|0)|0)/40|0;f=o;c[f>>2]=p;c[f+4>>2]=0;f=r+64|0;c[f>>2]=p;c[f+4>>2]=0;a[r+72>>0]=1;c[r+80>>2]=c[s>>2];c[n>>2]=r;yl(e,n);f=c[n>>2]|0;c[n>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);c[q>>2]=k;el(e,q);f=c[q>>2]|0;c[q>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);break}ma[c[(c[j>>2]|0)+4>>2]&255](j);f=1;break a}f=1;break a}while(0);g=((c[e+140>>2]|0)-(c[e+136>>2]|0)>>2)+-1|0;f=(c[e+36>>2]|0)+12|0;c[t>>2]=c[f>>2];c[t+4>>2]=c[f+4>>2];c[t+8>>2]=c[f+8>>2];c[t+12>>2]=c[f+12>>2];c[t+16>>2]=c[f+16>>2];f=c[u>>2]|0;if(f|0)do{El(s,g,t);Hl(f+52|0,s)|0;Ml(s);f=c[f+4>>2]|0}while((f|0)!=0);Al(e,u);f=(eq(d,30)|0)==1&1}while(0);g=c[u>>2]|0;if(g|0)do{u=g;g=c[g+4>>2]|0;ma[c[(c[u>>2]|0)+4>>2]&255](u)}while((g|0)!=0);if((a[v+11>>0]|0)<0)$A(c[v>>2]|0)}v=f;aa=w;return v|0}function kr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=aa;aa=aa+48|0;j=m;if((cq(a,0)|0)!=21){a=0;aa=m;return a|0}l=a+88|0;h=a+92|0;i=b+4|0;k=b+8|0;while(1){if((cq(a,1)|0)!=14){e=0;f=16;break}if((eq(a,21)|0)==1){e=1;f=16;break}if(!(c[l>>2]|0)){Sp(j,c[a>>2]|0,a);e=c[l>>2]|0;c[l>>2]=e+1;e=a+16+(((c[h>>2]|0)+e&1)*36|0)|0;f=j;g=e+36|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(g|0))}n=a+16+((c[h>>2]&1)*36|0)|0;g=_A(88)|0;c[g+4>>2]=0;f=g+8|0;c[f>>2]=0;e=g+12|0;c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];c[e+16>>2]=c[n+16>>2];c[g+32>>2]=3;c[g>>2]=288876;e=g+36|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(g+52|0,-1,j);c[g+48>>2]=d;if((eq(a,14)|0)==1){f=8;break}if((Nq(a,e)|0)==1){f=10;break}if((eq(a,30)|0)==1){f=12;break}e=c[i>>2]|0;if(!e)e=b;else{c[f>>2]=e;e=e+4|0}c[e>>2]=g;c[i>>2]=g;c[k>>2]=(c[k>>2]|0)+1;if((cq(a,0)|0)!=21){e=0;f=16;break}}if((f|0)==8){ma[c[(c[g>>2]|0)+4>>2]&255](g);n=1;aa=m;return n|0}else if((f|0)==10){ma[c[(c[g>>2]|0)+4>>2]&255](g);n=1;aa=m;return n|0}else if((f|0)==12){ma[c[(c[g>>2]|0)+4>>2]&255](g);n=1;aa=m;return n|0}else if((f|0)==16){aa=m;return e|0}return 0} +function lr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;g=i+4|0;h=i;if((((((c[b+80>>2]|0)-(c[b+76>>2]|0)>>2|0)==(c[b+48>>2]|0)?((c[b+140>>2]|0)-(c[b+136>>2]|0)>>2|0)==(c[b+52>>2]|0):0)?((c[b+164>>2]|0)-(c[b+160>>2]|0)>>2|0)==(c[b+56>>2]|0):0)?((c[b+92>>2]|0)-(c[b+88>>2]|0)>>2|0)==(c[b+60>>2]|0):0)?((c[b+68>>2]|0)-(c[b+64>>2]|0)>>2|0)==(c[b+44>>2]|0):0){aa=i;return}b=a+88|0;if(!(c[b>>2]|0)){Sp(g,c[a>>2]|0,a);d=c[b>>2]|0;c[b>>2]=d+1;b=a+92|0;d=a+16+(((c[b>>2]|0)+d&1)*36|0)|0;e=g;f=d+36|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0))}else b=a+92|0;f=a+16+((c[b>>2]&1)*36|0)|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];c[g+16>>2]=c[f+16>>2];aq(a,g,310644,h);aa=i;return}function mr(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+96|0;l=w+60|0;v=w+48|0;t=w+44|0;q=w+24|0;r=w;if((cq(b,0)|0)!=21){v=0;aa=w;return v|0}o=b+92|0;s=b+88|0;k=e+4|0;n=e+8|0;u=v+11|0;m=v+4|0;p=r+20|0;while(1){if((cq(b,1)|0)!=(d|0)){h=0;i=30;break}j=b+16+((c[o>>2]&1)*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;j=c[o>>2]&1^1;c[o>>2]=j;c[s>>2]=(c[s>>2]|0)+-1;j=b+16+(j*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[o>>2]=c[o>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((cq(b,0)|0)==110){c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;if(!(c[s>>2]|0)){Sp(l,c[b>>2]|0,b);h=c[s>>2]|0;c[s>>2]=h+1;h=b+16+(((c[o>>2]|0)+h&1)*36|0)|0;i=l;j=h+36|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0))}j=b+16+((c[o>>2]&1)*36|0)|0;c[q>>2]=c[j>>2];c[q+4>>2]=c[j+4>>2];c[q+8>>2]=c[j+8>>2];c[q+12>>2]=c[j+12>>2];c[q+16>>2]=c[j+16>>2];if((cq(b,0)|0)==110){j=c[o>>2]&1;h=b+16+(j*36|0)|0;i=c[b+16+(j*36|0)+24>>2]|0;j=c[b+16+(j*36|0)+28>>2]|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[o>>2]=c[o>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;Wn(l,i,j);if((a[u>>0]|0)<0){a[c[v>>2]>>0]=0;c[m>>2]=0}else{a[v>>0]=0;a[u>>0]=0}pB(v);c[v>>2]=c[l>>2];c[v+4>>2]=c[l+4>>2];c[v+8>>2]=c[l+8>>2]}if((Lq(b,t)|0)==1){i=14;break}h=((c[k>>2]|0)-(c[e>>2]|0)>>2)+g|0;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];c[r+16>>2]=c[q+16>>2];c[p>>2]=h;Og(l,f,v,r);Gg(f,c[l>>2]|0);h=c[k>>2]|0;if((h|0)==(c[n>>2]|0))fo(e,t);else{c[h>>2]=c[t>>2];c[k>>2]=h+4}if((a[u>>0]|0)<0)$A(c[v>>2]|0)}else if((cq(b,0)|0)==111)do{i=c[o>>2]&1;h=b+16+(i*36|0)|0;i=c[b+16+(i*36|0)+24>>2]|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[o>>2]=c[o>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;c[l>>2]=i;h=c[k>>2]|0;if(h>>>0<(c[n>>2]|0)>>>0){c[h>>2]=i;c[k>>2]=h+4}else yq(e,l)}while((cq(b,0)|0)==111);if((eq(b,30)|0)==1){h=1;i=30;break}if((cq(b,0)|0)!=21){h=0;i=30;break}}if((i|0)==14){if((a[u>>0]|0)<0)$A(c[v>>2]|0);v=1;aa=w;return v|0}else if((i|0)==30){aa=w;return h|0}return 0}function nr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;p=aa;aa=aa+96|0;h=p+60|0;l=p+48|0;e=p;if((cq(b,0)|0)==21?(cq(b,1)|0)==24:0){f=b+92|0;n=b+16+((c[f>>2]&1)*36|0)|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;n=c[f>>2]&1^1;c[f>>2]=n;g=b+88|0;c[g>>2]=(c[g>>2]|0)+-1;n=b+16+(n*36|0)|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[f>>2]=c[f>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1;a[d+16>>0]=1;if((Lq(b,d+12|0)|0)==1){o=1;aa=p;return o|0}j=e+4|0;c[j>>2]=0;c[j+4>>2]=50331648;a[e>>0]=a[330980]|0;a[e+1>>0]=a[330981]|0;a[e+2>>0]=a[330982]|0;a[e+3>>0]=0;j=e+12|0;k=e+16|0;c[k>>2]=0;c[k+4>>2]=50331648;a[j>>0]=a[330976]|0;a[j+1>>0]=a[330977]|0;a[j+2>>0]=a[330978]|0;a[j+3>>0]=0;k=e+24|0;r=e+28|0;c[r>>2]=0;c[r+4>>2]=50331648;a[k>>0]=a[330972]|0;a[k+1>>0]=a[330973]|0;a[k+2>>0]=a[330974]|0;a[k+3>>0]=0;r=e+36|0;m=e+40|0;c[m>>2]=0;c[m+4>>2]=50331648;a[r>>0]=a[330968]|0;a[r+1>>0]=a[330969]|0;a[r+2>>0]=a[330970]|0;a[r+3>>0]=0;m=l+4|0;n=_A(48)|0;c[l>>2]=n;q=n+48|0;c[l+8>>2]=q;cB(n,e);i=n+12|0;cB(i,j);j=n+24|0;cB(j,k);k=n+36|0;cB(k,r);c[m>>2]=q;if((cq(b,0)|0)==21){r=b+16+((c[f>>2]&1)*36|0)|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0;c[r+16>>2]=0;c[r+20>>2]=0;c[f>>2]=c[f>>2]&1^1;r=(c[g>>2]|0)+-1|0;c[g>>2]=r;if(!r){Sp(h,c[b>>2]|0,b);e=c[g>>2]|0;c[g>>2]=e+1;g=b+16+(((c[f>>2]|0)+e&1)*36|0)|0;e=h;f=g+36|0;do{c[g>>2]=c[e>>2];g=g+4|0;e=e+4|0}while((g|0)<(f|0))}gq(b,l,0);e=1}else e=0;if((a[n+47>>0]|0)<0)$A(c[k>>2]|0);if((a[n+35>>0]|0)<0)$A(c[j>>2]|0);if((a[n+23>>0]|0)<0)$A(c[i>>2]|0);if((a[n+11>>0]|0)<0)$A(c[n>>2]|0);c[m>>2]=n;$A(n);if(e){r=1;aa=p;return r|0}if((eq(b,30)|0)==1){r=1;aa=p;return r|0}}else o=12;if((o|0)==12?(Lq(b,d+12|0)|0)==1:0){r=1;aa=p;return r|0}r=0;aa=p;return r|0}function or(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+32|0;h=j+12|0;i=j;if((eq(b,21)|0)==1){aa=j;return 1}switch(cq(b,0)|0){case 15:{e=0;break}case 33:{e=1;break}case 22:{e=2;break}case 17:{e=3;break}case 13:{e=4;break}default:{g=_A(32)|0;c[i>>2]=g;c[i+8>>2]=-2147483616;c[i+4>>2]=16;e=g;d=310697;f=e+16|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));a[g+16>>0]=0;e=h+4|0;d=_A(12)|0;c[h>>2]=d;f=d+12|0;c[h+8>>2]=f;cB(d,i);c[e>>2]=f;gq(b,h,0);if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[e>>2]=d;$A(d);$A(g);aa=j;return 1}}c[d+12>>2]=e;i=b+92|0;h=b+16+((c[i>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[i>>2]=c[i>>2]&1^1;i=b+88|0;c[i>>2]=(c[i>>2]|0)+-1;if((hq(b,d+16|0)|0)==1){aa=j;return 1}else{b=(eq(b,30)|0)==1&1;aa=j;return b|0}return 0}function pr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b+12|0;if(c[j>>2]|0){h=b+8|0;e=c[h>>2]|0;if(e|0)do{f=e;e=c[e>>2]|0;g=f+8|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);$A(f)}while((e|0)!=0);c[h>>2]=0;e=c[b+4>>2]|0;if(e|0){f=0;do{c[(c[b>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)!=(e|0))}c[j>>2]=0}i=c[d>>2]|0;c[d>>2]=0;e=c[b>>2]|0;c[b>>2]=i;if(e|0)$A(e);i=d+4|0;f=b+4|0;c[f>>2]=c[i>>2];c[i>>2]=0;i=d+12|0;g=c[i>>2]|0;c[j>>2]=g;c[b+16>>2]=c[d+16>>2];d=d+8|0;e=c[d>>2]|0;h=b+8|0;c[h>>2]=e;if(!g)return;e=c[e+4>>2]|0;f=c[f>>2]|0;g=f+-1|0;if(g&f){if(e>>>0>=f>>>0)e=(e>>>0)%(f>>>0)|0}else e=g&e;c[(c[b>>2]|0)+(e<<2)>>2]=h;c[d>>2]=0;c[i>>2]=0;return}function qr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=aa;aa=aa+80|0;q=s+44|0;o=s+24|0;r=s+12|0;i=s;if((eq(b,21)|0)==1){r=1;aa=s;return r|0}g=b+88|0;if(!(c[g>>2]|0)){Sp(q,c[b>>2]|0,b);k=c[g>>2]|0;c[g>>2]=k+1;e=b+92|0;k=b+16+(((c[e>>2]|0)+k&1)*36|0)|0;f=q;l=k+36|0;do{c[k>>2]=c[f>>2];k=k+4|0;f=f+4|0}while((k|0)<(l|0))}else e=b+92|0;l=b+16+((c[e>>2]&1)*36|0)|0;c[o>>2]=c[l>>2];c[o+4>>2]=c[l+4>>2];c[o+8>>2]=c[l+8>>2];c[o+12>>2]=c[l+12>>2];c[o+16>>2]=c[l+16>>2];if((eq(b,23)|0)==1)e=1;else{c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;if((cq(b,0)|0)==110){k=b+92|0;e=c[k>>2]&1;j=b+16+(e*36|0)|0;l=c[b+16+(e*36|0)+24>>2]|0;e=c[b+16+(e*36|0)+28>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[k>>2]=c[k>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1;Wn(q,l,e);e=r+11|0;if((a[e>>0]|0)<0){a[c[r>>2]>>0]=0;c[r+4>>2]=0}else{a[r>>0]=0;a[e>>0]=0}pB(r);c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2]}a:do switch(cq(b,0)|0){case 9:{j=b+92|0;h=b+16+((c[j>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1;c[q>>2]=0;j=q+4|0;c[j>>2]=0;h=q+8|0;c[h>>2]=0;if(!(Hq(b,q)|0)){e=c[q>>2]|0;if(e|0){c[j>>2]=e;$A(e)}e=1;break a}i=_A(52)|0;c[i+4>>2]=1;c[i>>2]=290400;e=i+8|0;k=e;l=k+44|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));lB(i+28|0,r)|0;c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];g=i+40|0;e=c[g>>2]|0;if(!e){e=i+44|0;f=i+48|0}else{p=i+44|0;c[p>>2]=e;$A(e);f=i+48|0;c[f>>2]=0;c[p>>2]=0;c[g>>2]=0;e=p}c[g>>2]=c[q>>2];c[e>>2]=c[j>>2];c[f>>2]=c[h>>2];c[h>>2]=0;c[j>>2]=0;c[q>>2]=0;e=c[d>>2]|0;c[d>>2]=i;if(e|0?(ma[c[(c[e>>2]|0)+4>>2]&255](e),n=c[q>>2]|0,n|0):0){c[j>>2]=n;$A(n)}p=46;break}case 27:{j=b+92|0;h=b+16+((c[j>>2]&1)*36|0)|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1;c[q>>2]=0;j=q+4|0;c[j>>2]=0;h=q+8|0;c[h>>2]=0;if(!(Hq(b,q)|0)){e=c[q>>2]|0;if(e|0){c[j>>2]=e;$A(e)}e=1;break a}i=_A(52)|0;c[i+4>>2]=2;c[i>>2]=290420;e=i+8|0;k=e;l=k+44|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));lB(i+28|0,r)|0;c[e>>2]=c[o>>2];c[e+4>>2]=c[o+4>>2];c[e+8>>2]=c[o+8>>2];c[e+12>>2]=c[o+12>>2];c[e+16>>2]=c[o+16>>2];g=i+40|0;e=c[g>>2]|0;if(!e){e=i+44|0;f=i+48|0}else{p=i+44|0;c[p>>2]=e;$A(e);f=i+48|0;c[f>>2]=0;c[p>>2]=0;c[g>>2]=0;e=p}c[g>>2]=c[q>>2];c[e>>2]=c[j>>2];c[f>>2]=c[h>>2];c[h>>2]=0;c[j>>2]=0;c[q>>2]=0;e=c[d>>2]|0;c[d>>2]=i;if(e|0?(ma[c[(c[e>>2]|0)+4>>2]&255](e),m=c[q>>2]|0,m|0):0){c[j>>2]=m;$A(m)}p=46;break}default:{h=_A(384)|0;f=h;c[f>>2]=0;c[f+4>>2]=0;c[h>>2]=290440;f=h+8|0;uC(f|0,0,212)|0;c[h+220>>2]=1065353216;e=h+224|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+240>>2]=1065353216;e=h+244|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+260>>2]=1065353216;e=h+264|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+280>>2]=1065353216;e=h+284|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+300>>2]=1065353216;e=h+304|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+320>>2]=1065353216;e=h+324|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+340>>2]=1065353216;e=h+344|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+360>>2]=1065353216;e=h+364|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[h+380>>2]=1065353216;lB(h+28|0,r)|0;c[f>>2]=c[o>>2];c[f+4>>2]=c[o+4>>2];c[f+8>>2]=c[o+8>>2];c[f+12>>2]=c[o+12>>2];c[f+16>>2]=c[o+16>>2];o=cq(b,0)|0;e=cq(b,1)|0;b:do if((o|0)==21){switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break;default:{p=38;break b}}if((Rq(b,f)|0)==1){ma[c[(c[h>>2]|0)+4>>2]&255](h);e=1;break a}}else p=38;while(0);if((p|0)==38?(cq(b,0)|0)!=30:0){if((cq(b,0)|0)==21){d=b+92|0;o=b+16+((c[d>>2]&1)*36|0)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[d>>2]=c[d>>2]&1^1;c[g>>2]=(c[g>>2]|0)+-1}g=_A(16)|0;c[i>>2]=g;c[i+8>>2]=-2147483632;c[i+4>>2]=14;k=g;f=310570;l=k+14|0;do{a[k>>0]=a[f>>0]|0;k=k+1|0;f=f+1|0}while((k|0)<(l|0));a[g+14>>0]=0;e=q+4|0;f=_A(12)|0;c[q>>2]=f;d=f+12|0;c[q+8>>2]=d;cB(f,i);c[e>>2]=d;gq(b,q,0);if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[e>>2]=f;$A(f);$A(g);ma[c[(c[h>>2]|0)+4>>2]&255](h);e=1;break a}e=c[d>>2]|0;c[d>>2]=h;if(!e)p=46;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);p=46}}}while(0);if((p|0)==46)e=(eq(b,30)|0)==1&1;if((a[r+11>>0]|0)<0)$A(c[r>>2]|0)}r=e;aa=s;return r|0}function rr(a){a=a|0;c[a>>2]=290384;db(a+8|0);return}function sr(a){a=a|0;c[a>>2]=290384;db(a+8|0);$A(a);return}function tr(a){a=a|0;c[a>>2]=290440;db(a+8|0);return}function ur(a){a=a|0;c[a>>2]=290440;db(a+8|0);$A(a);return}function vr(a){a=a|0;return a+8|0}function wr(b){b=b|0;var d=0;c[b>>2]=290420;d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=b+28|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function xr(b){b=b|0;var d=0;c[b>>2]=290420;d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=b+28|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function yr(a){a=a|0;return a+8|0}function zr(b){b=b|0;var d=0;c[b>>2]=290400;d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=b+28|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ar(b){b=b|0;var d=0;c[b>>2]=290400;d=c[b+40>>2]|0;if(d|0){c[b+44>>2]=d;$A(d)}d=b+28|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Br(a){a=a|0;return a+8|0}function Cr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+64|0;l=p+24|0;m=p;o=_A(32)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;c[o+24>>2]=0;c[o+28>>2]=1065353216;n=o;j=cq(b,0)|0;e=cq(b,1)|0;a:do if((j|0)==21){switch(e|0){case 33:case 32:case 22:case 18:case 17:case 35:case 15:case 14:case 13:case 11:case 10:break;default:{k=15;break a}}h=_A(384)|0;i=h;c[i>>2]=0;c[i+4>>2]=0;c[h>>2]=290384;uC(h+8|0,0,212)|0;c[h+220>>2]=1065353216;i=h+224|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+240>>2]=1065353216;i=h+244|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+260>>2]=1065353216;i=h+264|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+280>>2]=1065353216;i=h+284|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+300>>2]=1065353216;i=h+304|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+320>>2]=1065353216;i=h+324|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+340>>2]=1065353216;i=h+344|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+360>>2]=1065353216;i=h+364|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[h+380>>2]=1065353216;i=h;c[m>>2]=i;e=b+88|0;if(!(c[e>>2]|0)){Sp(l,c[b>>2]|0,b);f=c[e>>2]|0;c[e>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=l;j=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(j|0));g=m}else{g=m;e=b+92|0}tC(h+8|0,b+16+((c[e>>2]&1)*36|0)|0,20)|0;if((Rq(b,h+8|0)|0)==1){e=c[g>>2]|0;c[g>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e);break}f=o+4|0;e=c[f>>2]|0;if(e>>>0>=(c[o+8>>2]|0)>>>0){Dr(o,m);e=c[g>>2]|0;c[g>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e)}else{c[e>>2]=i;c[f>>2]=e+4;c[g>>2]=0}k=23}else k=15;while(0);b:do if((k|0)==15){j=cq(b,0)|0;e=cq(b,1)|0;c:do if((j|0)==21){switch(e|0){case 28:case 23:case 19:case 16:case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 1:break;default:break c}if((Er(b,o,o)|0)==1)break b;else{k=23;break b}}while(0);if((cq(b,0)|0)==21){k=b+92|0;j=b+16+((c[k>>2]&1)*36|0)|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=0;c[k>>2]=c[k>>2]&1^1;k=b+88|0;c[k>>2]=(c[k>>2]|0)+-1}i=_A(16)|0;c[m>>2]=i;c[m+8>>2]=-2147483632;c[m+4>>2]=14;f=i;g=310570;j=f+14|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(j|0));a[i+14>>0]=0;h=m+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;a[h+11>>0]=9;f=h;g=311214;j=f+9|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(j|0));a[h+9>>0]=0;f=l+4|0;g=_A(24)|0;c[l>>2]=g;k=g+24|0;c[l+8>>2]=k;cB(g,m);e=g+12|0;cB(e,h);c[f>>2]=k;gq(b,l,0);if((a[g+23>>0]|0)<0)$A(c[e>>2]|0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);$A(i);k=23}while(0);if(((k|0)==23?(eq(b,12)|0)!=1:0)?(b=c[b+8>>2]|0,(c[b+4>>2]|0)==(c[b>>2]|0)):0){i=c[d>>2]|0;c[d>>2]=n;if(!i){o=0;aa=p;return o|0}e=c[i+20>>2]|0;if(e|0)do{f=e;e=c[e>>2]|0;g=f+8|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);$A(f)}while((e|0)!=0);o=i+12|0;e=c[o>>2]|0;c[o>>2]=0;if(e|0)$A(e);g=c[i>>2]|0;if(g|0){h=i+4|0;e=c[h>>2]|0;if((e|0)==(g|0))e=g;else{do{e=e+-4|0;f=c[e>>2]|0;c[e>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((e|0)!=(g|0));e=c[i>>2]|0}c[h>>2]=g;$A(e)}$A(i);o=0;aa=p;return o|0}e=c[o+20>>2]|0;if(e|0)do{f=e;e=c[e>>2]|0;g=f+8|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);$A(f)}while((e|0)!=0);d=o+12|0;e=c[d>>2]|0;c[d>>2]=0;if(e|0)$A(e);g=c[o>>2]|0;if(g|0){h=o+4|0;e=c[h>>2]|0;if((e|0)==(g|0))e=g;else{do{e=e+-4|0;f=c[e>>2]|0;c[e>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((e|0)!=(g|0));e=c[o>>2]|0}c[h>>2]=g;$A(e)}$A(o);o=1;aa=p;return o|0}function Dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+4|0;d=c[a>>2]|0;j=(c[k>>2]|0)-d>>2;e=j+1|0;if(e>>>0>1073741823)HB();l=a+8|0;h=(c[l>>2]|0)-d|0;d=h>>1;d=h>>2>>>0<536870911?(d>>>0<e>>>0?e:d):1073741823;do if(d)if(d>>>0>1073741823)U();else{i=_A(d<<2)|0;break}else i=0;while(0);e=i+(j<<2)|0;h=i+(d<<2)|0;g=c[b>>2]|0;c[b>>2]=0;c[e>>2]=g;g=e+4|0;d=c[a>>2]|0;f=d;b=c[k>>2]|0;if((b|0)!=(d|0)){f=(b+-4-f|0)>>>2;do{e=e+-4|0;b=b+-4|0;m=c[b>>2]|0;c[b>>2]=0;c[e>>2]=m}while((b|0)!=(d|0));e=i+(j+-1-f<<2)|0;f=c[a>>2]|0;d=c[k>>2]|0}c[a>>2]=e;c[k>>2]=g;c[l>>2]=h;b=f;if((d|0)!=(b|0))do{d=d+-4|0;e=c[d>>2]|0;c[d>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e)}while((d|0)!=(b|0));if(!f)return;$A(f);return}function Er(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=aa;aa=aa+96|0;p=x+76|0;v=x;t=x+40|0;o=x+20|0;r=x+8|0;w=x+4|0;u=cq(b,0)|0;f=cq(b,1)|0;if((u|0)!=21){w=0;aa=x;return w|0}l=e+4|0;n=e+8|0;q=b+92|0;s=b+88|0;u=t+20|0;m=r+11|0;a:while(1){switch(f|0){case 28:case 23:case 19:case 16:case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 1:break;default:{f=0;g=23;break a}}c[w>>2]=0;do if(!(Fr(b,d,w)|0)){f=c[l>>2]|0;if(f>>>0<(c[n>>2]|0)>>>0){c[f>>2]=c[w>>2];c[l>>2]=f+4;c[w>>2]=0;break}else{Gr(e,w);g=20;break}}else{j=0;b:while(1){i=cq(b,0)|0;f=cq(b,1)|0;if((i|0)==21)switch(f|0){case 28:case 23:case 19:case 16:case 8:case 7:case 6:case 5:case 4:case 3:case 2:case 1:break b;default:{}}f=b+16+((c[q>>2]&1)*36|0)|0;g=t;h=f;i=g+36|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[q>>2]=c[q>>2]&1^1;c[s>>2]=(c[s>>2]|0)+-1;if((c[u>>2]|0)==108?(c[o>>2]=c[t>>2],c[o+4>>2]=c[t+4>>2],c[o+8>>2]=c[t+8>>2],c[o+12>>2]=c[t+12>>2],c[o+16>>2]=c[t+16>>2],qy(r,t),c[v>>2]=(a[m>>0]|0)<0?c[r>>2]|0:r,c[p>>2]=c[o>>2],c[p+4>>2]=c[o+4>>2],c[p+8>>2]=c[o+8>>2],c[p+12>>2]=c[o+12>>2],c[p+16>>2]=c[o+16>>2],aq(b,p,309788,v),(a[m>>0]|0)<0):0)$A(c[r>>2]|0);j=j+1|0;if(j>>>0>=10){g=17;break a}}g=20}while(0);if((g|0)==20?(g=0,k=c[w>>2]|0,c[w>>2]=0,k|0):0)ma[c[(c[k>>2]|0)+4>>2]&255](k);j=cq(b,0)|0;f=cq(b,1)|0;if((j|0)!=21){f=0;g=23;break}}if((g|0)==17){f=c[w>>2]|0;c[w>>2]=0;if(f|0)ma[c[(c[f>>2]|0)+4>>2]&255](f);w=1;aa=x;return w|0}else if((g|0)==23){aa=x;return f|0}return 0}function Fr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;do switch(cq(a,1)|0){case 1:{d=Hr(a,d)|0;return d|0}case 2:{d=Ir(a,d)|0;return d|0}case 3:{d=Jr(a,d)|0;return d|0}case 4:{d=Kr(a,d)|0;return d|0}case 5:{d=Lr(a,d)|0;return d|0}case 6:{d=Mr(a,d)|0;return d|0}case 7:{d=Nr(a,d)|0;return d|0}case 8:{d=Or(a,d)|0;return d|0}case 19:case 16:{e=_A(12)|0;c[e+4>>2]=1;c[e>>2]=290460;b=e+8|0;c[b>>2]=0;if((Pr(a,b)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);d=1;return d|0}b=c[d>>2]|0;c[d>>2]=e;if(!b){d=0;return d|0}ma[c[(c[b>>2]|0)+4>>2]&255](b);d=0;return d|0}case 23:{d=Pq(a,b,d)|0;return d|0}case 28:{d=Qr(a,d)|0;return d|0}default:{d=1;return d|0}}while(0);return 0}function Gr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+4|0;d=c[a>>2]|0;j=(c[k>>2]|0)-d>>2;e=j+1|0;if(e>>>0>1073741823)HB();l=a+8|0;h=(c[l>>2]|0)-d|0;d=h>>1;d=h>>2>>>0<536870911?(d>>>0<e>>>0?e:d):1073741823;do if(d)if(d>>>0>1073741823)U();else{i=_A(d<<2)|0;break}else i=0;while(0);e=i+(j<<2)|0;h=i+(d<<2)|0;g=c[b>>2]|0;c[b>>2]=0;c[e>>2]=g;g=e+4|0;d=c[a>>2]|0;f=d;b=c[k>>2]|0;if((b|0)!=(d|0)){f=(b+-4-f|0)>>>2;do{e=e+-4|0;b=b+-4|0;m=c[b>>2]|0;c[b>>2]=0;c[e>>2]=m}while((b|0)!=(d|0));e=i+(j+-1-f<<2)|0;f=c[a>>2]|0;d=c[k>>2]|0}c[a>>2]=e;c[k>>2]=g;c[l>>2]=h;b=f;if((d|0)!=(b|0))do{d=d+-4|0;e=c[d>>2]|0;c[d>>2]=0;if(e|0)ma[c[(c[e>>2]|0)+4>>2]&255](e)}while((d|0)!=(b|0));if(!f)return;$A(f);return}function Hr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,1)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=11;c[d>>2]=290668;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((Pr(a,e)|0)!=1?(Nq(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Ir(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,2)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=4;c[d>>2]=290652;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((qr(a,e)|0)!=1?(Nq(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Jr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,3)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=3;c[d>>2]=290636;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((qr(a,e)|0)!=1?(Nq(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Kr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,4)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=7;c[d>>2]=290620;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((Pr(a,e)|0)!=1?(Tr(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Lr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,5)|0)==1){b=1;return b|0}d=_A(12)|0;c[d+4>>2]=9;c[d>>2]=290604;e=d+8|0;c[e>>2]=0;if((Pr(a,e)|0)!=1?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Mr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,6)|0)==1){b=1;return b|0}d=_A(12)|0;c[d+4>>2]=8;c[d>>2]=290588;e=d+8|0;c[e>>2]=0;if((Pr(a,e)|0)!=1?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Nr(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1)return 1;if((eq(a,7)|0)==1)return 1;if((cq(a,0)|0)==21?(cq(a,1)|0)==23:0){e=_A(24)|0;c[e+4>>2]=6;c[e>>2]=290556;d=e+8|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;if((qr(a,d)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);return 1}if((Nq(a,e+12|0)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);return 1}d=c[b>>2]|0;c[b>>2]=e;if(!d){a=eq(a,30)|0;a=(a|0)==1;a=a&1;return a|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);a=eq(a,30)|0;a=(a|0)==1;a=a&1;return a|0}e=_A(24)|0;c[e+4>>2]=10;c[e>>2]=290572;d=e+8|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;if((Pr(a,d)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);return 1}if((Nq(a,e+12|0)|0)==1){ma[c[(c[e>>2]|0)+4>>2]&255](e);return 1}d=c[b>>2]|0;c[b>>2]=e;if(!d){a=eq(a,30)|0;a=(a|0)==1;a=a&1;return a|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);a=eq(a,30)|0;a=(a|0)==1;a=a&1;return a|0}function Or(a,b){a=a|0;b=b|0;var d=0,e=0;if((eq(a,21)|0)==1){b=1;return b|0}if((eq(a,8)|0)==1){b=1;return b|0}d=_A(24)|0;c[d+4>>2]=5;c[d>>2]=290540;e=d+8|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;if(((qr(a,e)|0)!=1?(Nq(a,d+12|0)|0)!=1:0)?(eq(a,30)|0)!=1:0){a=c[b>>2]|0;c[b>>2]=d;if(!a){e=0;return e|0}ma[c[(c[a>>2]|0)+4>>2]&255](a);e=0;return e|0}ma[c[(c[d>>2]|0)+4>>2]&255](d);e=1;return e|0}function Pr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+160|0;n=p+116|0;m=p+24|0;l=p+80|0;k=p+44|0;j=p;if((eq(b,21)|0)==1){b=1;aa=p;return b|0}i=b+88|0;if(!(c[i>>2]|0)){Sp(n,c[b>>2]|0,b);f=c[i>>2]|0;c[i>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=n;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;h=b+16+((c[e>>2]&1)*36|0)|0;c[m>>2]=c[h>>2];c[m+4>>2]=c[h+4>>2];c[m+8>>2]=c[h+8>>2];c[m+12>>2]=c[h+12>>2];c[m+16>>2]=c[h+16>>2];a:do switch(cq(b,0)|0){case 19:{h=b+92|0;g=b+16+((c[h>>2]&1)*36|0)|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;c[h>>2]=c[h>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;h=_A(88)|0;c[h>>2]=290492;g=h+4|0;c[g>>2]=c[m>>2];c[g+4>>2]=c[m+4>>2];c[g+8>>2]=c[m+8>>2];c[g+12>>2]=c[m+12>>2];c[g+16>>2]=c[m+16>>2];g=h+24|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;El(g,-1,n);f=h+60|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[h>>2]=290508;e=h+76|0;c[e>>2]=0;c[h+80>>2]=0;c[h+84>>2]=0;El(l,c[b+4>>2]|0,m);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(g,l)|0;else hq(b,g)|0;Ml(l);if((Nq(b,f)|0)==1){ma[c[(c[h>>2]|0)+4>>2]&255](h);e=1;break a}if((Tr(b,e)|0)==1){ma[c[(c[h>>2]|0)+4>>2]&255](h);e=1;break a}e=c[d>>2]|0;c[d>>2]=h;if(!e)o=27;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);o=27}break}case 16:{g=b+92|0;f=b+16+((c[g>>2]&1)*36|0)|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[g>>2]=c[g>>2]&1^1;c[i>>2]=(c[i>>2]|0)+-1;g=_A(76)|0;c[g>>2]=290492;f=g+4|0;c[f>>2]=c[m>>2];c[f+4>>2]=c[m+4>>2];c[f+8>>2]=c[m+8>>2];c[f+12>>2]=c[m+12>>2];c[f+16>>2]=c[m+16>>2];f=g+24|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;El(f,-1,n);e=g+60|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[g+72>>2]=1;c[g>>2]=290524;El(k,c[b+4>>2]|0,m);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(f,k)|0;else hq(b,f)|0;Ml(k);if((Nq(b,e)|0)==1){ma[c[(c[g>>2]|0)+4>>2]&255](g);e=1;break a}e=c[d>>2]|0;c[d>>2]=g;if(!e)o=27;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);o=27}break}default:{c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;a[j+11>>0]=6;a[j>>0]=a[330268]|0;a[j+1>>0]=a[330269]|0;a[j+2>>0]=a[330270]|0;a[j+3>>0]=a[330271]|0;a[j+4>>0]=a[330272]|0;a[j+5>>0]=a[330273]|0;a[j+6>>0]=0;m=j+12|0;f=j+16|0;c[f>>2]=0;c[f+4>>2]=50331648;a[m>>0]=a[330250]|0;a[m+1>>0]=a[330251]|0;a[m+2>>0]=a[330252]|0;a[m+3>>0]=0;f=n+4|0;g=_A(24)|0;c[n>>2]=g;d=g+24|0;c[n+8>>2]=d;cB(g,j);e=g+12|0;cB(e,m);c[f>>2]=d;gq(b,n,0);if((a[g+23>>0]|0)<0)$A(c[e>>2]|0);if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;$A(g);e=1}}while(0);if((o|0)==27)e=(eq(b,30)|0)==1&1;b=e;aa=p;return b|0}function Qr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+160|0;l=n+112|0;j=n+92|0;m=n+56|0;k=n;i=n+20|0;if((eq(b,21)|0)==1){m=1;aa=n;return m|0}e=b+88|0;if(!(c[e>>2]|0)){Sp(l,c[b>>2]|0,b);f=c[e>>2]|0;c[e>>2]=f+1;e=b+92|0;f=b+16+(((c[e>>2]|0)+f&1)*36|0)|0;g=l;h=f+36|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0))}else e=b+92|0;h=b+16+((c[e>>2]&1)*36|0)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];c[j+16>>2]=c[h+16>>2];if((eq(b,28)|0)==1)e=1;else{c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;El(m,-1,k);if((Nq(b,l)|0)!=1){El(i,c[b+4>>2]|0,j);if((cq(b,0)|0)!=44?(cq(b,0)|0)!=110:0)Jl(m,i)|0;else hq(b,m)|0;Ml(i);if((eq(b,30)|0)!=1){b=_A(56)|0;e=a[l+11>>0]|0;j=e<<24>>24<0;k=j?c[l>>2]|0:l;e=j?c[l+4>>2]|0:e&255;c[b+4>>2]=2;c[b>>2]=290476;Vn(b+8|0,k,e);Il(b+20|0,m);e=c[d>>2]|0;c[d>>2]=b;if(!e)e=0;else{ma[c[(c[e>>2]|0)+4>>2]&255](e);e=0}}else e=1}else e=1;Ml(m);if((a[l+11>>0]|0)<0)$A(c[l>>2]|0)}m=e;aa=n;return m|0}function Rr(b){b=b|0;c[b>>2]=290476;Ml(b+20|0);b=b+8|0;if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Sr(b){b=b|0;var d=0;c[b>>2]=290476;Ml(b+20|0);d=b+8|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Tr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;k=m+40|0;i=m;if((cq(a,0)|0)!=21){a=0;aa=m;return a|0}j=a+92|0;l=a+88|0;g=b+4|0;h=b+8|0;while(1){if((cq(a,1)|0)!=61){d=0;e=12;break}f=a+16+((c[j>>2]&1)*36|0)|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[j>>2]=c[j>>2]&1^1;c[l>>2]=(c[l>>2]|0)+-1;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;Nl(i,0,k);if((Dq(a,i)|0)==1){e=5;break}if((eq(a,30)|0)==1){e=7;break}d=c[g>>2]|0;if((d|0)==(c[h>>2]|0))Wr(b,i);else{e=i;f=d+40|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));c[g>>2]=(c[g>>2]|0)+40}if((cq(a,0)|0)!=21){d=0;e=12;break}}if((e|0)==5){a=1;aa=m;return a|0}else if((e|0)==7){a=1;aa=m;return a|0}else if((e|0)==12){aa=m;return d|0}return 0}function Ur(b){b=b|0;var d=0;c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);Ml(b+24|0);return}function Vr(b){b=b|0;var d=0;c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);Ml(b+24|0);$A(b);return}function Wr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=a+4|0;i=c[a>>2]|0;l=(c[j>>2]|0)-i|0;e=(l|0)/40|0;d=e+1|0;if(d>>>0>107374182)HB();k=a+8|0;g=((c[k>>2]|0)-i|0)/40|0;h=g<<1;d=g>>>0<53687091?(h>>>0<d>>>0?d:h):107374182;do if(d)if(d>>>0>107374182)U();else{f=_A(d*40|0)|0;break}else f=0;while(0);h=f+(e*40|0)|0;g=f+(d*40|0)|0;f=h;d=b;e=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(e|0));d=h+(((l|0)/-40|0)*40|0)|0;if((l|0)>0)sC(d|0,i|0,l|0)|0;c[a>>2]=d;c[j>>2]=h+40;c[k>>2]=g;if(!i)return;$A(i);return}function Xr(b){b=b|0;var d=0;c[b>>2]=290508;d=c[b+76>>2]|0;if(d|0){c[b+80>>2]=d;$A(d)}c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)>=0){b=b+24|0;Ml(b);return}$A(c[d>>2]|0);b=b+24|0;Ml(b);return}function Yr(b){b=b|0;var d=0;c[b>>2]=290508;d=c[b+76>>2]|0;if(d|0){c[b+80>>2]=d;$A(d)}c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)>=0){d=b+24|0;Ml(d);$A(b);return}$A(c[d>>2]|0);d=b+24|0;Ml(d);$A(b);return}function Zr(b){b=b|0;var d=0;c[b>>2]=290492;d=b+60|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);Ml(b+24|0);$A(b);return}function _r(a){a=a|0;var b=0;c[a>>2]=290460;b=a+8|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;ma[c[(c[a>>2]|0)+4>>2]&255](a);return}function $r(a){a=a|0;var b=0,d=0;c[a>>2]=290460;d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function as(b){b=b|0;var d=0;c[b>>2]=290540;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function bs(b){b=b|0;var d=0,e=0;c[b>>2]=290540;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function cs(b){b=b|0;var d=0;c[b>>2]=290572;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function ds(b){b=b|0;var d=0,e=0;c[b>>2]=290572;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function es(b){b=b|0;var d=0;c[b>>2]=290556;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function fs(b){b=b|0;var d=0,e=0;c[b>>2]=290556;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function gs(a){a=a|0;var b=0;c[a>>2]=290588;b=a+8|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;ma[c[(c[a>>2]|0)+4>>2]&255](a);return}function hs(a){a=a|0;var b=0,d=0;c[a>>2]=290588;d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function is(a){a=a|0;var b=0;c[a>>2]=290604;b=a+8|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;ma[c[(c[a>>2]|0)+4>>2]&255](a);return}function js(a){a=a|0;var b=0,d=0;c[a>>2]=290604;d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function ks(a){a=a|0;var b=0;c[a>>2]=290620;b=c[a+12>>2]|0;if(b|0){c[a+16>>2]=b;$A(b)}a=a+8|0;b=c[a>>2]|0;c[a>>2]=0;if(!b)return;ma[c[(c[b>>2]|0)+4>>2]&255](b);return}function ls(a){a=a|0;var b=0,d=0;c[a>>2]=290620;b=c[a+12>>2]|0;if(b|0){c[a+16>>2]=b;$A(b)}d=a+8|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function ms(b){b=b|0;var d=0;c[b>>2]=290636;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function ns(b){b=b|0;var d=0,e=0;c[b>>2]=290636;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function os(b){b=b|0;var d=0;c[b>>2]=290652;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function ps(b){b=b|0;var d=0,e=0;c[b>>2]=290652;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function qs(b){b=b|0;var d=0;c[b>>2]=290668;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);b=b+8|0;d=c[b>>2]|0;c[b>>2]=0;if(!d)return;ma[c[(c[d>>2]|0)+4>>2]&255](d);return}function rs(b){b=b|0;var d=0,e=0;c[b>>2]=290668;d=b+12|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;if(!d){$A(b);return}ma[c[(c[d>>2]|0)+4>>2]&255](d);$A(b);return}function ss(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=aa;aa=aa+96|0;g=h;c[g>>2]=a;c[g+4>>2]=-1;c[g+8>>2]=d;c[g+12>>2]=e;f=g+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;f=g+52|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;f=g+88|0;c[f>>2]=0;e=g+92|0;c[e>>2]=0;a=Oq(g,b)|0;d=c[f>>2]|0;if(!d){aa=h;return a|0}do{b=g+16+((d+1+(c[e>>2]|0)&1)*36|0)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d}while((d|0)!=0);aa=h;return a|0}function ts(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=aa;aa=aa+96|0;g=h;c[g>>2]=a;c[g+4>>2]=-1;c[g+8>>2]=d;c[g+12>>2]=e;f=g+16|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;f=g+52|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;f=g+88|0;c[f>>2]=0;e=g+92|0;c[e>>2]=0;a=Cr(g,b)|0;d=c[f>>2]|0;if(!d){aa=h;return a|0}do{b=g+16+((d+1+(c[e>>2]|0)&1)*36|0)|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d}while((d|0)!=0);aa=h;return a|0}function us(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;ta=aa;aa=aa+352|0;la=ta+112|0;ka=ta+104|0;ja=ta+96|0;ia=ta+88|0;ha=ta+80|0;ga=ta+72|0;fa=ta+64|0;ea=ta+56|0;da=ta+48|0;ca=ta+40|0;oa=ta+32|0;na=ta+24|0;ma=ta+16|0;ba=ta+8|0;$=ta;W=ta+328|0;pa=ta+288|0;X=ta+272|0;sa=ta+116|0;c[sa>>2]=e;Y=sa+4|0;V=sa+8|0;c[V>>2]=0;Z=sa+12|0;c[Z>>2]=b;S=sa+16|0;m=sa+56|0;c[m>>2]=0;n=sa+60|0;c[n>>2]=0;ra=sa+56|0;b=sa+52|0;f=S;h=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[b>>2]=ra;f=sa+64|0;h=f+92|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[Y>>2]=d;if((a[e+1>>0]|0)!=0?(i=c[d+112>>2]|0,o=c[d+116>>2]|0,(i|0)!=(o|0)):0){l=sa+52|0;do{h=c[i>>2]|0;if(!(a[e+2>>0]|0)){b=h;f=c[b+12>>2]|0;if(!(Mk(c[Y>>2]|0,f,b+16|0)|0)){k=f;qa=7}}else{k=h;b=k;k=c[k+12>>2]|0;qa=7}a:do if((qa|0)==7){qa=0;switch(k|0){case 0:{j=Ek(c[Y>>2]|0,b+16|0)|0;break}case 1:{j=Gk(c[Y>>2]|0,b+16|0)|0;break}case 2:{j=Hk(c[Y>>2]|0,b+16|0)|0;break}case 3:{j=Fk(c[Y>>2]|0,b+16|0)|0;break}case 4:{j=Jk(c[Y>>2]|0,b+16|0)|0;break}default:break a}if((j|0)!=-1){e=_A(28)|0;b=e+16|0;c[b>>2]=k;c[b+4>>2]=j;c[e+24>>2]=h;b=c[ra>>2]|0;do if(b){b:while(1){f=c[b+16>>2]|0;do if((f|0)<=(k|0)){if((f|0)>=(k|0)?(c[b+20>>2]|0)>>>0>j>>>0:0){qa=19;break}f=b+4|0;h=c[f>>2]|0;if(!h){qa=22;break b}else b=h}else qa=19;while(0);if((qa|0)==19){qa=0;f=c[b>>2]|0;if(!f){qa=20;break}else b=f}}if((qa|0)==20){qa=0;h=b;f=b;break}else if((qa|0)==22){qa=0;h=b;break}}else{h=ra;f=ra}while(0);c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=h;c[f>>2]=e;b=c[c[l>>2]>>2]|0;if(b){c[l>>2]=b;e=c[f>>2]|0}vs(c[m>>2]|0,e);c[n>>2]=(c[n>>2]|0)+1;e=c[sa>>2]|0}}while(0);i=i+4|0}while((i|0)!=(o|0))}if(a[e+2>>0]|0?(p=c[Y>>2]|0,g=c[p+100>>2]|0,p=c[p+104>>2]|0,(g|0)!=(p|0)):0)do{e=c[g>>2]|0;c[W>>2]=e;b=c[e+28>>2]|0;h=sa+64+(b*12|0)+4|0;f=c[h>>2]|0;if((f|0)==(c[sa+64+(b*12|0)+8>>2]|0))ws(sa+64+(b*12|0)|0,W);else{c[f>>2]=e;c[h>>2]=(c[h>>2]|0)+4}g=g+4|0}while((g|0)!=(p|0));xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);R=sa+24|0;c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330290,6,0,0);c[R>>2]=1;Q=sa+20|0;c[Q>>2]=(c[Q>>2]|0)+2;b=d+20|0;e=a[b+11>>0]|0;f=e<<24>>24<0;e=f?c[d+24>>2]|0:e&255;if(!e)c[R>>2]=2;else ys(sa,f?c[b>>2]|0:b,e,2);e=c[d+32>>2]|0;c:do if(e|0){y=X+4|0;F=X+8|0;O=sa+132|0;K=sa+152|0;J=sa+148|0;M=sa+140|0;N=sa+28|0;A=sa+32|0;G=sa+36|0;E=W+11|0;P=W+4|0;u=pa+28|0;v=pa+16|0;x=pa+32|0;L=sa+40|0;C=W+4|0;I=W+8|0;D=sa+44|0;H=sa+48|0;w=pa+4|0;z=pa+20|0;B=pa+8|0;d:while(1){e:do switch(c[e+32>>2]|0){case 0:{s=e;t=s+36|0;zs(sa,t);c[X>>2]=0;c[y>>2]=0;c[F>>2]=0;q=s+88|0;d=s+92|0;n=s+112|0;o=s+116|0;Cl(((c[d>>2]|0)-(c[q>>2]|0)>>2)+(Ok(c[n>>2]|0,c[o>>2]|0)|0)|0,s+124|0,X);b=c[s+88>>2]|0;m=c[d>>2]|0;if((b|0)!=(m|0)){l=c[X>>2]|0;k=0;f=0;while(1){j=c[b>>2]|0;if(!f){xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330308,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2}h=l+(k*12|0)|0;g=h+11|0;f=a[g>>0]|0;i=f<<24>>24<0;if(i)f=c[l+(k*12|0)+4>>2]|0;else f=f&255;if(f|0){p=i?c[h>>2]|0:h;r=Uz(p)|0;xs(sa);Qn(c[Z>>2]|0,p,r,0,0);c[R>>2]=1}As(sa,j,1);f=a[g>>0]|0;if(f<<24>>24<0)f=c[l+(k*12|0)+4>>2]|0;else f=f&255;if(!f)f=1;else{if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;f=0}b=b+4|0;if((b|0)==(m|0))break;else k=k+1|0}if(f){if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1}}r=s+100|0;Bs(sa,r,330329);if((c[R>>2]|0)==3)xs(sa);c[R>>2]=2;f=c[n>>2]|0;p=c[o>>2]|0;b=f;do if(Ok(f,p)|0?(_=(c[d>>2]|0)-(c[q>>2]|0)>>2,(p|0)!=(f|0)):0){o=c[X>>2]|0;n=f;l=0;m=0;f=0;while(1){j=c[n>>2]|0;if(!f){xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330275,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2}k=m+_|0;h=o+(k*12|0)|0;g=h+11|0;f=a[g>>0]|0;i=f<<24>>24<0;if(i)f=c[o+(k*12|0)+4>>2]|0;else f=f&255;if(f|0){d=i?c[h>>2]|0:h;q=Uz(d)|0;xs(sa);Qn(c[Z>>2]|0,d,q,0,0);c[R>>2]=1}As(sa,j,1);f=a[g>>0]|0;if(f<<24>>24<0)f=c[o+(k*12|0)+4>>2]|0;else f=f&255;if(!f)f=1;else{if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;f=0}q=l+1|0;d=q>>>0<(c[n+4>>2]|0)>>>0;b=d?b:n+8|0;l=d?q:0;n=b;if(!((l|0)!=0|(p|0)!=(n|0)))break;else m=m+1|0}b=c[R>>2]|0;if(!f){if((b|0)!=3)break;xs(sa);break}if((b|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1}while(0);c[R>>2]=2;h=c[N>>2]|0;b=c[A>>2]|0;if((b|0)!=(h|0))do{f=c[b+-12>>2]|0;if(f|0){c[b+-8>>2]=f;$A(f)}f=c[b+-24>>2]|0;if(f|0){c[b+-20>>2]=f;$A(f)}b=b+-40|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0)}while((b|0)!=(h|0));c[A>>2]=h;c[W>>2]=0;c[W+4>>2]=0;c[W+8>>2]=0;q=c[G>>2]|0;f=q;if(h>>>0>=q>>>0){g=c[N>>2]|0;h=(h-g|0)/40|0;b=h+1|0;if(b>>>0>107374182){qa=107;break d}d=(f-g|0)/40|0;q=d<<1;b=d>>>0<53687091?(q>>>0<b>>>0?b:q):107374182;if(!b)g=0;else{if(b>>>0>107374182){qa=110;break d}g=_A(b*40|0)|0}f=g+(h*40|0)|0;m=g+(b*40|0)|0;cB(f,W);b=g+(h*40|0)+12|0;l=g+(h*40|0)+28|0;k=g+(h*40|0)+32|0;j=g+(h*40|0)+36|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;b=c[r>>2]|0;i=(c[s+104>>2]|0)-b|0;h=i>>2;if(i|0){if(h>>>0>1073741823){qa=114;break d}g=_A(i)|0;c[k>>2]=g;c[l>>2]=g;c[j>>2]=g+(h<<2);if((i|0)>0){sC(g|0,b|0,i|0)|0;c[k>>2]=g+(i>>>2<<2)}}h=f+40|0;g=c[N>>2]|0;b=c[A>>2]|0;if((b|0)==(g|0)){b=f;i=g;f=g}else{do{p=f;f=f+-40|0;d=b;b=b+-40|0;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[p+-28>>2]=c[d+-28>>2];r=p+-24|0;q=d+-24|0;c[r>>2]=0;o=p+-20|0;c[o>>2]=0;n=p+-16|0;c[n>>2]=0;c[r>>2]=c[q>>2];r=d+-20|0;c[o>>2]=c[r>>2];o=d+-16|0;c[n>>2]=c[o>>2];c[o>>2]=0;c[r>>2]=0;c[q>>2]=0;q=p+-12|0;r=d+-12|0;c[q>>2]=0;o=p+-8|0;c[o>>2]=0;p=p+-4|0;c[p>>2]=0;c[q>>2]=c[r>>2];q=d+-8|0;c[o>>2]=c[q>>2];d=d+-4|0;c[p>>2]=c[d>>2];c[d>>2]=0;c[q>>2]=0;c[r>>2]=0}while((b|0)!=(g|0));b=f;i=c[N>>2]|0;f=c[A>>2]|0}c[N>>2]=b;c[A>>2]=h;c[G>>2]=m;g=i;if((f|0)!=(g|0))do{b=c[f+-12>>2]|0;if(b|0){c[f+-8>>2]=b;$A(b)}b=c[f+-24>>2]|0;if(b|0){c[f+-20>>2]=b;$A(b)}f=f+-40|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((f|0)!=(g|0));if(i|0)$A(i)}else{cB(h,W);b=h+12|0;j=h+28|0;k=h+32|0;f=h+36|0;h=s+104|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;c[b+20>>2]=0;c[b+24>>2]=0;b=(c[h>>2]|0)-(c[r>>2]|0)|0;g=b>>2;if(b|0){if(g>>>0>1073741823){qa=102;break d}i=_A(b)|0;c[k>>2]=i;c[j>>2]=i;c[f>>2]=i+(g<<2);f=c[r>>2]|0;b=(c[h>>2]|0)-f|0;if((b|0)>0){sC(i|0,f|0,b|0)|0;c[k>>2]=i+(b>>>2<<2)}}c[A>>2]=(c[A>>2]|0)+40}if((a[E>>0]|0)<0)$A(c[W>>2]|0);c[V>>2]=t;b=s+144|0;if(!(a[c[sa>>2]>>0]|0)){c[W>>2]=290684;c[P>>2]=sa;Jj(pa,W);Qj(pa,b)|0;b=c[u>>2]|0;if(b|0){c[x>>2]=b;$A(b)}b=c[v>>2]|0;if(b|0){c[z>>2]=b;$A(b)}b=c[w>>2]|0;if(b|0){c[B>>2]=b;$A(b)}}else{b=c[b>>2]|0;if(b|0)do{Cs(sa,b);b=c[b+4>>2]|0}while((b|0)!=0);t=c[L>>2]|0;c[W>>2]=t;s=c[D>>2]|0;c[C>>2]=s;c[I>>2]=c[H>>2];b=t;c[L>>2]=0;c[L+4>>2]=0;c[L+8>>2]=0;Ds(sa,b,s);if(t|0){Es(W,b);$A(c[W>>2]|0)}}c[V>>2]=0;if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;f=c[X>>2]|0;if(f|0){b=c[y>>2]|0;if((b|0)!=(f|0))do{b=b+-12|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0)}while((b|0)!=(f|0));c[y>>2]=f;$A(f)}break}case 1:{t=e;Fs(sa,t+36|0);Gs(sa,t+56|0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;break}case 2:{h=c[e+36>>2]|0;if(!(a[(c[sa>>2]|0)+2>>0]|0)){xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330261,6,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;s=h+4|0;r=a[s+11>>0]|0;t=r<<24>>24<0;Hs(sa,t?c[s>>2]|0:s,t?c[h+8>>2]|0:r&255);c[R>>2]=1;r=h+16|0;t=a[r+11>>0]|0;s=t<<24>>24<0;Hs(sa,s?c[r>>2]|0:r,s?c[h+20>>2]|0:t&255);c[R>>2]=1}switch(c[h+28>>2]|0){case 0:{zs(sa,h+32|0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;b=1;break}case 1:{f=h+32|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330351,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;b=a[f+11>>0]|0;g=b<<24>>24<0;b=g?c[h+36>>2]|0:b&255;if(!b){c[$>>2]=c[O>>2];Is(sa,312362,$)}else ys(sa,g?c[f>>2]|0:f,b,1);Js(sa,1,c[O>>2]|0);Ks(sa,1,c[O>>2]|0);b=h+48|0;r=b;s=c[r+4>>2]|0;t=ba;c[t>>2]=c[r>>2];c[t+4>>2]=s;Is(sa,312369,ba);if(a[b+16>>0]|0){r=h+56|0;s=c[r+4>>2]|0;t=ma;c[t>>2]=c[r>>2];c[t+4>>2]=s;Is(sa,312369,ma)}if(a[b+17>>0]|0)Is(sa,330338,na);As(sa,c[h+72>>2]|0,0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;c[O>>2]=(c[O>>2]|0)+1;b=2;break}case 2:{Ls(sa,h+32|0);qa=183;break}case 3:{Fs(sa,h+32|0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;b=1;break}case 4:{Ms(sa,h+32|0);qa=183;break}default:qa=183}if((qa|0)==183){qa=0;b=c[R>>2]|0}b=(b|0)==3;if(a[(c[sa>>2]|0)+2>>0]|0){if(b)xs(sa)}else{if(!b)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0)}c[R>>2]=2;break}case 10:{Ms(sa,e+36|0);break}case 3:{m=e;k=m+36|0;i=m+48|0;if(a[(c[sa>>2]|0)+1>>0]|0){j=c[i>>2]|0;switch(j|0){case 0:{l=Ek(c[Y>>2]|0,m+52|0)|0;break}case 1:{l=Gk(c[Y>>2]|0,m+52|0)|0;break}case 2:{l=Hk(c[Y>>2]|0,m+52|0)|0;break}case 3:{l=Fk(c[Y>>2]|0,m+52|0)|0;break}case 4:{l=Jk(c[Y>>2]|0,m+52|0)|0;break}default:l=0}b=c[ra>>2]|0;if(b|0){h=ra;while(1){f=c[b+16>>2]|0;do if((f|0)<(j|0)){g=b+4|0;f=h}else{if((j|0)>=(f|0)?(c[b+20>>2]|0)>>>0<l>>>0:0){g=b+4|0;f=h;break}g=b;f=b}while(0);b=c[g>>2]|0;if(!b)break;else h=f}if((f|0)!=(ra|0)?(T=c[f+16>>2]|0,(j|0)>=(T|0)):0){if((T|0)<(j|0))break e;if(l>>>0>=(c[f+20>>2]|0)>>>0)break e}}}xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330243,6,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;b=a[k+11>>0]|0;t=b<<24>>24<0;Hs(sa,t?c[k>>2]|0:k,t?c[m+40>>2]|0:b&255);c[R>>2]=1;b=c[i>>2]|0;if((b|0)<5)b=c[64+(b<<2)>>2]|0;else b=328778;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;t=Uz(b)|0;xs(sa);Qn(c[Z>>2]|0,b,t,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;if(c[m+72>>2]|0){r=m+76|0;t=a[r+11>>0]|0;s=t<<24>>24<0;ys(sa,s?c[r>>2]|0:r,s?c[m+80>>2]|0:t&255,1);if((c[R>>2]|0)!=3)qa=216}else{c[oa>>2]=c[m+76>>2];Is(sa,331596,oa);c[R>>2]=1;qa=216}if((qa|0)==216){qa=0;c[R>>2]=0}c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;break}case 5:{b=e;g=b+40|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330351,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;f=a[g+11>>0]|0;h=f<<24>>24<0;f=h?c[b+44>>2]|0:f&255;if(!f){c[ca>>2]=c[O>>2];Is(sa,312362,ca)}else ys(sa,h?c[g>>2]|0:g,f,1);Js(sa,1,c[O>>2]|0);Ks(sa,1,c[O>>2]|0);r=b+56|0;s=c[r+4>>2]|0;t=da;c[t>>2]=c[r>>2];c[t+4>>2]=s;Is(sa,312369,da);if(a[b+72>>0]|0){r=b+64|0;s=c[r+4>>2]|0;t=ea;c[t>>2]=c[r>>2];c[t+4>>2]=s;Is(sa,312369,ea)}if(a[b+73>>0]|0)Is(sa,330338,fa);As(sa,c[b+80>>2]|0,0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;c[O>>2]=(c[O>>2]|0)+1;break}case 6:{h=e;f=h+36|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330228,4,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;b=a[f+11>>0]|0;g=b<<24>>24<0;b=g?c[h+40>>2]|0:b&255;if(!b){c[ga>>2]=c[K>>2];Is(sa,312362,ga)}else ys(sa,g?c[f>>2]|0:f,b,1);i=h+84|0;if(!(a[i>>0]|0))Gs(sa,h+92|0);else As(sa,c[h+88>>2]|0,1);b=c[h+104>>2]|0;g=c[h+108>>2]|0;if((b|0)!=(g|0))do{do if(!(a[i>>0]|0))if(!(c[b+24>>2]|0)){c[ia>>2]=c[b+28>>2];Is(sa,331596,ia);c[R>>2]=1;break}else{r=b+28|0;t=a[r+11>>0]|0;s=t<<24>>24<0;ys(sa,s?c[r>>2]|0:r,s?c[b+32>>2]|0:t&255,1);break}else{t=(c[b>>2]|0)==0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);f=c[Z>>2]|0;if(t){Qn(f,330661,8,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1;break}Qn(f,330652,8,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;if(c[b+24>>2]|0){r=b+28|0;t=a[r+11>>0]|0;s=t<<24>>24<0;ys(sa,s?c[r>>2]|0:r,s?c[b+32>>2]|0:t&255,1);if((c[R>>2]|0)!=3)qa=244}else{c[ha>>2]=c[b+28>>2];Is(sa,331596,ha);c[R>>2]=1;qa=244}if((qa|0)==244){qa=0;c[R>>2]=0}c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=1}while(0);b=b+40|0}while((b|0)!=(g|0));if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;c[K>>2]=(c[K>>2]|0)+1;break}case 7:{Ls(sa,e+40|0);break}case 8:{b=e;g=b+36|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330223,4,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;f=a[g+11>>0]|0;h=f<<24>>24<0;f=h?c[b+40>>2]|0:f&255;if(!f){c[ja>>2]=c[J>>2];Is(sa,312362,ja)}else ys(sa,h?c[g>>2]|0:g,f,1);if(!(a[b+84>>0]|0))Gs(sa,b+88|0);t=c[b+100>>2]|0;Hs(sa,t,(c[b+104>>2]|0)-t|0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;c[J>>2]=(c[J>>2]|0)+1;break}case 4:{b=e;i=b+36|0;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330362,4,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;h=a[i+11>>0]|0;j=h<<24>>24<0;f=c[i>>2]|0;h=j?c[b+40>>2]|0:h&255;g=c[M>>2]|0;c[M>>2]=g+1;if(!h){c[ka>>2]=g;Is(sa,312362,ka)}else ys(sa,j?f:i,h,1);xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330950,4,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;Bs(sa,b+48|0,330308);Bs(sa,b+60|0,330329);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;break}case 9:{b=e;xs(sa);Qn(c[Z>>2]|0,330281,1,0,0);c[R>>2]=0;xs(sa);Qn(c[Z>>2]|0,330345,5,0,0);c[R>>2]=1;c[Q>>2]=(c[Q>>2]|0)+2;if(c[b+56>>2]|0){r=b+60|0;t=a[r+11>>0]|0;s=t<<24>>24<0;ys(sa,s?c[r>>2]|0:r,s?c[b+64>>2]|0:t&255,0);if((c[R>>2]|0)!=3)qa=269}else{c[la>>2]=c[b+60>>2];Is(sa,331596,la);c[R>>2]=0;qa=269}if((qa|0)==269){qa=0;c[R>>2]=0}c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;break}default:{}}while(0);e=c[e+4>>2]|0;if(!e)break c}if((qa|0)==102)HB();else if((qa|0)==107)HB();else if((qa|0)==110)U();else if((qa|0)==114)HB()}while(0);if((c[R>>2]|0)!=3)c[R>>2]=0;c[Q>>2]=(c[Q>>2]|0)+-2;xs(sa);Qn(c[Z>>2]|0,330336,1,0,0);c[R>>2]=2;xs(sa);i=c[S>>2]|0;e=c[sa+112>>2]|0;if(e|0){c[sa+116>>2]=e;$A(e)}e=c[sa+100>>2]|0;if(e|0){c[sa+104>>2]=e;$A(e)}e=c[sa+88>>2]|0;if(e|0){c[sa+92>>2]=e;$A(e)}e=c[sa+76>>2]|0;if(e|0){c[sa+80>>2]=e;$A(e)}e=c[sa+64>>2]|0;if(e|0){c[sa+68>>2]=e;$A(e)}Ns(c[ra>>2]|0);e=sa+40|0;b=c[e>>2]|0;if(b|0){Es(e,b);$A(c[e>>2]|0)}f=sa+28|0;h=c[f>>2]|0;if(!h){aa=ta;return i|0}g=sa+32|0;e=c[g>>2]|0;if((e|0)==(h|0))e=h;else{do{b=c[e+-12>>2]|0;if(b|0){c[e+-8>>2]=b;$A(b)}b=c[e+-24>>2]|0;if(b|0){c[e+-20>>2]=b;$A(b)}e=e+-40|0;if((a[e+11>>0]|0)<0)$A(c[e>>2]|0)}while((e|0)!=(h|0));e=c[f>>2]|0}c[g>>2]=h;$A(e);aa=ta;return i|0}function vs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=(d|0)==(b|0);a[d+12>>0]=j&1;if(j)return;h=d;while(1){g=h+8|0;i=c[g>>2]|0;d=i+12|0;if(a[d>>0]|0){e=24;break}j=i+8|0;f=c[j>>2]|0;e=c[f>>2]|0;if((e|0)==(i|0)){e=c[f+4>>2]|0;if(!e){e=7;break}e=e+12|0;if(a[e>>0]|0){e=7;break}}else{if(!e){e=16;break}e=e+12|0;if(a[e>>0]|0){e=16;break}}a[d>>0]=1;j=(f|0)==(b|0);a[f+12>>0]=j&1;a[e>>0]=1;if(j){e=24;break}else h=f}if((e|0)==7){if((c[i>>2]|0)==(h|0))g=f;else{h=i+4|0;e=c[h>>2]|0;d=c[e>>2]|0;c[h>>2]=d;if(!d)d=f;else{c[d+8>>2]=i;d=c[j>>2]|0}g=e+8|0;c[g>>2]=d;d=c[j>>2]|0;c[((c[d>>2]|0)==(i|0)?d:d+4|0)>>2]=e;c[e>>2]=i;c[j>>2]=e;g=c[g>>2]|0;d=e+12|0}a[d>>0]=1;a[g+12>>0]=0;d=c[g>>2]|0;f=d+4|0;e=c[f>>2]|0;c[g>>2]=e;if(e|0)c[e+8>>2]=g;j=g+8|0;c[d+8>>2]=c[j>>2];i=c[j>>2]|0;c[((c[i>>2]|0)==(g|0)?i:i+4|0)>>2]=d;c[f>>2]=g;c[j>>2]=d;return}else if((e|0)==16){if((c[i>>2]|0)==(h|0)){e=h+4|0;d=c[e>>2]|0;c[i>>2]=d;if(!d)d=f;else{c[d+8>>2]=i;d=c[j>>2]|0}c[g>>2]=d;f=c[j>>2]|0;c[((c[f>>2]|0)==(i|0)?f:f+4|0)>>2]=h;c[e>>2]=i;c[j>>2]=h;f=c[g>>2]|0;d=h+12|0}a[d>>0]=1;a[f+12>>0]=0;j=f+4|0;d=c[j>>2]|0;e=c[d>>2]|0;c[j>>2]=e;if(e|0)c[e+8>>2]=f;j=f+8|0;c[d+8>>2]=c[j>>2];i=c[j>>2]|0;c[((c[i>>2]|0)==(f|0)?i:i+4|0)>>2]=d;c[d>>2]=f;c[j>>2]=d;return}else if((e|0)==24)return}function ws(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;i=a+4|0;g=c[a>>2]|0;l=(c[i>>2]|0)-g|0;f=l>>2;d=f+1|0;if(d>>>0>1073741823)HB();j=a+8|0;m=(c[j>>2]|0)-g|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{k=_A(e<<2)|0;h=k;break}else{h=0;k=0}while(0);d=k+(f<<2)|0;c[d>>2]=c[b>>2];if((l|0)>0)sC(h|0,g|0,l|0)|0;c[a>>2]=k;c[i>>2]=d+4;c[j>>2]=k+(e<<2);if(!g)return;$A(g);return}function xs(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=aa;aa=aa+16|0;d=g;e=b+24|0;switch(c[e>>2]|0){case 1:{f=c[b+12>>2]|0;a[d>>0]=32;Qn(f,d,1,0,0);c[e>>2]=0;aa=g;return}case 3:case 2:{f=b+12|0;h=c[f>>2]|0;a[d>>0]=10;Qn(h,d,1,0,0);d=c[b+20>>2]|0;if(d>>>0>141)do{Qn(c[f>>2]|0,16960,142,0,0);d=d+-142|0}while(d>>>0>141);if(!d){c[e>>2]=0;aa=g;return}Qn(c[f>>2]|0,16960,d,0,0);c[e>>2]=0;aa=g;return}default:{c[e>>2]=0;aa=g;return}}}function ys(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=aa;aa=aa+16|0;j=k;i=e+f|0;a:do if(f|0){h=e;while(1){if(!(a[16704+(d[h>>0]|0)>>0]|0))break;h=h+1|0;if((h|0)==(i|0))break a}c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;do{f=a[e>>0]|0;wB(j,(a[16704+(f&255)>>0]|0)==0?95:f);e=e+1|0}while((e|0)!=(i|0));i=j+11|0;f=a[i>>0]|0;e=f<<24>>24<0;h=e?c[j>>2]|0:j;f=e?c[j+4>>2]|0:f&255;xs(b);Qn(c[b+12>>2]|0,h,f,0,0);if((a[i>>0]|0)<0)$A(c[j>>2]|0);j=b+24|0;c[j>>2]=g;aa=k;return}while(0);xs(b);Qn(c[b+12>>2]|0,e,f,0,0);j=b+24|0;c[j>>2]=g;aa=k;return}function zs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=aa;aa=aa+80|0;n=p+8|0;g=p;k=p+32|0;l=p+12|0;xs(b);m=b+12|0;Qn(c[m>>2]|0,330281,1,0,0);j=b+24|0;c[j>>2]=0;xs(b);Qn(c[m>>2]|0,330950,4,0,0);c[j>>2]=1;i=b+20|0;c[i>>2]=(c[i>>2]|0)+2;e=a[d+11>>0]|0;f=e<<24>>24<0;e=f?c[d+4>>2]|0:e&255;h=b+124|0;if(!e){c[g>>2]=c[h>>2];Is(b,312362,g)}else ys(b,f?c[d>>2]|0:d,e,1);Js(b,0,c[h>>2]|0);Ks(b,0,c[h>>2]|0);e=d+12|0;if(a[e>>0]|0){xs(b);Qn(c[m>>2]|0,330281,1,0,0);c[j>>2]=0;xs(b);Qn(c[m>>2]|0,330362,4,0,0);c[j>>2]=1;c[i>>2]=(c[i>>2]|0)+2;if(c[d+36>>2]|0){f=d+40|0;n=a[f+11>>0]|0;g=n<<24>>24<0;ys(b,g?c[f>>2]|0:f,g?c[d+44>>2]|0:n&255,0);if((c[j>>2]|0)!=3)o=8}else{c[n>>2]=c[d+40>>2];Is(b,331596,n);c[j>>2]=0;o=8}if((o|0)==8)c[j>>2]=0;c[i>>2]=(c[i>>2]|0)+-2;xs(b);Qn(c[m>>2]|0,330336,1,0,0);c[j>>2]=1}o=c[b+4>>2]|0;n=c[h>>2]|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;c[l+16>>2]=0;El(k,n,l);o=Mk(o,0,k)|0;Ml(k);if(!o){o=c[h>>2]|0;o=o+1|0;c[h>>2]=o;aa=p;return}if(!((a[e>>0]|0)==0?1:(a[(c[b>>2]|0)+2>>0]|0)!=0)){o=c[h>>2]|0;o=o+1|0;c[h>>2]=o;aa=p;return}Bs(b,d+52|0,330308);Bs(b,d+64|0,330329);o=c[h>>2]|0;o=o+1|0;c[h>>2]=o;aa=p;return}function As(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;do switch(b|0){case -1:{b=330980;break}case -2:{b=330976;break}case -3:{b=330972;break}case -4:{b=330968;break}case -5:{b=330963;break}case -16:{b=330955;break}case -32:{b=330950;break}case -24:{b=330939;break}case -64:{b=330934;break}case 0:{b=330930;break}case -17:{b=330923;break}default:b=330910}while(0);e=Uz(b)|0;xs(a);Qn(c[a+12>>2]|0,b,e,0,0);c[a+24>>2]=d;return}function Bs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=b+4|0;f=c[g>>2]|0;e=c[b>>2]|0;if((f|0)==(e|0))return;h=(d|0)!=0;if(h){xs(a);i=a+12|0;Qn(c[i>>2]|0,330281,1,0,0);e=a+24|0;c[e>>2]=0;f=Uz(d)|0;xs(a);Qn(c[i>>2]|0,d,f,0,0);c[e>>2]=1;e=a+20|0;c[e>>2]=(c[e>>2]|0)+2;e=c[b>>2]|0;f=c[g>>2]|0}if((e|0)!=(f|0))do{As(a,c[e>>2]|0,1);e=e+4|0}while((e|0)!=(f|0));if(!h)return;e=a+24|0;if((c[e>>2]|0)!=3)c[e>>2]=0;i=a+20|0;c[i>>2]=(c[i>>2]|0)+-2;xs(a);Qn(c[a+12>>2]|0,330336,1,0,0);c[e>>2]=1;return}function Cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+16|0;f=h+8|0;e=h;d=c[b+32>>2]|0;do switch(d|0){case 48:case 14:case 6:case 1:case 4:{$t(a,b,2,1);aa=h;return}case 50:case 43:case 3:{$t(a,b,2,0);aa=h;return}case 7:{g=b+88|0;$t(a,b,0,(c[g+16>>2]|0)-(c[g+12>>2]|0)>>2);aa=h;return}case 8:{$t(a,b,au(a,b+36|0)|0,1);aa=h;return}case 9:{g=au(a,b+36|0)|0;$t(a,b,g+1|0,g);aa=h;return}case 10:{$t(a,b,1,1);aa=h;return}case 11:{$t(a,b,(au(a,b+48|0)|0)+1|0,1);aa=h;return}case 12:{f=b+36|0;e=c[a+4>>2]|0;d=Rk(e,f)|0;if(!d)g=0;else g=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;d=Rk(e,f)|0;if(!d)d=0;else d=(c[d+68>>2]|0)-(c[d+64>>2]|0)>>2;$t(a,b,g,d);aa=h;return}case 37:{f=b+36|0;e=c[a+4>>2]|0;d=Rk(e,f)|0;if(!d)g=0;else g=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;d=Rk(e,f)|0;if(!d)d=0;else d=(c[d+68>>2]|0)-(c[d+64>>2]|0)>>2;$t(a,b,g,d);aa=h;return}case 13:{$t(a,b,((c[b+80>>2]|0)-(c[b+76>>2]|0)>>2)+1|0,(c[b+92>>2]|0)-(c[b+88>>2]|0)>>2);aa=h;return}case 38:{$t(a,b,((c[b+80>>2]|0)-(c[b+76>>2]|0)>>2)+1|0,(c[b+92>>2]|0)-(c[b+88>>2]|0)>>2);aa=h;return}case 34:case 55:case 49:case 31:case 22:case 18:case 15:{$t(a,b,0,1);aa=h;return}case 45:case 27:{$t(a,b,0,0);aa=h;return}case 44:case 26:case 28:case 46:case 30:{$t(a,b,3,0);aa=h;return}case 33:case 47:case 54:case 29:case 24:case 21:case 16:case 0:{$t(a,b,1,1);aa=h;return}case 23:case 19:case 17:{$t(a,b,1,0);aa=h;return}case 20:{g=b+88|0;$t(a,b,1,(c[g+16>>2]|0)-(c[g+12>>2]|0)>>2);aa=h;return}case 25:{g=b+88|0;$t(a,b,0,(c[g+16>>2]|0)-(c[g+12>>2]|0)>>2);aa=h;return}case 32:{$t(a,b,0,0);aa=h;return}case 36:{g=c[a+8>>2]|0;$t(a,b,(c[g+68>>2]|0)-(c[g+64>>2]|0)>>2,1);aa=h;return}case 35:{$t(a,b,0,0);aa=h;return}case 39:case 5:case 2:{$t(a,b,3,1);aa=h;return}case 52:{d=Xk(c[a+4>>2]|0,b+36|0)|0;if(!d)d=0;else d=(c[d+56>>2]|0)-(c[d+52>>2]|0)>>2;$t(a,b,d,0);aa=h;return}case 53:{g=b+88|0;$t(a,b,0,(c[g+16>>2]|0)-(c[g+12>>2]|0)>>2);aa=h;return}case 51:{$t(a,b,3,1);aa=h;return}case 40:switch(c[b+36>>2]|0){case 232:case 229:case 226:case 223:case 220:case 219:case 216:case 215:{$t(a,b,1,1);aa=h;return}case 233:case 230:case 227:case 224:case 221:case 217:{$t(a,b,2,1);aa=h;return}default:{a=Ck(40)|0;c[e>>2]=a;BA(0,312541,e);aa=h;return}}case 41:{$t(a,b,2,1);aa=h;return}default:{a=Ck(d)|0;c[f>>2]=a;BA(0,312575,f);aa=h;return}}while(0)}function Ds(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;S=aa;aa=aa+112|0;O=S+64|0;Q=S+24|0;J=S;if((b|0)==(d|0)){aa=S;return}I=J+4|0;z=J+8|0;A=J+12|0;N=J+16|0;P=a+12|0;M=a+24|0;R=O+4|0;m=Q+28|0;l=J+4|0;L=a+20|0;n=Q+16|0;r=Q+32|0;K=a+40|0;q=O+4|0;C=O+8|0;p=a+44|0;B=a+48|0;w=O+4|0;G=O+8|0;y=O+4|0;H=O+8|0;t=O+4|0;E=O+8|0;o=Q+4|0;v=Q+20|0;x=Q+8|0;u=O+4|0;F=O+8|0;s=O+4|0;D=O+8|0;while(1){k=c[b>>2]|0;c[J>>2]=k;g=b+4|0;c[I>>2]=0;c[z>>2]=0;c[A>>2]=0;i=b+8|0;e=(c[i>>2]|0)-(c[g>>2]|0)|0;h=(e|0)/20|0;j=k;if(e){if(h>>>0>214748364){b=6;break}f=_A(e)|0;c[z>>2]=f;c[I>>2]=f;c[A>>2]=f+(h*20|0);e=c[g>>2]|0;g=c[i>>2]|0;if((e|0)==(g|0))e=k;else{do{_t(f,e);e=e+20|0;f=f+20|0;c[z>>2]=f}while((e|0)!=(g|0));e=c[J>>2]|0;j=e}}else{e=k;f=0}c[N>>2]=c[b+16>>2];switch(c[j+32>>2]|0){case 7:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;Am(O,2);Yt(a,1,e+36|0,c[O>>2]|0);e=c[e+112>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;j=c[p>>2]|0;c[q>>2]=j;c[C>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,j);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);break}case 25:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;Am(O,3);Yt(a,2,e+36|0,c[O>>2]|0);e=c[e+112>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;j=c[p>>2]|0;c[w>>2]=j;c[G>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,j);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);break}case 20:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;Am(O,4);Yt(a,3,j+36|0,c[O>>2]|0);Ds(a,c[I>>2]|0,f);xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;xs(a);Qn(c[P>>2]|0,330357,4,0,0);c[M>>2]=2;c[L>>2]=(c[L>>2]|0)+2;e=c[j+112>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;i=c[p>>2]|0;c[y>>2]=i;c[H>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,i);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);c[M>>2]=2;if(c[j+152>>2]|0){xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;xs(a);Qn(c[P>>2]|0,330553,4,0,0);c[M>>2]=2;c[L>>2]=(c[L>>2]|0)+2;e=c[j+144>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;j=c[p>>2]|0;c[s>>2]=j;c[D>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,j);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);c[M>>2]=2}c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);break}case 53:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;Am(O,6);Yt(a,5,j+36|0,c[O>>2]|0);Ds(a,c[I>>2]|0,f);e=c[j+112>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;i=c[p>>2]|0;c[t>>2]=i;c[E>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,i);if(k|0){Es(O,e);$A(c[O>>2]|0)}xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;xs(a);Qn(c[P>>2]|0,330505,5,0,0);c[M>>2]=2;c[L>>2]=(c[L>>2]|0)+2;e=c[j+144>>2]|0;if(e|0)do{Cs(a,e);e=c[e+4>>2]|0}while((e|0)!=0);k=c[K>>2]|0;c[O>>2]=k;j=c[p>>2]|0;c[u>>2]=j;c[F>>2]=c[B>>2];e=k;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;Ds(a,e,j);if(k|0){Es(O,e);$A(c[O>>2]|0)}if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0);break}default:{xs(a);Qn(c[P>>2]|0,330281,1,0,0);c[M>>2]=0;c[O>>2]=290684;c[R>>2]=a;Jj(Q,O);Kj(Q,j)|0;e=c[m>>2]|0;if(e|0){c[r>>2]=e;$A(e)}e=c[n>>2]|0;if(e|0){c[v>>2]=e;$A(e)}e=c[o>>2]|0;if(e|0){c[x>>2]=e;$A(e)}c[L>>2]=(c[L>>2]|0)+2;Ds(a,c[I>>2]|0,f);if((c[M>>2]|0)!=3)c[M>>2]=0;c[L>>2]=(c[L>>2]|0)+-2;xs(a);Qn(c[P>>2]|0,330336,1,0,0)}}c[M>>2]=2;e=c[l>>2]|0;if(e|0){Es(l,e);$A(c[l>>2]|0)}b=b+20|0;if((b|0)==(d|0)){b=3;break}}if((b|0)==3){aa=S;return}else if((b|0)==6)HB()}function Es(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;a=c[f>>2]|0;if((a|0)==(b|0)){c[f>>2]=b;return}do{d=a+-16|0;a=a+-20|0;e=c[d>>2]|0;if(e|0){Es(d,e);$A(c[d>>2]|0)}}while((a|0)!=(b|0));c[f>>2]=b;return}function Fs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;k=l;xs(b);i=b+12|0;Qn(c[i>>2]|0,330281,1,0,0);h=b+24|0;c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330254,6,0,0);c[h>>2]=1;g=b+20|0;c[g>>2]=(c[g>>2]|0)+2;e=a[d+11>>0]|0;j=e<<24>>24<0;e=j?c[d+4>>2]|0:e&255;f=b+128|0;if(!e){c[k>>2]=c[f>>2];Is(b,312362,k)}else ys(b,j?c[d>>2]|0:d,e,1);Js(b,3,c[f>>2]|0);Ks(b,3,c[f>>2]|0);if(!(a[d+16>>0]|0)){As(b,c[d+12>>2]|0,1);k=c[f>>2]|0;k=k+1|0;c[f>>2]=k;aa=l;return}xs(b);Qn(c[i>>2]|0,330281,1,0,0);c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330297,3,0,0);c[h>>2]=1;c[g>>2]=(c[g>>2]|0)+2;As(b,c[d+12>>2]|0,1);if((c[h>>2]|0)!=3)c[h>>2]=0;c[g>>2]=(c[g>>2]|0)+-2;xs(b);Qn(c[i>>2]|0,330336,1,0,0);c[h>>2]=1;k=c[f>>2]|0;k=k+1|0;c[f>>2]=k;aa=l;return}function Gs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=aa;aa=aa+48|0;d=h+40|0;g=h;if(!(c[b+8>>2]|0)){aa=h;return}xs(a);f=a+12|0;Qn(c[f>>2]|0,330281,1,0,0);e=a+24|0;c[e>>2]=0;c[d>>2]=290684;c[d+4>>2]=a;Jj(g,d);Qj(g,b)|0;d=c[g+28>>2]|0;if(d|0){c[g+32>>2]=d;$A(d)}d=c[g+16>>2]|0;if(d|0){c[g+20>>2]=d;$A(d)}d=c[g+4>>2]|0;if(d|0){c[g+8>>2]=d;$A(d)}c[e>>2]=0;xs(a);Qn(c[f>>2]|0,330336,1,0,0);c[e>>2]=1;aa=h;return}function Hs(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+16|0;i=l;xs(b);j=b+12|0;k=c[j>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);if(!e){k=c[j>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);k=b+24|0;c[k>>2]=1;aa=l;return}g=0;do{f=a[d+g>>0]|0;h=f&255;k=c[j>>2]|0;if(!(a[16416+h>>0]|0)){a[i>>0]=f;Qn(k,i,1,0,0)}else{a[i>>0]=92;Qn(k,i,1,0,0);k=c[j>>2]|0;a[i>>0]=a[16672+(h>>>4)>>0]|0;Qn(k,i,1,0,0);k=c[j>>2]|0;a[i>>0]=a[16672+(h&15)>>0]|0;Qn(k,i,1,0,0)}g=g+1|0}while((g|0)!=(e|0));k=c[j>>2]|0;a[i>>0]=34;Qn(k,i,1,0,0);k=b+24|0;c[k>>2]=1;aa=l;return}function Is(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+160|0;e=h+144|0;g=h+128|0;f=h;c[e>>2]=d;c[g>>2]=c[e>>2];d=Vz(f,128,b,e)|0;e=d+1|0;if(e>>>0>128){d=aa;aa=aa+((1*e|0)+15&-16)|0;f=d;d=Vz(d,e,b,g)|0}xs(a);Qn(c[a+12>>2]|0,f,d,0,0);c[a+24>>2]=1;aa=h;return}function Js(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!(a[(c[b>>2]|0)+1>>0]|0))return;f=b+56|0;g=c[f>>2]|0;a:do if(!g)k=28;else{j=g;b:while(1){g=c[j+16>>2]|0;do if((g|0)>(d|0))k=7;else{if((g|0)>=(d|0)){g=c[j+20>>2]|0;if(g>>>0>e>>>0){k=7;break}if(g>>>0>=e>>>0)break b}g=j+4|0}while(0);if((k|0)==7){k=0;f=j;g=j}g=c[g>>2]|0;if(!g){k=28;break a}else j=g}h=c[j>>2]|0;if(!h)g=j;else{g=j;do{i=c[h+16>>2]|0;do if((i|0)<(d|0))i=h+4|0;else{if((i|0)<=(d|0)?(c[h+20>>2]|0)>>>0<e>>>0:0){i=h+4|0;break}i=h;g=h}while(0);h=c[i>>2]|0}while((h|0)!=0)}h=c[j+4>>2]|0;if(h)do{i=c[h+16>>2]|0;do if((i|0)>(d|0)){i=h;f=h}else{if((i|0)>=(d|0)?(c[h+20>>2]|0)>>>0>e>>>0:0){i=h;f=h;break}i=h+4|0}while(0);h=c[i>>2]|0}while((h|0)!=0)}while(0);if((k|0)==28)g=f;if((g|0)==(f|0))return;d=b+12|0;e=b+24|0;j=b+20|0;do{k=c[g+24>>2]|0;xs(b);Qn(c[d>>2]|0,330281,1,0,0);c[e>>2]=0;xs(b);Qn(c[d>>2]|0,330243,6,0,0);c[e>>2]=1;c[j>>2]=(c[j>>2]|0)+2;h=a[k+11>>0]|0;i=h<<24>>24<0;Hs(b,i?c[k>>2]|0:k,i?c[k+4>>2]|0:h&255);c[e>>2]=0;c[j>>2]=(c[j>>2]|0)+-2;xs(b);Qn(c[d>>2]|0,330336,1,0,0);c[e>>2]=1;h=c[g+4>>2]|0;if(!h){h=g+8|0;i=c[h>>2]|0;if((c[i>>2]|0)==(g|0))g=i;else do{k=c[h>>2]|0;h=k+8|0;g=c[h>>2]|0}while((c[g>>2]|0)!=(k|0))}else{g=h;while(1){h=c[g>>2]|0;if(!h)break;else g=h}}}while((g|0)!=(f|0));return}function Ks(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!(a[(c[b>>2]|0)+2>>0]|0))return;f=c[b+64+(d*12|0)>>2]|0;if((c[b+64+(d*12|0)+4>>2]|0)-f>>2>>>0<=e>>>0)return;h=c[f+(e<<2)>>2]|0;xs(b);e=b+12|0;Qn(c[e>>2]|0,330281,1,0,0);d=b+24|0;c[d>>2]=0;xs(b);Qn(c[e>>2]|0,330261,6,0,0);c[d>>2]=1;f=b+20|0;c[f>>2]=(c[f>>2]|0)+2;i=h+4|0;j=a[i+11>>0]|0;g=j<<24>>24<0;Hs(b,g?c[i>>2]|0:i,g?c[h+8>>2]|0:j&255);c[d>>2]=1;j=h+16|0;g=a[j+11>>0]|0;i=g<<24>>24<0;Hs(b,i?c[j>>2]|0:j,i?c[h+20>>2]|0:g&255);c[d>>2]=0;c[f>>2]=(c[f>>2]|0)+-2;xs(b);Qn(c[e>>2]|0,330336,1,0,0);c[d>>2]=1;return}function Ls(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+32|0;m=n+16|0;l=n+8|0;k=n;xs(b);i=b+12|0;Qn(c[i>>2]|0,330281,1,0,0);h=b+24|0;c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330283,6,0,0);c[h>>2]=1;f=b+20|0;c[f>>2]=(c[f>>2]|0)+2;e=a[d+11>>0]|0;j=e<<24>>24<0;e=j?c[d+4>>2]|0:e&255;g=b+136|0;if(!e){c[k>>2]=c[g>>2];Is(b,312362,k)}else ys(b,j?c[d>>2]|0:d,e,1);Js(b,2,c[g>>2]|0);Ks(b,2,c[g>>2]|0);e=d+16|0;j=c[e+4>>2]|0;k=l;c[k>>2]=c[e>>2];c[k+4>>2]=j;Is(b,312369,l);if(a[d+32>>0]|0){j=d+24|0;k=c[j+4>>2]|0;l=m;c[l>>2]=c[j>>2];c[l+4>>2]=k;Is(b,312369,m)}if(a[d+33>>0]|0)Is(b,330338,n+24|0);if((c[h>>2]|0)==3){m=c[f>>2]|0;m=m+-2|0;c[f>>2]=m;xs(b);m=c[i>>2]|0;Qn(m,330336,1,0,0);c[h>>2]=2;m=c[g>>2]|0;m=m+1|0;c[g>>2]=m;aa=n;return}c[h>>2]=0;m=c[f>>2]|0;m=m+-2|0;c[f>>2]=m;xs(b);m=c[i>>2]|0;Qn(m,330336,1,0,0);c[h>>2]=2;m=c[g>>2]|0;m=m+1|0;c[g>>2]=m;aa=n;return}function Ms(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+16|0;l=n+8|0;k=n;xs(b);i=b+12|0;Qn(c[i>>2]|0,330281,1,0,0);h=b+24|0;c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330237,5,0,0);c[h>>2]=1;g=b+20|0;c[g>>2]=(c[g>>2]|0)+2;e=a[d+11>>0]|0;j=e<<24>>24<0;e=j?c[d+4>>2]|0:e&255;f=b+144|0;if(!e){c[k>>2]=c[f>>2];Is(b,312362,k)}else ys(b,j?c[d>>2]|0:d,e,1);Js(b,4,c[f>>2]|0);Ks(b,4,c[f>>2]|0);if(a[d+12>>0]|0){xs(b);Qn(c[i>>2]|0,330281,1,0,0);c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330362,4,0,0);c[h>>2]=1;c[g>>2]=(c[g>>2]|0)+2;if(c[d+36>>2]|0){j=d+40|0;l=a[j+11>>0]|0;k=l<<24>>24<0;ys(b,k?c[j>>2]|0:j,k?c[d+44>>2]|0:l&255,0);if((c[h>>2]|0)!=3)m=8}else{c[l>>2]=c[d+40>>2];Is(b,331596,l);c[h>>2]=0;m=8}if((m|0)==8)c[h>>2]=0;c[g>>2]=(c[g>>2]|0)+-2;xs(b);Qn(c[i>>2]|0,330336,1,0,0);c[h>>2]=1}Bs(b,d+52|0,330308);c[f>>2]=(c[f>>2]|0)+1;if((c[h>>2]|0)==3){m=c[g>>2]|0;m=m+-2|0;c[g>>2]=m;xs(b);m=c[i>>2]|0;Qn(m,330336,1,0,0);c[h>>2]=2;aa=n;return}c[h>>2]=0;m=c[g>>2]|0;m=m+-2|0;c[g>>2]=m;xs(b);m=c[i>>2]|0;Qn(m,330336,1,0,0);c[h>>2]=2;aa=n;return}function Ns(a){a=a|0;if(!a)return;else{Ns(c[a>>2]|0);Ns(c[a+4>>2]|0);$A(a);return}}function Os(a){a=a|0;$A(a);return}function Ps(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function Qs(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,2);Yt(a,1,b+36|0,c[e>>2]|0);aa=d;return 0}function Rs(a,b){a=a|0;b=b|0;Xt(c[a+4>>2]|0);return 0}function Ss(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=aa;aa=aa+48|0;g=d;a=a+4|0;e=c[a>>2]|0;Am(g,12);g=c[g>>2]|0;f=Uz(g)|0;xs(e);Qn(c[e+12>>2]|0,g,f,0,0);c[e+24>>2]=1;Zt(c[a>>2]|0,b+36|0,2);aa=d;return 0}function Ts(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=aa;aa=aa+48|0;g=d;a=a+4|0;e=c[a>>2]|0;Am(g,13);g=c[g>>2]|0;f=Uz(g)|0;xs(e);Qn(c[e+12>>2]|0,g,f,0,0);c[e+24>>2]=1;Zt(c[a>>2]|0,b+36|0,2);aa=d;return 0}function Us(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,10);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;Zt(c[b>>2]|0,d+36|0,1);b=c[b>>2]|0;if(!(c[d+92>>2]|0)){c[e>>2]=c[d+96>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+96|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+100>>2]|0:i&255,2);aa=f;return 0}return 0}function Vs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=aa;aa=aa+48|0;e=g;f=a+4|0;d=c[f>>2]|0;Am(e,14);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);c[d+24>>2]=1;d=c[b+36>>2]|0;e=c[b+40>>2]|0;a=c[f>>2]|0;if((d|0)==(e|0)){f=a;b=b+48|0;Zt(f,b,2);aa=g;return 0}do{Zt(a,d,1);d=d+36|0;a=c[f>>2]|0}while((d|0)!=(e|0));b=b+48|0;Zt(a,b,2);aa=g;return 0}function Ws(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,16);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function Xs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;i=aa;aa=aa+48|0;h=i+8|0;e=i;f=i+12|0;g=b+4|0;b=c[g>>2]|0;Am(f,17);f=c[f>>2]|0;j=Uz(f)|0;xs(b);Qn(c[b+12>>2]|0,f,j,0,0);c[b+24>>2]=1;b=c[g>>2]|0;xs(b);j=b+12|0;Qn(c[j>>2]|0,330281,1,0,0);f=b+24|0;c[f>>2]=0;xs(b);Qn(c[j>>2]|0,330362,4,0,0);c[f>>2]=1;b=b+20|0;c[b>>2]=(c[b>>2]|0)+2;b=c[g>>2]|0;if(!(c[d+60>>2]|0)){c[e>>2]=c[d+64>>2];Is(b,331596,e);c[b+24>>2]=1}else{e=d+64|0;j=a[e+11>>0]|0;f=j<<24>>24<0;ys(b,f?c[e>>2]|0:e,f?c[d+68>>2]|0:j&255,1)}f=d+120|0;if((c[f>>2]|0)==0?(c[d+124>>2]|0)==0:0){b=c[g>>2]|0;e=b+24|0;if((c[e>>2]|0)!=3)c[e>>2]=0;j=b+20|0;c[j>>2]=(c[j>>2]|0)+-2;xs(b);Qn(c[b+12>>2]|0,330336,1,0,0);c[e>>2]=2;aa=i;return 0}b=c[g>>2]|0;e=b+24|0;if((c[e>>2]|0)!=3)c[e>>2]=0;j=b+20|0;c[j>>2]=(c[j>>2]|0)+-2;xs(b);Qn(c[b+12>>2]|0,330336,1,0,0);c[e>>2]=1;b=c[g>>2]|0;if(!(c[f>>2]|0)){c[h>>2]=c[d+124>>2];Is(b,331596,h);c[b+24>>2]=2;aa=i;return 0}else{g=d+124|0;j=a[g+11>>0]|0;h=j<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+128>>2]|0:j&255,2);aa=i;return 0}return 0}function Ys(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function Zs(a,b){a=a|0;b=b|0;var d=0,e=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+176|0;h=m+160|0;j=m+152|0;i=m+144|0;e=m+136|0;d=m+128|0;k=m;l=c[a+4>>2]|0;switch(c[b+60>>2]|0){case -1:{Am(k,52);k=c[k>>2]|0;a=Uz(k)|0;xs(l);Qn(c[l+12>>2]|0,k,a,0,0);a=l+24|0;c[a>>2]=1;c[d>>2]=c[b+64>>2];Is(l,331593,d);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}case -2:{Am(k,53);j=c[k>>2]|0;a=Uz(j)|0;xs(l);Qn(c[l+12>>2]|0,j,a,0,0);a=l+24|0;c[a>>2]=1;j=b+64|0;k=c[j+4>>2]|0;b=e;c[b>>2]=c[j>>2];c[b+4>>2]=k;Is(l,312413,e);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}case -3:{Am(k,54);j=c[k>>2]|0;a=Uz(j)|0;xs(l);h=l+12|0;Qn(c[h>>2]|0,j,a,0,0);a=l+24|0;c[a>>2]=1;b=b+64|0;xm(k,c[b>>2]|0);j=Uz(k)|0;xs(l);Qn(c[h>>2]|0,k,j,0,0);c[a>>2]=1;g[i>>3]=+f[b>>2];Is(l,312418,i);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}case -4:{Am(k,55);i=c[k>>2]|0;a=Uz(i)|0;xs(l);h=l+12|0;Qn(c[h>>2]|0,i,a,0,0);a=l+24|0;c[a>>2]=1;b=b+64|0;i=b;ym(k,c[i>>2]|0,c[i+4>>2]|0);i=Uz(k)|0;xs(l);Qn(c[h>>2]|0,k,i,0,0);c[a>>2]=1;g[j>>3]=+g[b>>3];Is(l,312418,j);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}case -5:{Am(k,213);i=c[k>>2]|0;a=Uz(i)|0;xs(l);Qn(c[l+12>>2]|0,i,a,0,0);a=l+24|0;c[a>>2]=1;i=b+64|0;j=c[i+4>>2]|0;k=c[b+72>>2]|0;b=c[b+76>>2]|0;c[h>>2]=c[i>>2];c[h+4>>2]=j;c[h+8>>2]=k;c[h+12>>2]=b;Is(l,312426,h);if((c[a>>2]|0)==3)xs(l);c[a>>2]=2;aa=m;return 0}default:{aa=m;return 0}}return 0}function _s(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function $s(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,20);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function at(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,25);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function bt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,26);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function ct(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,4);Yt(a,3,b+36|0,c[e>>2]|0);aa=d;return 0}function dt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=aa;aa=aa+48|0;d=e;if(!(c[b+152>>2]|0)){aa=e;return 0}b=a+4|0;a=c[b>>2]|0;f=a+20|0;c[f>>2]=(c[f>>2]|0)+-2;Am(d,5);f=c[d>>2]|0;d=Uz(f)|0;xs(a);Qn(c[a+12>>2]|0,f,d,0,0);c[a+24>>2]=1;b=c[b>>2]|0;d=b+20|0;c[d>>2]=(c[d>>2]|0)+2;d=b+24|0;if((c[d>>2]|0)==3)xs(b);c[d>>2]=3;aa=e;return 0}function et(a,b){a=a|0;b=b|0;Xt(c[a+4>>2]|0);return 0}function ft(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function gt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,22);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function ht(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,23);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function it(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,24);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function jt(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,3);Yt(a,2,b+36|0,c[e>>2]|0);aa=d;return 0}function kt(a,b){a=a|0;b=b|0;Xt(c[a+4>>2]|0);return 0}function lt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,199);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function mt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,198);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function nt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,200);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function ot(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,51);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function pt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,197);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function qt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,50);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function rt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,203);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function st(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,202);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function tt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,201);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function ut(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,204);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function vt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,205);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function wt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,206);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function xt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,207);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function yt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,208);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function zt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,209);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function At(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,1);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function Bt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,15);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function Ct(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,18);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function Dt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;g=aa;aa=aa+48|0;f=g;h=g+4|0;e=b+4|0;b=c[e>>2]|0;Am(h,19);h=c[h>>2]|0;i=Uz(h)|0;xs(b);Qn(c[b+12>>2]|0,h,i,0,0);c[b+24>>2]=1;b=c[e>>2]|0;xs(b);i=b+12|0;Qn(c[i>>2]|0,330281,1,0,0);h=b+24|0;c[h>>2]=0;xs(b);Qn(c[i>>2]|0,330362,4,0,0);c[h>>2]=1;b=b+20|0;c[b>>2]=(c[b>>2]|0)+2;b=c[e>>2]|0;if(!(c[d+60>>2]|0)){c[f>>2]=c[d+64>>2];Is(b,331596,f);c[b+24>>2]=1}else{f=d+64|0;i=a[f+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[f>>2]|0:f,h?c[d+68>>2]|0:i&255,1)}b=c[e>>2]|0;e=b+24|0;if((c[e>>2]|0)==3){i=b+20|0;h=c[i>>2]|0;h=h+-2|0;c[i>>2]=h;xs(b);i=b+12|0;i=c[i>>2]|0;Qn(i,330336,1,0,0);c[e>>2]=2;aa=g;return 0}c[e>>2]=0;i=b+20|0;h=c[i>>2]|0;h=h+-2|0;c[i>>2]=h;xs(b);i=b+12|0;i=c[i>>2]|0;Qn(i,330336,1,0,0);c[e>>2]=2;aa=g;return 0}function Et(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,21);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function Ft(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Gt(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function Ht(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,0);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=2;aa=b;return 0}function It(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,6);Yt(a,5,b+36|0,c[e>>2]|0);aa=d;return 0}function Jt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=aa;aa=aa+48|0;f=d;b=a+4|0;a=c[b>>2]|0;e=a+20|0;c[e>>2]=(c[e>>2]|0)+-2;Am(f,7);f=c[f>>2]|0;e=Uz(f)|0;xs(a);Qn(c[a+12>>2]|0,f,e,0,0);c[a+24>>2]=1;b=c[b>>2]|0;a=b+20|0;c[a>>2]=(c[a>>2]|0)+2;c[(c[b+32>>2]|0)+-28>>2]=6;a=b+24|0;if((c[a>>2]|0)!=3){c[a>>2]=3;aa=d;return 0}xs(b);c[a>>2]=3;aa=d;return 0}function Kt(a,b){a=a|0;b=b|0;Xt(c[a+4>>2]|0);return 0}function Lt(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;f=aa;aa=aa+48|0;e=f;i=f+4|0;b=b+4|0;g=c[b>>2]|0;Am(i,8);i=c[i>>2]|0;h=Uz(i)|0;xs(g);Qn(c[g+12>>2]|0,i,h,0,0);c[g+24>>2]=1;b=c[b>>2]|0;if(!(c[d+56>>2]|0)){c[e>>2]=c[d+60>>2];Is(b,331596,e);c[b+24>>2]=2;aa=f;return 0}else{g=d+60|0;i=a[g+11>>0]|0;h=i<<24>>24<0;ys(b,h?c[g>>2]|0:g,h?c[d+64>>2]|0:i&255,2);aa=f;return 0}return 0}function Mt(a,b){a=a|0;b=b|0;var d=0,e=0;b=aa;aa=aa+48|0;e=b;a=c[a+4>>2]|0;Am(e,9);e=c[e>>2]|0;d=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,d,0,0);c[a+24>>2]=1;aa=b;return 0}function Nt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Ot(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Pt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Qt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Rt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function St(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Tt(a,b){a=a|0;b=b|0;var d=0,e=0;d=aa;aa=aa+48|0;e=d;a=c[a+4>>2]|0;Am(e,c[b+36>>2]|0);e=c[e>>2]|0;b=Uz(e)|0;xs(a);Qn(c[a+12>>2]|0,e,b,0,0);c[a+24>>2]=2;aa=d;return 0}function Ut(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=aa;aa=aa+48|0;e=d;g=d+8|0;a=a+4|0;f=c[a>>2]|0;Am(g,c[b+36>>2]|0);g=c[g>>2]|0;h=Uz(g)|0;xs(f);Qn(c[f+12>>2]|0,g,h,0,0);c[f+24>>2]=1;f=c[a>>2]|0;h=b+40|0;g=c[h+4>>2]|0;b=e;c[b>>2]=c[h>>2];c[b+4>>2]=g;Is(f,312369,e);a=c[a>>2]|0;xs(a);Qn(c[a+12>>2]|0,354708,0,0,0);c[a+24>>2]=2;aa=d;return 0}function Vt(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;f=aa;aa=aa+160|0;g=f+120|0;i=f+112|0;k=f+104|0;m=f+96|0;o=f+88|0;q=f+80|0;s=f+72|0;u=f+64|0;w=f+56|0;y=f+48|0;A=f+40|0;C=f+32|0;E=f+24|0;G=f+16|0;I=f+8|0;K=f;F=f+124|0;b=b+4|0;J=c[b>>2]|0;Am(F,c[e+36>>2]|0);F=c[F>>2]|0;H=Uz(F)|0;xs(J);Qn(c[J+12>>2]|0,F,H,0,0);c[J+24>>2]=1;J=a[e+41>>0]|0;H=a[e+42>>0]|0;F=a[e+43>>0]|0;D=a[e+44>>0]|0;B=a[e+45>>0]|0;z=a[e+46>>0]|0;x=a[e+47>>0]|0;v=a[e+48>>0]|0;t=a[e+49>>0]|0;r=a[e+50>>0]|0;p=a[e+51>>0]|0;n=a[e+52>>0]|0;l=a[e+53>>0]|0;j=a[e+54>>0]|0;h=a[e+55>>0]|0;L=c[b>>2]|0;c[K>>2]=d[e+40>>0];Is(L,312393,K);e=c[b>>2]|0;c[I>>2]=J&255;Is(e,312393,I);e=c[b>>2]|0;c[G>>2]=H&255;Is(e,312393,G);e=c[b>>2]|0;c[E>>2]=F&255;Is(e,312393,E);e=c[b>>2]|0;c[C>>2]=D&255;Is(e,312393,C);e=c[b>>2]|0;c[A>>2]=B&255;Is(e,312393,A);e=c[b>>2]|0;c[y>>2]=z&255;Is(e,312393,y);e=c[b>>2]|0;c[w>>2]=x&255;Is(e,312393,w);e=c[b>>2]|0;c[u>>2]=v&255;Is(e,312393,u);e=c[b>>2]|0;c[s>>2]=t&255;Is(e,312393,s);e=c[b>>2]|0;c[q>>2]=r&255;Is(e,312393,q);e=c[b>>2]|0;c[o>>2]=p&255;Is(e,312393,o);e=c[b>>2]|0;c[m>>2]=n&255;Is(e,312393,m);e=c[b>>2]|0;c[k>>2]=l&255;Is(e,312393,k);e=c[b>>2]|0;c[i>>2]=j&255;Is(e,312393,i);e=c[b>>2]|0;c[g>>2]=h&255;Is(e,312393,g);b=c[b>>2]|0;xs(b);Qn(c[b+12>>2]|0,354708,0,0,0);c[b+24>>2]=2;aa=f;return 0}function Wt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i+8|0;g=i;e=i+12|0;d=c[a+4>>2]|0;f=b+36|0;Am(e,c[f>>2]|0);a=c[e>>2]|0;e=Uz(a)|0;xs(d);Qn(c[d+12>>2]|0,a,e,0,0);e=d+24|0;c[e>>2]=1;a=c[b+44>>2]|0;if(a|0){c[g>>2]=a;Is(d,312374,g)}a=c[b+40>>2]|0;if(!(Bm(c[f>>2]|0,a)|0)){c[h>>2]=a;Is(d,312384,h)}if((c[e>>2]|0)!=3){c[e>>2]=2;aa=i;return 0}xs(d);c[e>>2]=2;aa=i;return 0}function Xt(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=aa;aa=aa+48|0;h=i;f=b+20|0;c[f>>2]=(c[f>>2]|0)+-2;f=b+32|0;e=c[f>>2]|0;g=e+-40|0;d=c[e+-12>>2]|0;if(d|0){c[e+-8>>2]=d;$A(d)}d=c[e+-24>>2]|0;if(d|0){c[e+-20>>2]=d;$A(d)}if((a[g+11>>0]|0)<0)$A(c[g>>2]|0);c[f>>2]=g;Am(h,11);g=c[h>>2]|0;h=Uz(g)|0;xs(b);Qn(c[b+12>>2]|0,g,h,0,0);c[b+24>>2]=2;aa=i;return}function Yt(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+16|0;j=u;i=Uz(f)|0;xs(b);g=b+12|0;Qn(c[g>>2]|0,f,i,0,0);i=b+24|0;c[i>>2]=1;h=a[e+11>>0]|0;f=h<<24>>24<0;h=((f?c[e+4>>2]|0:h&255)|0)==0;if(!h){s=f?c[e>>2]|0:e;t=Uz(s)|0;xs(b);Qn(c[g>>2]|0,s,t,0,0);c[i>>2]=1}n=e+52|0;Bs(b,n,330308);s=e+64|0;Bs(b,s,330329);if(h){c[j>>2]=((c[b+32>>2]|0)-(c[b+28>>2]|0)|0)/40|0;Is(b,312397,j)}if((c[i>>2]|0)==3)xs(b);c[i>>2]=3;r=b+28|0;t=b+32|0;l=c[t>>2]|0;q=b+36|0;p=c[q>>2]|0;g=p;if(l>>>0<p>>>0){cB(l,e);c[l+12>>2]=d;h=l+16|0;c[h>>2]=0;k=l+20|0;c[k>>2]=0;g=l+24|0;c[g>>2]=0;j=e+56|0;f=(c[j>>2]|0)-(c[n>>2]|0)|0;i=f>>2;if(f|0){if(i>>>0>1073741823)HB();d=_A(f)|0;c[k>>2]=d;c[h>>2]=d;c[g>>2]=d+(i<<2);g=c[n>>2]|0;f=(c[j>>2]|0)-g|0;if((f|0)>0){sC(d|0,g|0,f|0)|0;c[k>>2]=d+(f>>>2<<2)}}d=l+28|0;c[d>>2]=0;k=l+32|0;c[k>>2]=0;i=l+36|0;c[i>>2]=0;h=e+68|0;f=(c[h>>2]|0)-(c[s>>2]|0)|0;g=f>>2;if(f|0){if(g>>>0>1073741823)HB();j=_A(f)|0;c[k>>2]=j;c[d>>2]=j;c[i>>2]=j+(g<<2);g=c[s>>2]|0;f=(c[h>>2]|0)-g|0;if((f|0)>0){sC(j|0,g|0,f|0)|0;c[k>>2]=j+(f>>>2<<2)}}c[t>>2]=(c[t>>2]|0)+40;b=b+20|0;t=c[b>>2]|0;t=t+2|0;c[b>>2]=t;aa=u;return}h=c[r>>2]|0;m=(l-h|0)/40|0;f=m+1|0;if(f>>>0>107374182)HB();l=(g-h|0)/40|0;p=l<<1;f=l>>>0<53687091?(p>>>0<f>>>0?f:p):107374182;do if(f)if(f>>>0>107374182)U();else{o=_A(f*40|0)|0;break}else o=0;while(0);g=o+(m*40|0)|0;p=o+(f*40|0)|0;cB(g,e);c[o+(m*40|0)+12>>2]=d;l=o+(m*40|0)+16|0;c[l>>2]=0;d=o+(m*40|0)+20|0;c[d>>2]=0;k=o+(m*40|0)+24|0;c[k>>2]=0;f=c[n>>2]|0;j=(c[e+56>>2]|0)-f|0;i=j>>2;if(j|0){if(i>>>0>1073741823)HB();h=_A(j)|0;c[d>>2]=h;c[l>>2]=h;c[k>>2]=h+(i<<2);if((j|0)>0){sC(h|0,f|0,j|0)|0;c[d>>2]=h+(j>>>2<<2)}}l=o+(m*40|0)+28|0;c[l>>2]=0;k=o+(m*40|0)+32|0;c[k>>2]=0;d=o+(m*40|0)+36|0;c[d>>2]=0;j=c[s>>2]|0;i=(c[e+68>>2]|0)-j|0;h=i>>2;if(i|0){if(h>>>0>1073741823)HB();f=_A(i)|0;c[k>>2]=f;c[l>>2]=f;c[d>>2]=f+(h<<2);if((i|0)>0){sC(f|0,j|0,i|0)|0;c[k>>2]=f+(i>>>2<<2)}}i=g+40|0;h=c[r>>2]|0;f=c[t>>2]|0;if((f|0)==(h|0)){f=g;j=h;g=h}else{do{n=g;g=g+-40|0;o=f;f=f+-40|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[n+-28>>2]=c[o+-28>>2];s=n+-24|0;e=o+-24|0;c[s>>2]=0;m=n+-20|0;c[m>>2]=0;l=n+-16|0;c[l>>2]=0;c[s>>2]=c[e>>2];s=o+-20|0;c[m>>2]=c[s>>2];m=o+-16|0;c[l>>2]=c[m>>2];c[m>>2]=0;c[s>>2]=0;c[e>>2]=0;e=n+-12|0;s=o+-12|0;c[e>>2]=0;m=n+-8|0;c[m>>2]=0;n=n+-4|0;c[n>>2]=0;c[e>>2]=c[s>>2];e=o+-8|0;c[m>>2]=c[e>>2];o=o+-4|0;c[n>>2]=c[o>>2];c[o>>2]=0;c[e>>2]=0;c[s>>2]=0}while((f|0)!=(h|0));f=g;j=c[r>>2]|0;g=c[t>>2]|0}c[r>>2]=f;c[t>>2]=i;c[q>>2]=p;h=j;if((g|0)!=(h|0))do{f=c[g+-12>>2]|0;if(f|0){c[g+-8>>2]=f;$A(f)}f=c[g+-24>>2]|0;if(f|0){c[g+-20>>2]=f;$A(f)}g=g+-40|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0)}while((g|0)!=(h|0));if(!j){b=b+20|0;t=c[b>>2]|0;t=t+2|0;c[b>>2]=t;aa=u;return}$A(j);b=b+20|0;t=c[b>>2]|0;t=t+2|0;c[b>>2]=t;aa=u;return}function Zt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i+8|0;g=i;if(c[d+20>>2]|0){g=d+24|0;g=(a[g+11>>0]|0)<0?c[g>>2]|0:g;h=Uz(g)|0;xs(b);Qn(c[b+12>>2]|0,g,h,0,0);h=b+24|0;c[h>>2]=e;aa=i;return}d=c[d+24>>2]|0;f=((c[b+32>>2]|0)-(c[b+28>>2]|0)|0)/40|0;if(f>>>0>d>>>0){c[g>>2]=d;c[g+4>>2]=f+~d;Is(b,312460,g);h=b+24|0;c[h>>2]=e;aa=i;return}else{c[h>>2]=d;Is(b,312471,h);h=b+24|0;c[h>>2]=e;aa=i;return}}function _t(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;c[a>>2]=c[b>>2];g=a+4|0;h=b+4|0;c[g>>2]=0;k=a+8|0;c[k>>2]=0;f=a+12|0;c[f>>2]=0;j=b+8|0;d=(c[j>>2]|0)-(c[h>>2]|0)|0;i=(d|0)/20|0;if(!d){a=a+16|0;k=b+16|0;k=c[k>>2]|0;c[a>>2]=k;return}if(i>>>0>214748364)HB();e=_A(d)|0;c[k>>2]=e;c[g>>2]=e;c[f>>2]=e+(i*20|0);d=c[h>>2]|0;f=c[j>>2]|0;if((d|0)==(f|0)){a=a+16|0;k=b+16|0;k=c[k>>2]|0;c[a>>2]=k;return}do{_t(e,d);d=d+20|0;e=(c[k>>2]|0)+20|0;c[k>>2]=e}while((d|0)!=(f|0));a=a+16|0;k=b+16|0;k=c[k>>2]|0;c[a>>2]=k;return} +function jf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=aa;aa=aa+16|0;f=h;g=_A(48)|0;b=c[b>>2]|0;i=g+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;c[i+24>>2]=0;c[g+32>>2]=42;c[g>>2]=287996;c[g+36>>2]=b;c[g+40>>2]=1<<d;c[g+44>>2]=e;e=c[a+36>>2]|0;d=c[(c[a+4>>2]|0)+8>>2]|0;b=Uz(e)|0;c[g+12>>2]=e;c[g+16>>2]=b;c[g+20>>2]=d;d=g+24|0;c[d>>2]=0;c[d+4>>2]=0;d=c[a+20>>2]|0;b=(c[a+24>>2]|0)-d|0;e=(b|0)/12|0;if(!b){c[f>>2]=0;c[f+4>>2]=e;Mg(a,292825,f);ma[c[(c[g>>2]|0)+4>>2]&255](g);i=1;aa=h;return i|0}e=c[d+((e+-1|0)*12|0)+4>>2]|0;b=e+4|0;d=c[b>>2]|0;if(!d)d=e;else{c[g+8>>2]=d;d=d+4|0}c[d>>2]=g;c[b>>2]=g;i=e+8|0;c[i>>2]=(c[i>>2]|0)+1;i=0;aa=h;return i|0}function kf(a,b){a=a|0;b=b|0;return 0}function lf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+148|0;g=a+156|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+152|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function mf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;h=aa;aa=aa+64|0;k=h+24|0;m=h;i=h+20|0;n=b+4|0;p=b+36|0;o=c[p>>2]|0;l=c[(c[n>>2]|0)+8>>2]|0;d=Uz(o)|0;j=_A(116)|0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=o;c[j+16>>2]=d;c[j+20>>2]=l;l=j+24|0;c[l>>2]=0;c[l+4>>2]=0;c[j+32>>2]=6;c[j>>2]=287980;Wn(j+36|0,0,0);l=j+48|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;El(l,-1,k);d=j+84|0;a[d>>0]=0;o=j+92|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[o+20>>2]=0;p=c[p>>2]|0;n=c[(c[n>>2]|0)+8>>2]|0;o=m+12|0;c[o>>2]=0;c[o+4>>2]=0;o=Uz(p)|0;c[m>>2]=p;c[m+4>>2]=o;c[m+8>>2]=n;El(k,e,m);Hl(l,k)|0;Ml(k);a[d>>0]=f&1;c[j+88>>2]=g;d=c[b+12>>2]|0;c[i>>2]=j;el(d,i);d=c[i>>2]|0;c[i>>2]=0;if(!d){aa=h;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=h;return 0}function nf(a,b){a=a|0;b=b|0;c[a+32>>2]=(c[(c[(c[a+12>>2]|0)+148>>2]|0)+(b<<2)>>2]|0)+56;return 0}function of(a,b){a=a|0;b=b|0;c[a+32>>2]=0;return 0}function pf(a,b,d){a=a|0;b=b|0;d=d|0;Tg((c[(c[(c[a+12>>2]|0)+148>>2]|0)+(b<<2)>>2]|0)+68|0,d);return 0}function qf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+32|0;e=f;b=c[(c[(c[a+12>>2]|0)+148>>2]|0)+(b<<2)>>2]|0;d=b+72|0;a=c[d>>2]|0;if(a>>>0<(c[b+76>>2]|0)>>>0){c[a>>2]=0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;El(a+4|0,-1,e);c[d>>2]=(c[d>>2]|0)+40;aa=f;return 0}else{Sg(b+68|0);aa=f;return 0}return 0}function rf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=aa;aa=aa+96|0;f=h+56|0;g=h+20|0;i=h;e=c[(c[(c[a+12>>2]|0)+148>>2]|0)+(b<<2)>>2]|0;j=c[a+36>>2]|0;b=c[(c[a+4>>2]|0)+8>>2]|0;a=i+12|0;c[a>>2]=0;c[a+4>>2]=0;a=Uz(j)|0;c[i>>2]=j;c[i+4>>2]=a;c[i+8>>2]=b;El(g,d,i);d=e+72|0;b=c[d>>2]|0;if(b>>>0<(c[e+76>>2]|0)>>>0){Gl(f,g);c[b>>2]=1;Il(b+4|0,f);Ml(f);c[d>>2]=(c[d>>2]|0)+40;Ml(g);aa=h;return 0}else{Rg(e+68|0,g);Ml(g);aa=h;return 0}return 0}function sf(a,b){a=a|0;b=b|0;return 0}function tf(a){a=a|0;return 0}function uf(a,b){a=a|0;b=b|0;return 0}function vf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;a=c[a+12>>2]|0;h=a+172|0;g=a+180|0;f=c[h>>2]|0;if((c[g>>2]|0)-f>>2>>>0>=b>>>0)return 0;a=a+176|0;if(b>>>0>1073741823)U();e=(c[a>>2]|0)-f|0;d=_A(b<<2)|0;if((e|0)>0)sC(d|0,f|0,e|0)|0;c[h>>2]=d;c[a>>2]=d+(e>>2<<2);c[g>>2]=d+(b<<2);if(!f)return 0;$A(f);return 0}function wf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=aa;aa=aa+64|0;j=g+24|0;l=g;h=g+20|0;m=b+4|0;o=b+36|0;n=c[o>>2]|0;k=c[(c[m>>2]|0)+8>>2]|0;d=Uz(n)|0;i=_A(112)|0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=n;c[i+16>>2]=d;c[i+20>>2]=k;k=i+24|0;c[k>>2]=0;c[k+4>>2]=0;c[i+32>>2]=8;c[i>>2]=287964;Wn(i+36|0,0,0);k=i+48|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;El(k,-1,j);d=i+84|0;a[d>>0]=0;n=i+88|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;o=c[o>>2]|0;m=c[(c[m>>2]|0)+8>>2]|0;n=l+12|0;c[n>>2]=0;c[n+4>>2]=0;n=Uz(o)|0;c[l>>2]=o;c[l+4>>2]=n;c[l+8>>2]=m;El(j,e,l);Hl(k,j)|0;Ml(j);a[d>>0]=f&1;d=c[b+12>>2]|0;c[h>>2]=i;cl(d,h);d=c[h>>2]|0;c[h>>2]=0;if(!d){aa=g;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=g;return 0}function xf(a,b){a=a|0;b=b|0;c[a+32>>2]=(c[(c[(c[a+12>>2]|0)+172>>2]|0)+(b<<2)>>2]|0)+52;return 0}function yf(a,b){a=a|0;b=b|0;c[a+32>>2]=0;return 0}function zf(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[(c[(c[b+12>>2]|0)+172>>2]|0)+(d<<2)>>2]|0;m=g+64|0;l=g+68|0;b=c[l>>2]|0;i=c[m>>2]|0;k=b-i|0;j=i;a:do if(k>>>0<f>>>0){d=f-k|0;h=g+72|0;g=c[h>>2]|0;if((g-b|0)>>>0>=d>>>0)while(1){a[b>>0]=0;b=(c[l>>2]|0)+1|0;c[l>>2]=b;d=d+-1|0;if(!d){n=15;break a}}if((f|0)<0)HB();b=g-i|0;g=b<<1;g=b>>>0<1073741823?(g>>>0<f>>>0?f:g):2147483647;if(!g)b=0;else b=_A(g)|0;uC(b+k|0,0,d|0)|0;if((k|0)>0)sC(b|0,j|0,k|0)|0;c[m>>2]=b;c[l>>2]=b+f;c[h>>2]=b+g;if(i|0)$A(j)}else if(k>>>0>f>>>0){c[l>>2]=j+f;n=15}else n=15;while(0);if((n|0)==15?(f|0)==0:0)return 0;sC(c[m>>2]|0,e|0,f|0)|0;return 0}function Af(a,b){a=a|0;b=b|0;return 0}function Bf(a){a=a|0;return 0}function Cf(a,b){a=a|0;b=b|0;return 0}function Df(a,b){a=a|0;b=b|0;return 0}function Ef(a){a=a|0;return 0}function Ff(a,b){a=a|0;b=b|0;return 0}function Gf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Hf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+32|0;i=m+20|0;g=m+8|0;l=m;f=c[e+4>>2]|0;if(!f){aa=m;return 0}j=c[e>>2]|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;h=i+11|0;a[h>>0]=1;a[i>>0]=36;a[i+1>>0]=0;Wn(g,j,f);j=a[g+11>>0]|0;f=j<<24>>24<0;e=c[g>>2]|0;uB(i,f?e:g,f?c[g+4>>2]|0:j&255)|0;j=c[i>>2]|0;k=i+4|0;c[l>>2]=c[k>>2];b[l+4>>1]=b[k+4>>1]|0;a[l+6>>0]=a[k+6>>0]|0;k=a[i+11>>0]|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;if(f){$A(e);if((a[h>>0]|0)<0)$A(c[i>>2]|0)}e=c[d+12>>2]|0;g=e+20|0;f=g+11|0;if((a[f>>0]|0)<0){a[c[g>>2]>>0]=0;c[e+24>>2]=0;e=g}else{a[g>>0]=0;a[f>>0]=0;e=g}pB(g);c[e>>2]=j;j=e+4|0;c[j>>2]=c[l>>2];b[j+4>>1]=b[l+4>>1]|0;a[j+6>>0]=a[l+6>>0]|0;a[e+11>>0]=k;aa=m;return 0}function If(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Jf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=aa;aa=aa+16|0;e=f;d=c[a+12>>2]|0;d=(c[d+80>>2]|0)-(c[d+76>>2]|0)>>2;if(d>>>0>=b>>>0){e=0;aa=f;return e|0}c[e>>2]=b;c[e+4>>2]=d;Mg(a,292599,e);e=1;aa=f;return e|0}function Kf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=aa;aa=aa+64|0;l=n+48|0;m=n+24|0;j=n+12|0;k=n;f=c[e+4>>2]|0;if(!f){aa=n;return 0}i=b+12|0;h=c[i>>2]|0;g=c[(c[h+76>>2]|0)+(d<<2)>>2]|0;h=h+216|0;o=c[e>>2]|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;e=l+11|0;a[e>>0]=1;a[l>>0]=36;a[l+1>>0]=0;Wn(m,o,f);o=a[m+11>>0]|0;f=o<<24>>24<0;b=c[m>>2]|0;uB(l,f?b:m,f?c[m+4>>2]|0:o&255)|0;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;if(f){$A(b);if((a[e>>0]|0)<0)$A(c[l>>2]|0)}Eg(j,h,k);if((a[k+11>>0]|0)<0)$A(c[k>>2]|0);lB(g,j)|0;o=c[i>>2]|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;c[m+16>>2]=0;c[m+20>>2]=d;o=o+216|0;Og(l,o,j,m);Gg(o,c[l>>2]|0);if((a[j+11>>0]|0)<0)$A(c[j>>2]|0);aa=n;return 0}function Lf(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Mf(a,b){a=a|0;b=b|0;return 0}function Nf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=aa;aa=aa+16|0;e=f;b=c[(c[(c[a+12>>2]|0)+76>>2]|0)+(b<<2)>>2]|0;g=(c[b+56>>2]|0)-(c[b+52>>2]|0)>>2;b=g+(Ok(c[b+76>>2]|0,c[b+80>>2]|0)|0)|0;if(b>>>0>=d>>>0){g=0;aa=f;return g|0}c[e>>2]=d;c[e+4>>2]=b;Mg(a,292548,e);g=1;aa=f;return g|0}function Of(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=aa;aa=aa+64|0;j=m+40|0;k=m+24|0;i=m+12|0;l=m;h=c[f+4>>2]|0;if(!h){aa=m;return 0}g=(c[(c[(c[b+12>>2]|0)+76>>2]|0)+(d<<2)>>2]|0)+88|0;f=c[f>>2]|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;b=j+11|0;a[b>>0]=1;a[j>>0]=36;a[j+1>>0]=0;Wn(k,f,h);f=a[k+11>>0]|0;h=f<<24>>24<0;d=c[k>>2]|0;uB(j,h?d:k,h?c[k+4>>2]|0:f&255)|0;c[l>>2]=c[j>>2];c[l+4>>2]=c[j+4>>2];c[l+8>>2]=c[j+8>>2];c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;if(h){$A(d);if((a[b>>0]|0)<0)$A(c[j>>2]|0)}Eg(i,g,l);c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[j+20>>2]=e;Fg(g,i,j);if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);if((a[l+11>>0]|0)<0)$A(c[l>>2]|0);aa=m;return 0}function Pf(a){a=a|0;return 0}function Qf(a,b){a=a|0;b=b|0;return 0}function Rf(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Sf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function Tf(a){a=a|0;return 0}function Uf(a,b){a=a|0;b=b|0;return 0}function Vf(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function Wf(a,b){a=a|0;b=b|0;return 0}function Xf(a,b){a=a|0;b=b|0;return 0}function Yf(a){a=a|0;return 0}function Zf(a,b){a=a|0;b=b|0;return 0}function _f(a,b){a=a|0;b=b|0;return 0}function $f(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function ag(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return 0}function bg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function cg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function dg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function eg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function fg(a,b){a=a|0;b=b|0;return 0}function gg(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function hg(a,b){a=a|0;b=b|0;return 0}function ig(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function jg(a,b){a=a|0;b=b|0;return 0}function kg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function lg(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function mg(a){a=a|0;return 0}function ng(a,b){a=a|0;b=b|0;return 0}function og(a,b){a=a|0;b=b|0;return 0}function pg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;j=aa;aa=aa+64|0;f=j+24|0;k=j;i=j+20|0;l=b+4|0;n=b+36|0;g=c[n>>2]|0;m=c[(c[l>>2]|0)+8>>2]|0;d=Uz(g)|0;h=_A(112)|0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=g;c[h+16>>2]=d;c[h+20>>2]=m;m=h+24|0;c[m>>2]=0;c[m+4>>2]=0;c[h+32>>2]=10;c[h>>2]=287948;Wn(h+36|0,0,0);m=h+48|0;a[m>>0]=0;d=h+52|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(d,-1,f);g=h+88|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;a[m>>0]=1;n=c[n>>2]|0;l=c[(c[l>>2]|0)+8>>2]|0;m=k+12|0;c[m>>2]=0;c[m+4>>2]=0;m=Uz(n)|0;c[k>>2]=n;c[k+4>>2]=m;c[k+8>>2]=l;El(f,e,k);Hl(d,f)|0;Ml(f);f=b+12|0;d=c[f>>2]|0;b=c[(c[d+124>>2]|0)+(e<<2)>>2]|0;e=b+12|0;if((e|0)!=(g|0)){Bg(g,c[e>>2]|0,c[b+16>>2]|0);Bg(h+100|0,c[b+24>>2]|0,c[b+28>>2]|0);d=c[f>>2]|0}c[i>>2]=h;gl(d,i);d=c[i>>2]|0;c[i>>2]=0;if(!d){aa=j;return 0}ma[c[(c[d>>2]|0)+4>>2]&255](d);aa=j;return 0}function qg(a){a=a|0;return 0}function rg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=aa;aa=aa+64|0;j=h+40|0;i=h;f=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;e=j+12|0;c[e>>2]=0;c[e+4>>2]=0;e=Uz(f)|0;c[j>>2]=f;c[j+4>>2]=e;c[j+8>>2]=g;g=c[a+32>>2]|0;Pl(i,d,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function sg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=aa;aa=aa+64|0;j=h+40|0;i=h;b=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;f=j+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(b)|0;c[j>>2]=b;c[j+4>>2]=f;c[j+8>>2]=g;g=c[a+32>>2]|0;Ql(i,d,e,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function tg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=aa;aa=aa+80|0;e=h+64|0;j=h+40|0;i=h;b=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;f=j+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(b)|0;c[j>>2]=b;c[j+4>>2]=f;c[j+8>>2]=g;g=c[a+32>>2]|0;c[e>>2]=c[d>>2];c[e+4>>2]=c[d+4>>2];c[e+8>>2]=c[d+8>>2];c[e+12>>2]=c[d+12>>2];Rl(i,e,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function ug(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=aa;aa=aa+64|0;b=h+36|0;g=h;i=c[a+36>>2]|0;f=c[(c[a+4>>2]|0)+8>>2]|0;e=b+12|0;c[e>>2]=0;c[e+4>>2]=0;e=Uz(i)|0;c[b>>2]=i;c[b+4>>2]=e;c[b+8>>2]=f;f=c[a+32>>2]|0;El(g,d,b);a=_A(72)|0;c[a+4>>2]=0;e=a+8|0;c[e>>2]=0;d=a+12|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[a+32>>2]=18;c[a>>2]=287932;Il(a+36|0,g);d=f+4|0;b=c[d>>2]|0;if(!b){i=f;c[i>>2]=a;c[d>>2]=a;i=f+8|0;f=c[i>>2]|0;f=f+1|0;c[i>>2]=f;Ml(g);aa=h;return 0}else{c[e>>2]=b;i=b+4|0;c[i>>2]=a;c[d>>2]=a;i=f+8|0;f=c[i>>2]|0;f=f+1|0;c[i>>2]=f;Ml(g);aa=h;return 0}return 0}function vg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=aa;aa=aa+64|0;j=h+40|0;i=h;f=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;e=j+12|0;c[e>>2]=0;c[e+4>>2]=0;e=Uz(f)|0;c[j>>2]=f;c[j+4>>2]=e;c[j+8>>2]=g;g=c[a+32>>2]|0;Nl(i,d,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function wg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=aa;aa=aa+64|0;j=h+40|0;i=h;b=c[a+36>>2]|0;g=c[(c[a+4>>2]|0)+8>>2]|0;f=j+12|0;c[f>>2]=0;c[f+4>>2]=0;f=Uz(b)|0;c[j>>2]=b;c[j+4>>2]=f;c[j+8>>2]=g;g=c[a+32>>2]|0;Ol(i,d,e,j);e=_A(80)|0;c[e+4>>2]=0;f=e+8|0;c[f>>2]=0;b=e+12|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];c[b+16>>2]=c[j+16>>2];c[e+32>>2]=15;c[e>>2]=287916;b=e+40|0;a=i;d=b+40|0;do{c[b>>2]=c[a>>2];b=b+4|0;a=a+4|0}while((b|0)<(d|0));a=g+4|0;b=c[a>>2]|0;if(!b){j=g;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}else{c[f>>2]=b;j=b+4|0;c[j>>2]=e;c[a>>2]=e;j=g+8|0;i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;aa=h;return 0}return 0}function xg(a){a=a|0;return}function yg(a){a=a|0;$A(a);return}function zg(a){a=a|0;c[a>>2]=287932;Ml(a+36|0);return}function Ag(a){a=a|0;c[a>>2]=287932;Ml(a+36|0);$A(a);return}function Bg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=d;i=b;h=l-i|0;f=h>>2;g=a+8|0;e=c[g>>2]|0;j=c[a>>2]|0;k=j;if(f>>>0<=e-j>>2>>>0){h=a+4|0;g=(c[h>>2]|0)-j>>2;f=f>>>0>g>>>0;g=f?b+(g<<2)|0:d;d=g;e=d-i|0;if(e|0)tC(j|0,b|0,e|0)|0;if(!f){c[h>>2]=k+(e>>2<<2);return}e=l-d|0;if((e|0)<=0)return;sC(c[h>>2]|0,g|0,e|0)|0;c[h>>2]=(c[h>>2]|0)+(e>>>2<<2);return}if(j){e=a+4|0;c[e>>2]=j;$A(j);c[g>>2]=0;c[e>>2]=0;c[a>>2]=0;e=0}if(f>>>0>1073741823)HB();l=e>>1;f=e>>2>>>0<536870911?(l>>>0<f>>>0?f:l):1073741823;if(f>>>0>1073741823)HB();d=_A(f<<2)|0;e=a+4|0;c[e>>2]=d;c[a>>2]=d;c[g>>2]=d+(f<<2);if((h|0)<=0)return;sC(d|0,b|0,h|0)|0;c[e>>2]=d+(h>>>2<<2);return}function Cg(b){b=b|0;var d=0,e=0;c[b>>2]=287948;e=b+36|0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[e+11>>0]|0)>=0)return;$A(c[e>>2]|0);return}function Dg(b){b=b|0;var d=0,e=0;c[b>>2]=287948;e=b+36|0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[e+11>>0]|0)>=0){$A(b);return}$A(c[e>>2]|0);$A(b);return}function Eg(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+32|0;o=u+24|0;r=u+12|0;s=u;cB(d,f);if(!(Jg(e,d)|0)){aa=u;return}h=s+11|0;l=s+4|0;k=d+11|0;j=d+4|0;i=r+11|0;p=d+11|0;m=1;while(1){Kg(r,f);yB(s,m);n=a[h>>0]|0;t=n<<24>>24<0;g=c[s>>2]|0;uB(r,t?g:s,t?c[l>>2]|0:n&255)|0;n=c[r>>2]|0;q=r+4|0;c[o>>2]=c[q>>2];b[o+4>>1]=b[q+4>>1]|0;a[o+6>>0]=a[q+6>>0]|0;q=a[r+11>>0]|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;if((a[k>>0]|0)<0){a[c[d>>2]>>0]=0;c[j>>2]=0}else{a[d>>0]=0;a[k>>0]=0}pB(d);c[d>>2]=n;c[j>>2]=c[o>>2];b[j+4>>1]=b[o+4>>1]|0;a[j+6>>0]=a[o+6>>0]|0;a[p>>0]=q;c[o>>2]=0;b[o+4>>1]=0;a[o+6>>0]=0;if(t)$A(g);if((a[i>>0]|0)<0)$A(c[r>>2]|0);if(!(Jg(e,d)|0))break;else m=m+1|0}aa=u;return}function Fg(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;j=_A(44)|0;h=j+8|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;i=j+20|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[i+16>>2]=c[f+16>>2];c[i+20>>2]=c[f+20>>2];i=a[j+19>>0]|0;g=i<<24>>24<0;h=g?c[h>>2]|0:h;i=g?c[j+12>>2]|0:i&255;if(i>>>0>3){f=h;e=i;g=i;while(1){l=v(d[f>>0]|d[f+1>>0]<<8|d[f+2>>0]<<16|d[f+3>>0]<<24,1540483477)|0;e=(v(l>>>24^l,1540483477)|0)^(v(e,1540483477)|0);g=g+-4|0;if(g>>>0<=3)break;else f=f+4|0}l=i+-4|0;f=l&-4;h=h+(f+4)|0;f=l-f|0}else{e=i;f=i}switch(f|0){case 3:{e=(d[h+2>>0]|0)<<16^e;k=7;break}case 2:{k=7;break}case 1:{k=8;break}default:{}}if((k|0)==7){e=(d[h+1>>0]|0)<<8^e;k=8}if((k|0)==8)e=v(e^(d[h>>0]|0),1540483477)|0;l=v(e>>>13^e,1540483477)|0;c[j+4>>2]=l>>>15^l;c[j>>2]=0;Gg(b,j);return}function Gg(b,e){b=b|0;e=e|0;var g=0,h=0,i=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;K=e+8|0;I=K+11|0;l=a[I>>0]|0;H=l<<24>>24<0;J=e+12|0;j=H?c[K>>2]|0:K;l=H?c[J>>2]|0:l&255;if(l>>>0>3){h=j;g=l;i=l;while(1){H=v(d[h>>0]|d[h+1>>0]<<8|d[h+2>>0]<<16|d[h+3>>0]<<24,1540483477)|0;g=(v(H>>>24^H,1540483477)|0)^(v(g,1540483477)|0);i=i+-4|0;if(i>>>0<=3)break;else h=h+4|0}H=l+-4|0;h=H&-4;j=j+(h+4)|0;h=H-h|0}else{g=l;h=l}switch(h|0){case 3:{g=d[j+2>>0]<<16^g;L=7;break}case 2:{L=7;break}case 1:{L=8;break}default:{}}if((L|0)==7){g=d[j+1>>0]<<8^g;L=8}if((L|0)==8)g=v(g^d[j>>0],1540483477)|0;h=v(g>>>13^g,1540483477)|0;h=h>>>15^h;g=e+4|0;c[g>>2]=h;j=b+4|0;i=c[j>>2]|0;H=b+12|0;m=+(((c[H>>2]|0)+1|0)>>>0);k=+f[b+16>>2];if((i|0)==0|k*+(i>>>0)<m){x=i<<1|(i>>>0<3|(i+-1&i|0)!=0)&1;E=~~+u(+(m/k))>>>0;Hg(b,x>>>0<E>>>0?E:x);x=c[g>>2]|0;E=c[j>>2]|0}else{x=h;E=i}F=E+-1|0;G=(F&E|0)==0;if(!G)if(x>>>0<E>>>0)D=x;else D=(x>>>0)%(E>>>0)|0;else D=F&x;i=c[(c[b>>2]|0)+(D<<2)>>2]|0;if(!i){g=b+8|0;c[e>>2]=c[g>>2];c[g>>2]=e;c[(c[b>>2]|0)+(D<<2)>>2]=g;g=c[e>>2]|0;if(!g){b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}g=c[g+4>>2]|0;if(!G){if(g>>>0>=E>>>0)g=(g>>>0)%(E>>>0)|0}else g=g&F;c[(c[b>>2]|0)+(g<<2)>>2]=e;b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}g=c[i>>2]|0;a:do if(!g){h=i;g=i}else{if(G){p=g;o=0;h=i;g=i;while(1){i=c[p+4>>2]|0;if((i&F|0)!=(D|0))break a;b:do if((i|0)==(x|0)?(q=p+8|0,s=a[q+11>>0]|0,t=s<<24>>24<0,s=s&255,r=t?c[p+12>>2]|0:s,C=a[I>>0]|0,w=C<<24>>24<0,(r|0)==((w?c[J>>2]|0:C&255)|0)):0){j=c[q>>2]|0;n=t?j:q;i=w?c[K>>2]|0:K;l=(r|0)==0;j=j&255;if(t){if(l){g=1;break}i=(Tz(n,i,r)|0)==0;L=38;break}if(!l)if((a[i>>0]|0)==j<<24>>24){j=s;l=q;while(1){j=j+-1|0;l=l+1|0;if(!j){g=1;break b}i=i+1|0;if((a[l>>0]|0)!=(a[i>>0]|0)){i=0;L=38;break}}}else{i=0;L=38}else g=1}else{i=0;L=38}while(0);if((L|0)==38){L=0;if(i|o^1)g=i;else break a}h=c[p>>2]|0;if(!h){h=p;g=p;break a}else{B=p;C=p;p=h;o=o|g;g=B;h=C}}}p=g;o=0;h=i;g=i;while(1){i=c[p+4>>2]|0;if(i>>>0<E>>>0)j=i;else j=(i>>>0)%(E>>>0)|0;if((j|0)!=(D|0))break a;c:do if((i|0)==(x|0)?(y=p+8|0,A=a[y+11>>0]|0,B=A<<24>>24<0,A=A&255,z=B?c[p+12>>2]|0:A,w=a[I>>0]|0,C=w<<24>>24<0,(z|0)==((C?c[J>>2]|0:w&255)|0)):0){j=c[y>>2]|0;n=B?j:y;i=C?c[K>>2]|0:K;l=(z|0)==0;j=j&255;if(B){if(l){g=1;break}i=(Tz(n,i,z)|0)==0;L=53;break}if(!l)if((a[i>>0]|0)==j<<24>>24){j=A;l=y;while(1){j=j+-1|0;l=l+1|0;if(!j){g=1;break c}i=i+1|0;if((a[l>>0]|0)!=(a[i>>0]|0)){i=0;L=53;break}}}else{i=0;L=53}else g=1}else{i=0;L=53}while(0);if((L|0)==53){L=0;if(i|o^1)g=i;else break a}h=c[p>>2]|0;if(!h){h=p;g=p;break}else{t=p;w=p;p=h;o=o|g;g=t;h=w}}}while(0);c[e>>2]=c[g>>2];c[h>>2]=e;g=c[e>>2]|0;if(!g){b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}g=c[g+4>>2]|0;if(!G){if(g>>>0>=E>>>0)g=(g>>>0)%(E>>>0)|0}else g=g&F;if((g|0)==(D|0)){b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}c[(c[b>>2]|0)+(g<<2)>>2]=e;b=c[H>>2]|0;b=b+1|0;c[H>>2]=b;return}function Hg(a,b){a=a|0;b=b|0;var d=0,e=0,g=0;if((b|0)!=1){if(b+-1&b)b=YA(b)|0}else b=2;e=c[a+4>>2]|0;if(b>>>0>e>>>0){Ig(a,b);return}if(b>>>0>=e>>>0)return;d=~~+u(+(+((c[a+12>>2]|0)>>>0)/+f[a+16>>2]))>>>0;if(e>>>0>2&(e+-1&e|0)==0){g=1<<32-(w(d+-1|0)|0);d=d>>>0<2?d:g}else d=YA(d)|0;b=b>>>0<d>>>0?d:b;if(b>>>0>=e>>>0)return;Ig(a,b);return}function Ig(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=b+4|0;if(!d){e=c[b>>2]|0;c[b>>2]=0;if(e|0)$A(e);c[f>>2]=0;return}if(d>>>0>1073741823)U();r=_A(d<<2)|0;e=c[b>>2]|0;c[b>>2]=r;if(e|0)$A(e);c[f>>2]=d;e=0;do{c[(c[b>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=(d|0));f=b+8|0;g=c[f>>2]|0;if(!g)return;e=c[g+4>>2]|0;q=d+-1|0;r=(q&d|0)==0;if(!r){if(e>>>0>=d>>>0)e=(e>>>0)%(d>>>0)|0}else e=e&q;c[(c[b>>2]|0)+(e<<2)>>2]=f;f=c[g>>2]|0;if(!f)return;p=g;while(1){g=c[f+4>>2]|0;if(!r){if(g>>>0>=d>>>0)g=(g>>>0)%(d>>>0)|0}else g=g&q;do if((g|0)==(e|0))g=f;else{h=(c[b>>2]|0)+(g<<2)|0;if(!(c[h>>2]|0)){c[h>>2]=p;e=g;g=f;break}h=c[f>>2]|0;a:do if(!h)h=f;else{n=f+8|0;m=a[n+11>>0]|0;k=m<<24>>24<0;m=m&255;o=k?c[f+12>>2]|0:m;l=(o|0)==0;if(k){i=f;while(1){j=h+8|0;m=a[j+11>>0]|0;k=m<<24>>24<0;if((o|0)!=((k?c[h+12>>2]|0:m&255)|0)){h=i;break a}if(!l?Tz(c[n>>2]|0,k?c[j>>2]|0:j,o)|0:0){h=i;break a}i=c[h>>2]|0;if(!i)break a;else{m=h;h=i;i=m}}}if(l){i=f;while(1){o=a[h+8+11>>0]|0;if((o<<24>>24<0?c[h+12>>2]|0:o&255)|0){h=i;break a}i=c[h>>2]|0;if(!i)break a;else{o=h;h=i;i=o}}}l=f;while(1){i=h+8|0;k=a[i+11>>0]|0;j=k<<24>>24<0;if((o|0)!=((j?c[h+12>>2]|0:k&255)|0)){h=l;break a}i=j?c[i>>2]|0:i;if((a[i>>0]|0)!=(c[n>>2]&255)<<24>>24){h=l;break a}j=m;k=n;while(1){j=j+-1|0;k=k+1|0;if(!j)break;i=i+1|0;if((a[k>>0]|0)!=(a[i>>0]|0)){h=l;break a}}i=c[h>>2]|0;if(!i)break;else{l=h;h=i}}}while(0);c[p>>2]=c[h>>2];c[h>>2]=c[c[(c[b>>2]|0)+(g<<2)>>2]>>2];c[c[(c[b>>2]|0)+(g<<2)>>2]>>2]=f;g=p}while(0);f=c[g>>2]|0;if(!f)break;else p=g}return}function Jg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=Lg(b,d)|0;if(!b){l=0;return l|0}b=c[b>>2]|0;if(!b){l=1;return l|0}l=a[d+11>>0]|0;k=l<<24>>24<0;l=k?c[d+4>>2]|0:l&255;k=k?c[d>>2]|0:d;j=(l|0)==0;i=b;b=1;a:while(1){g=i;d=g+8|0;f=a[d+11>>0]|0;h=f<<24>>24<0;f=f&255;if(((h?c[g+12>>2]|0:f)|0)!=(l|0)){d=14;break}e=c[d>>2]|0;g=h?e:d;e=e&255;b:do if(h){if(!j?Tz(g,k,l)|0:0){d=14;break a}}else if(!j){if((a[k>>0]|0)!=e<<24>>24){d=14;break a}e=k;while(1){f=f+-1|0;d=d+1|0;if(!f)break b;e=e+1|0;if((a[d>>0]|0)!=(a[e>>0]|0)){d=14;break a}}}while(0);i=c[i>>2]|0;b=b+1|0;if(!i){d=14;break}}if((d|0)==14)return b|0;return 0}function Kg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=a[d+11>>0]|0;e=f<<24>>24<0;f=e?c[d+4>>2]|0:f&255;e=e?c[d>>2]|0:d;d=f+1|0;if(d>>>0>4294967279)aB();if(d>>>0<11){a[b+11>>0]=f;if(!f){e=b;f=e+f|0;a[f>>0]=0;uB(b,331578,1)|0;return}else d=b}else{g=f+17&-16;d=_A(g)|0;c[b>>2]=d;c[b+8>>2]=g|-2147483648;c[b+4>>2]=f}sC(d|0,e|0,f|0)|0;g=d;g=g+f|0;a[g>>0]=0;uB(b,331578,1)|0;return}function Lg(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=a[e+11>>0]|0;r=s<<24>>24<0;t=r?c[e>>2]|0:e;s=r?c[e+4>>2]|0:s&255;if(s>>>0>3){e=t;h=s;f=s;while(1){r=v(d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24,1540483477)|0;h=(v(r>>>24^r,1540483477)|0)^(v(h,1540483477)|0);f=f+-4|0;if(f>>>0<=3)break;else e=e+4|0}r=s+-4|0;f=r&-4;g=t+(f+4)|0;e=h;f=r-f|0}else{g=t;e=s;f=s}switch(f|0){case 3:{i=d[g+2>>0]<<16^e;l=7;break}case 2:{i=e;l=7;break}case 1:{j=e;l=8;break}default:k=e}if((l|0)==7){j=d[g+1>>0]<<8^i;l=8}if((l|0)==8)k=v(j^d[g>>0],1540483477)|0;r=v(k>>>13^k,1540483477)|0;r=r>>>15^r;p=c[b+4>>2]|0;if(!p){t=0;return t|0}i=p+-1|0;f=(i&p|0)==0;if(!f)if(r>>>0<p>>>0)q=r;else q=(r>>>0)%(p>>>0)|0;else q=r&i;e=c[(c[b>>2]|0)+(q<<2)>>2]|0;if(!e){t=0;return t|0}j=c[e>>2]|0;if(!j){t=0;return t|0}k=(s|0)==0;if(f){e=j;a:while(1){l=c[e+4>>2]|0;f=(r|0)==(l|0);if(!(f|(l&i|0)==(q|0))){e=0;l=45;break}do if(f?(m=e+8|0,n=a[m+11>>0]|0,o=n<<24>>24<0,n=n&255,((o?c[e+12>>2]|0:n)|0)==(s|0)):0){f=c[m>>2]|0;g=o?f:m;f=f&255;if(o){if(k){l=45;break a}if(!(Tz(g,t,s)|0)){l=45;break a}else break}if(k){l=45;break a}if((a[t>>0]|0)==f<<24>>24){f=n;g=m;h=t;do{f=f+-1|0;g=g+1|0;if(!f){l=45;break a}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);e=c[e>>2]|0;if(!e){e=0;l=45;break}}if((l|0)==45)return e|0}b:while(1){e=c[j+4>>2]|0;do if((r|0)==(e|0)){e=j+8|0;g=a[e+11>>0]|0;i=g<<24>>24<0;g=g&255;if(((i?c[j+12>>2]|0:g)|0)==(s|0)){f=c[e>>2]|0;h=i?f:e;f=f&255;if(i){if(k){e=j;l=45;break b}if(!(Tz(h,t,s)|0)){e=j;l=45;break b}else break}if(k){e=j;l=45;break b}if((a[t>>0]|0)==f<<24>>24){f=t;do{g=g+-1|0;e=e+1|0;if(!g){e=j;l=45;break b}f=f+1|0}while((a[e>>0]|0)==(a[f>>0]|0))}}}else{if(e>>>0>=p>>>0)e=(e>>>0)%(p>>>0)|0;if((e|0)!=(q|0)){e=0;l=45;break b}}while(0);j=c[j>>2]|0;if(!j){e=0;l=45;break}}if((l|0)==45)return e|0;return 0}function Mg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=aa;aa=aa+192|0;k=j+144|0;e=j+128|0;f=j;g=j+184|0;h=j+180|0;i=j+160|0;c[k>>2]=d;c[e>>2]=c[k>>2];c[g>>2]=f;d=(Vz(f,128,b,k)|0)+1|0;if(d>>>0>128){f=aa;aa=aa+((1*d|0)+15&-16)|0;c[g>>2]=f;Vz(f,d,b,e)|0}d=c[a+8>>2]|0;c[h>>2]=1;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=-1;b=d+4|0;e=c[b>>2]|0;if(e>>>0<(c[d+8>>2]|0)>>>0){k=Uz(f)|0;c[e>>2]=1;h=e+4|0;c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[h+16>>2]=c[i+16>>2];Wn(e+24|0,f,k);c[b>>2]=(c[b>>2]|0)+36;aa=j;return}else{Ng(d,h,i,g);aa=j;return}}function Ng(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+32|0;i=o;m=b+4|0;g=c[b>>2]|0;k=((c[m>>2]|0)-g|0)/36|0;h=k+1|0;if(h>>>0>119304647)HB();n=b+8|0;l=((c[n>>2]|0)-g|0)/36|0;g=l<<1;g=l>>>0<59652323?(g>>>0<h>>>0?h:g):119304647;do if(g)if(g>>>0>119304647)U();else{j=_A(g*36|0)|0;break}else j=0;while(0);h=j+(k*36|0)|0;l=j+(g*36|0)|0;g=c[d>>2]|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];c[i+16>>2]=c[e+16>>2];d=c[f>>2]|0;f=Uz(d)|0;c[h>>2]=g;g=j+(k*36|0)+4|0;c[g>>2]=c[i>>2];c[g+4>>2]=c[i+4>>2];c[g+8>>2]=c[i+8>>2];c[g+12>>2]=c[i+12>>2];c[g+16>>2]=c[i+16>>2];Wn(j+(k*36|0)+24|0,d,f);f=h+36|0;d=c[b>>2]|0;g=c[m>>2]|0;if((g|0)==(d|0)){e=d;g=d}else{do{j=h;h=h+-36|0;k=g;g=g+-36|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];j=j+-12|0;k=k+-12|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0}while((g|0)!=(d|0));e=c[b>>2]|0;g=c[m>>2]|0}c[b>>2]=h;c[m>>2]=f;c[n>>2]=l;d=e;if((g|0)!=(d|0))do{h=g+-12|0;g=g+-36|0;if((a[h+11>>0]|0)<0)$A(c[h>>2]|0)}while((g|0)!=(d|0));if(!e){aa=o;return}$A(e);aa=o;return}function Og(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;i=_A(44)|0;c[b>>2]=i;c[b+4>>2]=e+8;e=i+8|0;cB(e,f);h=i+20|0;c[h>>2]=c[g>>2];c[h+4>>2]=c[g+4>>2];c[h+8>>2]=c[g+8>>2];c[h+12>>2]=c[g+12>>2];c[h+16>>2]=c[g+16>>2];c[h+20>>2]=c[g+20>>2];a[b+8>>0]=1;h=a[i+19>>0]|0;b=h<<24>>24<0;e=b?c[e>>2]|0:e;h=b?c[i+12>>2]|0:h&255;if(h>>>0>3){g=e;f=h;b=h;while(1){k=v(d[g>>0]|d[g+1>>0]<<8|d[g+2>>0]<<16|d[g+3>>0]<<24,1540483477)|0;f=(v(k>>>24^k,1540483477)|0)^(v(f,1540483477)|0);b=b+-4|0;if(b>>>0<=3)break;else g=g+4|0}k=h+-4|0;g=k&-4;e=e+(g+4)|0;g=k-g|0}else{f=h;g=h}switch(g|0){case 3:{f=(d[e+2>>0]|0)<<16^f;j=7;break}case 2:{j=7;break}case 1:break;default:{j=f;k=j>>>13;j=k^j;j=v(j,1540483477)|0;k=j>>>15;j=k^j;k=i+4|0;c[k>>2]=j;c[i>>2]=0;return}}if((j|0)==7)f=(d[e+1>>0]|0)<<8^f;j=v(f^(d[e>>0]|0),1540483477)|0;k=j>>>13;j=k^j;j=v(j,1540483477)|0;k=j>>>15;j=k^j;k=i+4|0;c[k>>2]=j;c[i>>2]=0;return}function Pg(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=287964;f=b+36|0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}e=b+88|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+92>>2]=0;c[e>>2]=0;c[b+96>>2]=0;Ml(b+48|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function Qg(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=287964;f=b+36|0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}e=b+88|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+92>>2]=0;c[e>>2]=0;c[b+96>>2]=0;Ml(b+48|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function Rg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+48|0;f=l;j=a+4|0;d=c[a>>2]|0;h=((c[j>>2]|0)-d|0)/40|0;e=h+1|0;if(e>>>0>107374182)HB();k=a+8|0;i=((c[k>>2]|0)-d|0)/40|0;d=i<<1;d=i>>>0<53687091?(d>>>0<e>>>0?e:d):107374182;do if(d)if(d>>>0>107374182)U();else{g=_A(d*40|0)|0;break}else g=0;while(0);e=g+(h*40|0)|0;i=g+(d*40|0)|0;Gl(f,b);c[e>>2]=1;Il(g+(h*40|0)+4|0,f);Ml(f);g=e+40|0;f=c[a>>2]|0;d=c[j>>2]|0;if((d|0)==(f|0)){b=f;d=f}else{do{h=d;d=d+-40|0;c[e+-40>>2]=c[d>>2];Il(e+-36|0,h+-36|0);e=e+-40|0}while((d|0)!=(f|0));b=c[a>>2]|0;d=c[j>>2]|0}c[a>>2]=e;c[j>>2]=g;c[k>>2]=i;e=b;if((d|0)!=(e|0))do{Ml(d+-36|0);d=d+-40|0}while((d|0)!=(e|0));if(!b){aa=l;return}$A(b);aa=l;return}function Sg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+32|0;f=k;i=a+4|0;b=c[a>>2]|0;g=((c[i>>2]|0)-b|0)/40|0;d=g+1|0;if(d>>>0>107374182)HB();j=a+8|0;h=((c[j>>2]|0)-b|0)/40|0;b=h<<1;b=h>>>0<53687091?(b>>>0<d>>>0?d:b):107374182;do if(b)if(b>>>0>107374182)U();else{e=_A(b*40|0)|0;break}else e=0;while(0);d=e+(g*40|0)|0;h=e+(b*40|0)|0;c[d>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;El(e+(g*40|0)+4|0,-1,f);g=d+40|0;f=c[a>>2]|0;b=c[i>>2]|0;if((b|0)==(f|0)){e=f;b=f}else{do{e=b;b=b+-40|0;c[d+-40>>2]=c[b>>2];Il(d+-36|0,e+-36|0);d=d+-40|0}while((b|0)!=(f|0));e=c[a>>2]|0;b=c[i>>2]|0}c[a>>2]=d;c[i>>2]=g;c[j>>2]=h;d=e;if((b|0)!=(d|0))do{Ml(b+-36|0);b=b+-40|0}while((b|0)!=(d|0));if(!e){aa=k;return}$A(e);aa=k;return}function Tg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=a+8|0;e=c[a>>2]|0;g=e;if((((c[k>>2]|0)-e|0)/40|0)>>>0>=b>>>0)return;j=a+4|0;if(b>>>0>107374182)U();d=c[j>>2]|0;h=_A(b*40|0)|0;f=h+(((d-e|0)/40|0)*40|0)|0;i=f;h=h+(b*40|0)|0;e=d;if((e|0)!=(g|0)){d=e;do{b=d;d=d+-40|0;c[f+-40>>2]=c[d>>2];Il(f+-36|0,b+-36|0);f=f+-40|0}while((d|0)!=(g|0));d=c[a>>2]|0;e=c[j>>2]|0;b=d;c[a>>2]=f;c[j>>2]=i;c[k>>2]=h;if((e|0)!=(b|0))do{Ml(e+-36|0);e=e+-40|0}while((e|0)!=(b|0))}else{c[a>>2]=i;c[j>>2]=i;c[k>>2]=h}if(!d)return;$A(d);return}function Ug(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;c[b>>2]=287980;h=b+36|0;e=b+104|0;f=c[e>>2]|0;if(f|0){g=b+108|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{Ml(d+-36|0);d=d+-40|0}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}e=b+92|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+96>>2]=0;c[e>>2]=0;c[b+100>>2]=0;Ml(b+48|0);if((a[h+11>>0]|0)>=0)return;$A(c[h>>2]|0);return}function Vg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;c[b>>2]=287980;h=b+36|0;e=b+104|0;f=c[e>>2]|0;if(f|0){g=b+108|0;d=c[g>>2]|0;if((d|0)==(f|0))d=f;else{do{Ml(d+-36|0);d=d+-40|0}while((d|0)!=(f|0));d=c[e>>2]|0}c[g>>2]=f;$A(d)}e=b+92|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+96>>2]=0;c[e>>2]=0;c[b+100>>2]=0;Ml(b+48|0);if((a[h+11>>0]|0)>=0){$A(b);return}$A(c[h>>2]|0);$A(b);return}function Wg(a){a=a|0;$A(a);return}function Xg(a){a=a|0;$A(a);return}function Yg(a){a=a|0;$A(a);return}function Zg(a){a=a|0;$A(a);return}function _g(a){a=a|0;$A(a);return}function $g(a){a=a|0;$A(a);return}function ah(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+64|0;f=j+20|0;g=j;if((e|0)>-1){a[d>>0]=1;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;El(f,e,g);Hl(d+4|0,f)|0;Ml(f);f=c[(c[(c[b+12>>2]|0)+124>>2]|0)+(e<<2)>>2]|0;g=f+12|0;e=d+40|0;if((e|0)==(g|0)){aa=j;return}Bg(e,c[g>>2]|0,c[f+16>>2]|0);Bg(d+52|0,c[f+24>>2]|0,c[f+28>>2]|0);aa=j;return}a[d>>0]=0;c[d+44>>2]=c[d+40>>2];switch(e|0){case -64:{h=0;i=0;break}case -24:case -17:case -16:case -5:case -4:case -3:case -2:case -1:{i=_A(4)|0;c[i>>2]=e;h=i;i=i+4|0;break}default:U()}e=d+52|0;f=c[e>>2]|0;if(!f){g=d+56|0;f=d+60|0}else{g=d+56|0;c[g>>2]=f;$A(f);f=d+60|0;c[f>>2]=0;c[g>>2]=0;c[e>>2]=0}c[e>>2]=h;c[g>>2]=i;c[f>>2]=i;aa=j;return}function bh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=a+24|0;f=c[l>>2]|0;m=a+28|0;g=c[m>>2]|0;if(f>>>0<g>>>0){c[f>>2]=b;c[f+4>>2]=d;c[f+8>>2]=e;c[l>>2]=f+12;return}k=a+20|0;j=c[k>>2]|0;i=f-j|0;h=(i|0)/12|0;a=h+1|0;if(a>>>0>357913941)HB();f=(g-j|0)/12|0;g=f<<1;g=f>>>0<178956970?(g>>>0<a>>>0?a:g):357913941;do if(g)if(g>>>0>357913941)U();else{n=_A(g*12|0)|0;break}else n=0;while(0);f=n+(h*12|0)|0;c[f>>2]=b;c[n+(h*12|0)+4>>2]=d;c[n+(h*12|0)+8>>2]=e;a=f+(((i|0)/-12|0)*12|0)|0;if((i|0)>0)sC(a|0,j|0,i|0)|0;c[k>>2]=a;c[l>>2]=f+12;c[m>>2]=n+(g*12|0);if(!j)return;$A(j);return}function ch(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288092;e=b+144|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+148>>2]=0;c[e>>2]=0;c[b+152>>2]=0;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function dh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288092;e=b+144|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+148>>2]=0;c[e>>2]=0;c[b+152>>2]=0;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function eh(a){a=a|0;c[a>>2]=288108;Ml(a+36|0);return}function fh(a){a=a|0;c[a>>2]=288108;Ml(a+36|0);$A(a);return}function gh(a){a=a|0;$A(a);return}function hh(a){a=a|0;$A(a);return}function ih(a){a=a|0;var b=0;c[a>>2]=288156;Ml(a+100|0);b=c[a+88>>2]|0;if(b|0){c[a+92>>2]=b;$A(b)}b=c[a+76>>2]|0;if(!b){a=a+40|0;Ml(a);return}c[a+80>>2]=b;$A(b);a=a+40|0;Ml(a);return}function jh(a){a=a|0;var b=0;c[a>>2]=288156;Ml(a+100|0);b=c[a+88>>2]|0;if(b|0){c[a+92>>2]=b;$A(b)}b=c[a+76>>2]|0;if(!b){b=a+40|0;Ml(b);$A(a);return}c[a+80>>2]=b;$A(b);b=a+40|0;Ml(b);$A(a);return}function kh(a){a=a|0;c[a>>2]=288172;Ml(a+36|0);return}function lh(a){a=a|0;c[a>>2]=288172;Ml(a+36|0);$A(a);return}function mh(a){a=a|0;$A(a);return}function nh(a){a=a|0;$A(a);return}function oh(a){a=a|0;$A(a);return}function ph(a){a=a|0;$A(a);return}function qh(a){a=a|0;$A(a);return}function rh(a){a=a|0;c[a>>2]=288268;Ml(a+36|0);return}function sh(a){a=a|0;c[a>>2]=288268;Ml(a+36|0);$A(a);return}function th(a){a=a|0;c[a>>2]=288284;Ml(a+36|0);return}function uh(a){a=a|0;c[a>>2]=288284;Ml(a+36|0);$A(a);return}function vh(a){a=a|0;c[a>>2]=288300;Ml(a+36|0);return}function wh(a){a=a|0;c[a>>2]=288300;Ml(a+36|0);$A(a);return}function xh(a){a=a|0;c[a>>2]=288316;Ml(a+36|0);return}function yh(a){a=a|0;c[a>>2]=288316;Ml(a+36|0);$A(a);return}function zh(a){a=a|0;c[a>>2]=288332;Ml(a+36|0);return}function Ah(a){a=a|0;c[a>>2]=288332;Ml(a+36|0);$A(a);return}function Bh(a){a=a|0;c[a>>2]=288348;Ml(a+36|0);return}function Ch(a){a=a|0;c[a>>2]=288348;Ml(a+36|0);$A(a);return}function Dh(a){a=a|0;$A(a);return}function Eh(a){a=a|0;$A(a);return}function Fh(a){a=a|0;c[a>>2]=288396;Ml(a+36|0);return}function Gh(a){a=a|0;c[a>>2]=288396;Ml(a+36|0);$A(a);return}function Hh(a){a=a|0;$A(a);return}function Ih(a){a=a|0;$A(a);return}function Jh(a){a=a|0;c[a>>2]=288444;Ml(a+36|0);return}function Kh(a){a=a|0;c[a>>2]=288444;Ml(a+36|0);$A(a);return}function Lh(a){a=a|0;$A(a);return}function Mh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288476;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function Nh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288476;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function Oh(a){a=a|0;c[a>>2]=288492;Ml(a+36|0);return}function Ph(a){a=a|0;c[a>>2]=288492;Ml(a+36|0);$A(a);return}function Qh(a){a=a|0;c[a>>2]=288508;Ml(a+36|0);return}function Rh(a){a=a|0;c[a>>2]=288508;Ml(a+36|0);$A(a);return}function Sh(a){a=a|0;c[a>>2]=288524;Ml(a+36|0);return}function Th(a){a=a|0;c[a>>2]=288524;Ml(a+36|0);$A(a);return}function Uh(a){a=a|0;$A(a);return}function Vh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288556;e=b+144|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+148>>2]=0;c[e>>2]=0;c[b+152>>2]=0;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function Wh(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288556;e=b+144|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+148>>2]=0;c[e>>2]=0;c[b+152>>2]=0;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function Xh(a){a=a|0;c[a>>2]=288572;Ml(a+36|0);return}function Yh(a){a=a|0;c[a>>2]=288572;Ml(a+36|0);$A(a);return}function Zh(a){a=a|0;$A(a);return}function _h(a){a=a|0;$A(a);return}function $h(a){a=a|0;$A(a);return}function ai(a){a=a|0;var b=0;c[a>>2]=288636;Ml(a+100|0);b=c[a+88>>2]|0;if(b|0){c[a+92>>2]=b;$A(b)}b=c[a+76>>2]|0;if(!b){a=a+40|0;Ml(a);return}c[a+80>>2]=b;$A(b);a=a+40|0;Ml(a);return}function bi(a){a=a|0;var b=0;c[a>>2]=288636;Ml(a+100|0);b=c[a+88>>2]|0;if(b|0){c[a+92>>2]=b;$A(b)}b=c[a+76>>2]|0;if(!b){b=a+40|0;Ml(b);$A(a);return}c[a+80>>2]=b;$A(b);b=a+40|0;Ml(b);$A(a);return}function ci(a){a=a|0;c[a>>2]=288652;Ml(a+36|0);return}function di(a){a=a|0;c[a>>2]=288652;Ml(a+36|0);$A(a);return}function ei(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+32|0;h=l;j=a+8|0;e=c[j>>2]|0;k=a+4|0;d=c[k>>2]|0;if(((e-d|0)/36|0)>>>0>=b>>>0){do{c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(d,-1,h);d=(c[k>>2]|0)+36|0;c[k>>2]=d;b=b+-1|0}while((b|0)!=0);aa=l;return}f=c[a>>2]|0;d=(d-f|0)/36|0;g=d+b|0;if(g>>>0>119304647)HB();e=(e-f|0)/36|0;f=e<<1;f=e>>>0<59652323?(f>>>0<g>>>0?g:f):119304647;do if(f)if(f>>>0>119304647)U();else{i=_A(f*36|0)|0;break}else i=0;while(0);d=i+(d*36|0)|0;e=d;while(1){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;El(e,-1,h);b=b+-1|0;if(!b)break;else e=e+36|0}h=i+(f*36|0)|0;g=i+(g*36|0)|0;f=c[a>>2]|0;b=c[k>>2]|0;if((b|0)==(f|0)){e=f;b=f}else{do{d=d+-36|0;b=b+-36|0;Il(d,b)}while((b|0)!=(f|0));e=c[a>>2]|0;b=c[k>>2]|0}c[a>>2]=d;c[k>>2]=g;c[j>>2]=h;d=e;if((b|0)!=(d|0))do{b=b+-36|0;Ml(b)}while((b|0)!=(d|0));if(!e){aa=l;return}$A(e);aa=l;return}function fi(a){a=a|0;var b=0,d=0,e=0;c[a>>2]=288668;Ml(a+48|0);b=a+36|0;e=c[b>>2]|0;if(!e)return;d=a+40|0;a=c[d>>2]|0;if((a|0)==(e|0))a=e;else{do{a=a+-36|0;Ml(a)}while((a|0)!=(e|0));a=c[b>>2]|0}c[d>>2]=e;$A(a);return}function gi(a){a=a|0;var b=0,d=0,e=0,f=0;c[a>>2]=288668;Ml(a+48|0);d=a+36|0;e=c[d>>2]|0;if(!e){$A(a);return}f=a+40|0;b=c[f>>2]|0;if((b|0)==(e|0))b=e;else{do{b=b+-36|0;Ml(b)}while((b|0)!=(e|0));b=c[d>>2]|0}c[f>>2]=e;$A(b);$A(a);return}function hi(a){a=a|0;c[a>>2]=288684;Ml(a+72|0);Ml(a+36|0);return}function ii(a){a=a|0;c[a>>2]=288684;Ml(a+72|0);Ml(a+36|0);$A(a);return}function ji(a){a=a|0;c[a>>2]=288700;Ml(a+36|0);return}function ki(a){a=a|0;c[a>>2]=288700;Ml(a+36|0);$A(a);return}function li(a){a=a|0;c[a>>2]=288716;Ml(a+36|0);return}function mi(a){a=a|0;c[a>>2]=288716;Ml(a+36|0);$A(a);return}function ni(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288732;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function oi(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288732;f=b+36|0;e=b+112|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+116>>2]=0;c[e>>2]=0;c[b+120>>2]=0;d=c[b+100>>2]|0;if(d|0){c[b+104>>2]=d;$A(d)}d=c[b+88>>2]|0;if(d|0){c[b+92>>2]=d;$A(d)}Ml(b+52|0);if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function pi(a){a=a|0;$A(a);return}function qi(a){a=a|0;$A(a);return}function ri(a){a=a|0;$A(a);return}function si(a){a=a|0;$A(a);return}function ti(a){a=a|0;$A(a);return}function ui(a){a=a|0;$A(a);return}function vi(a){a=a|0;$A(a);return}function wi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;i=a+4|0;g=c[a>>2]|0;m=(c[i>>2]|0)-g|0;l=m>>3;e=l+1|0;if(e>>>0>536870911)HB();j=a+8|0;n=(c[j>>2]|0)-g|0;f=n>>2;f=n>>3>>>0<268435455?(f>>>0<e>>>0?e:f):536870911;do if(f)if(f>>>0>536870911)U();else{k=_A(f<<3)|0;h=k;break}else{h=0;k=0}while(0);e=k+(l<<3)|0;c[e>>2]=c[b>>2];c[k+(l<<3)+4>>2]=c[d>>2];if((m|0)>0)sC(h|0,g|0,m|0)|0;c[a>>2]=k;c[i>>2]=e+8;c[j>>2]=k+(f<<3);if(!g)return;$A(g);return}function xi(a){a=a|0;c[a>>2]=288860;Ml(a+36|0);return}function yi(a){a=a|0;c[a>>2]=288860;Ml(a+36|0);$A(a);return}function zi(b){b=b|0;var d=0;c[b>>2]=288876;d=b+36|0;Ml(b+52|0);if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ai(b){b=b|0;var d=0;c[b>>2]=288876;d=b+36|0;Ml(b+52|0);if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Bi(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288892;f=b+36|0;e=b+56|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+60>>2]=0;c[e>>2]=0;c[b+64>>2]=0;if((a[f+11>>0]|0)>=0)return;$A(c[f>>2]|0);return}function Ci(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=288892;f=b+36|0;e=b+56|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+60>>2]=0;c[e>>2]=0;c[b+64>>2]=0;if((a[f+11>>0]|0)>=0){$A(b);return}$A(c[f>>2]|0);$A(b);return}function Di(b){b=b|0;c[b>>2]=288908;b=b+40|0;if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Ei(b){b=b|0;var d=0;c[b>>2]=288908;d=b+40|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Fi(b){b=b|0;c[b>>2]=288924;b=b+40|0;if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Gi(b){b=b|0;var d=0;c[b>>2]=288924;d=b+40|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Hi(a){a=a|0;c[a>>2]=288940;Ji(a+36|0);return}function Ii(a){a=a|0;c[a>>2]=288940;Ji(a+36|0);$A(a);return}function Ji(b){b=b|0;var d=0,e=0,f=0;e=b+108|0;d=c[e>>2]|0;if(d|0)do{f=d;d=c[d+4>>2]|0;ma[c[(c[f>>2]|0)+4>>2]&255](f)}while((d|0)!=0);c[b+112>>2]=0;c[e>>2]=0;c[b+116>>2]=0;d=c[b+96>>2]|0;if(d|0)do{e=d;d=c[d>>2]|0;f=e+8|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);$A(e)}while((d|0)!=0);f=b+88|0;d=c[f>>2]|0;c[f>>2]=0;if(d|0)$A(d);d=c[b+76>>2]|0;if(d|0){c[b+80>>2]=d;$A(d)}d=c[b+64>>2]|0;if(d|0){c[b+68>>2]=d;$A(d)}d=c[b+52>>2]|0;if(d|0){c[b+56>>2]=d;$A(d)}Ml(b+16|0);if((a[b+11>>0]|0)>=0)return;$A(c[b>>2]|0);return}function Ki(a){a=a|0;var b=0;c[a>>2]=288972;b=a+36|0;a=c[b>>2]|0;c[b>>2]=0;if(!a)return;ma[c[(c[a>>2]|0)+4>>2]&255](a);return}function Li(a){a=a|0;var b=0,d=0;c[a>>2]=288972;d=a+36|0;b=c[d>>2]|0;c[d>>2]=0;if(!b){$A(a);return}ma[c[(c[b>>2]|0)+4>>2]&255](b);$A(a);return}function Mi(b){b=b|0;var d=0,e=0;c[b>>2]=288956;e=b+32|0;d=c[b+96>>2]|0;if(d|0){c[b+100>>2]=d;$A(d)}d=c[b+84>>2]|0;if(d|0){c[b+88>>2]=d;$A(d)}Ml(b+48|0);if((a[e+11>>0]|0)<0)$A(c[e>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ni(b){b=b|0;var d=0,e=0;c[b>>2]=288956;e=b+32|0;d=c[b+96>>2]|0;if(d|0){c[b+100>>2]=d;$A(d)}d=c[b+84>>2]|0;if(d|0){c[b+88>>2]=d;$A(d)}Ml(b+48|0);if((a[e+11>>0]|0)<0)$A(c[e>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Oi(b){b=b|0;var d=0;c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Pi(b){b=b|0;var d=0;c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Qi(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=289004;f=b+32|0;e=b+52|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+56>>2]=0;c[e>>2]=0;c[b+60>>2]=0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ri(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=289004;f=b+32|0;e=b+52|0;d=c[e>>2]|0;if(d|0)do{g=d;d=c[d+4>>2]|0;ma[c[(c[g>>2]|0)+4>>2]&255](g)}while((d|0)!=0);c[b+56>>2]=0;c[e>>2]=0;c[b+60>>2]=0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Si(b){b=b|0;var d=0;c[b>>2]=289020;d=b+32|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Ti(b){b=b|0;var d=0;c[b>>2]=289020;d=b+32|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Ui(b){b=b|0;var d=0;c[b>>2]=289036;d=b+32|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Vi(b){b=b|0;var d=0;c[b>>2]=289036;d=b+32|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Wi(b){b=b|0;var d=0;c[b>>2]=289052;Ji(b+32|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0)return;$A(c[d>>2]|0);return}function Xi(b){b=b|0;var d=0;c[b>>2]=289052;Ji(b+32|0);c[b>>2]=288988;d=b+16|0;if((a[d+11>>0]|0)<0)$A(c[d>>2]|0);d=b+4|0;if((a[d+11>>0]|0)>=0){$A(b);return}$A(c[d>>2]|0);$A(b);return}function Yi(b){b=b|0;var d=0,e=0;c[b>>2]=289068;e=b+36|0;d=c[b+60>>2]|0;if(d|0){c[b+64>>2]=d;$A(d)}d=c[b+48>>2]|0;if(d|0){c[b+52>>2]=d;$A(d)}if((a[e+11>>0]|0)>=0)return;$A(c[e>>2]|0);return}function Zi(b){b=b|0;var d=0,e=0;c[b>>2]=289068;e=b+36|0;d=c[b+60>>2]|0;if(d|0){c[b+64>>2]=d;$A(d)}d=c[b+48>>2]|0;if(d|0){c[b+52>>2]=d;$A(d)}if((a[e+11>>0]|0)>=0){$A(b);return}$A(c[e>>2]|0);$A(b);return}function _i(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=b+4|0;e=c[b>>2]|0;h=((c[j>>2]|0)-e|0)/36|0;f=h+1|0;if(f>>>0>119304647)HB();k=b+8|0;i=((c[k>>2]|0)-e|0)/36|0;e=i<<1;e=i>>>0<59652323?(e>>>0<f>>>0?f:e):119304647;do if(e)if(e>>>0>119304647)U();else{g=_A(e*36|0)|0;break}else g=0;while(0);f=g+(h*36|0)|0;i=g+(e*36|0)|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];c[f+20>>2]=c[d+20>>2];cB(g+(h*36|0)+24|0,d+24|0);h=f+36|0;d=c[b>>2]|0;e=c[j>>2]|0;if((e|0)==(d|0)){g=d;e=d}else{do{l=f;f=f+-36|0;g=e;e=e+-36|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[f+16>>2]=c[e+16>>2];c[f+20>>2]=c[e+20>>2];l=l+-12|0;g=g+-12|0;c[l>>2]=c[g>>2];c[l+4>>2]=c[g+4>>2];c[l+8>>2]=c[g+8>>2];c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0}while((e|0)!=(d|0));g=c[b>>2]|0;e=c[j>>2]|0}c[b>>2]=f;c[j>>2]=h;c[k>>2]=i;d=g;if((e|0)!=(d|0))do{f=e+-12|0;e=e+-36|0;if((a[f+11>>0]|0)<0)$A(c[f>>2]|0)}while((e|0)!=(d|0));if(!g)return;$A(g);return}function $i(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=aa;aa=aa+48|0;e=f;Am(e,d);if(!(a[e+24>>0]|0)){Am(e,d);g=c[e+28>>2]|0;Am(e,d);d=c[e>>2]|0;a[e>>0]=g;Qn(b,e,1,d,0);aa=f;return}else{Am(e,d);a[e>>0]=a[e+24>>0]|0;Qn(b,e,1,297439,0);Am(e,d);g=c[e+28>>2]|0;Am(e,d);Ul(b,g,c[e>>2]|0);aa=f;return}}function aj(a,b){a=a|0;b=b|0;var c=0;do switch(b|0){case -1:{c=330980;break}case -2:{c=330976;break}case -3:{c=330972;break}case -4:{c=330968;break}case -5:{c=330963;break}case -16:{c=330955;break}case -32:{c=330950;break}case -24:{c=330939;break}case -64:{c=330934;break}case 0:{c=330930;break}case -17:{c=330923;break}default:c=330910}while(0);Yl(a,b,c);return}function bj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=aa;aa=aa+448|0;ca=fa+336|0;Y=fa+328|0;W=fa+320|0;U=fa+312|0;T=fa+304|0;R=fa+296|0;N=fa+288|0;F=fa+280|0;A=fa+272|0;x=fa+264|0;u=fa+256|0;r=fa+248|0;o=fa+240|0;ba=fa+112|0;Z=fa+436|0;X=fa;ea=fa+344|0;c[ea>>2]=b;$=ea+4|0;c[$>>2]=f;_=ea+8|0;c[_>>2]=e;da=ea+12|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[ea+28>>2]=1065353216;da=ea+32|0;f=ea+72|0;e=da;j=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(j|0));c[f>>2]=-1;f=ea+76|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[ba>>2]=1836278016;Qn(b,ba,4,297488,0);f=c[ea>>2]|0;c[ba>>2]=1;Qn(f,ba,4,297506,0);f=c[_>>2]|0;if((c[f+128>>2]|0)!=(c[f+124>>2]|0)){cj(ea,1);f=c[_>>2]|0;Ul(c[ea>>2]|0,(c[f+128>>2]|0)-(c[f+124>>2]|0)>>2,297526);f=c[_>>2]|0;if((c[f+128>>2]|0)!=(c[f+124>>2]|0)){n=0;do{j=c[(c[f+124>>2]|0)+(n<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[o>>2]=330362;c[o+4>>2]=n;Pn(e,297555,o);f=c[ea>>2]|0}Yl(f,-32,330950);b=j+12|0;e=(c[j+16>>2]|0)-(c[b>>2]|0)|0;k=e>>2;m=j+24|0;j=(c[j+28>>2]|0)-(c[m>>2]|0)|0;l=j>>2;Ul(c[ea>>2]|0,k,297564);f=c[ea>>2]|0;if(e){e=0;do{aj(f,c[(c[b>>2]|0)+(e<<2)>>2]|0);e=e+1|0;f=c[ea>>2]|0}while(e>>>0<k>>>0)}Ul(f,l,297575);if(j|0){f=0;do{aj(c[ea>>2]|0,c[(c[m>>2]|0)+(f<<2)>>2]|0);f=f+1|0}while(f>>>0<l>>>0)}n=n+1|0;f=c[_>>2]|0}while(n>>>0<(c[f+128>>2]|0)-(c[f+124>>2]|0)>>2>>>0)}k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(p=c[f+8>>2]|0,q=c[f+12>>2]|0,(p|0)!=(q|0)):0){f=p;do{p=f+4|0;c[p>>2]=(c[p>>2]|0)+l;f=f+16|0}while((f|0)!=(q|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}if((c[f+104>>2]|0)!=(c[f+100>>2]|0)){cj(ea,2);f=c[_>>2]|0;Ul(c[ea>>2]|0,(c[f+104>>2]|0)-(c[f+100>>2]|0)>>2,297587);f=c[_>>2]|0;a:do if((c[f+104>>2]|0)!=(c[f+100>>2]|0)){b=0;while(1){j=c[(c[f+100>>2]|0)+(b<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[r>>2]=297599;c[r+4>>2]=b;Pn(e,297555,r);f=c[ea>>2]|0}q=j+4|0;o=a[q+11>>0]|0;p=o<<24>>24<0;q=p?c[q>>2]|0:q;o=p?c[j+8>>2]|0:o&255;Ul(f,o,324027);Qn(f,q,o,315663,1);o=c[ea>>2]|0;q=j+16|0;p=a[q+11>>0]|0;n=p<<24>>24<0;q=n?c[q>>2]|0:q;p=n?c[j+20>>2]|0:p&255;Ul(o,p,324027);Qn(o,q,p,315682,1);p=c[ea>>2]|0;q=j+28|0;a[ba>>0]=c[q>>2];Qn(p,ba,1,315700,0);switch(c[q>>2]|0){case 0:{Ul(c[ea>>2]|0,bl(c[_>>2]|0,j+44|0)|0,315720);break}case 1:{aj(c[ea>>2]|0,c[j+72>>2]|0);f=c[ea>>2]|0;q=j+64|0;Ul(f,((a[j+32+33>>0]|0)==0?0:2)|d[q>>0],297446);Ul(f,c[j+48>>2]|0,297460);if(a[q>>0]|0)Ul(f,c[j+56>>2]|0,297476);break}case 2:{f=c[ea>>2]|0;q=j+64|0;Ul(f,((a[j+32+33>>0]|0)==0?0:2)|d[q>>0],297446);Ul(f,c[j+48>>2]|0,297460);if(a[q>>0]|0)Ul(f,c[j+56>>2]|0,297476);break}case 3:{aj(c[ea>>2]|0,c[j+44>>2]|0);q=c[ea>>2]|0;a[ba>>0]=a[j+48>>0]|0;Qn(q,ba,1,323612,0);break}case 4:{Ul(c[ea>>2]|0,0,323481);Ul(c[ea>>2]|0,bl(c[_>>2]|0,j+44|0)|0,323523);break}default:{}}b=b+1|0;f=c[_>>2]|0;if(b>>>0>=(c[f+104>>2]|0)-(c[f+100>>2]|0)>>2>>>0)break a}}while(0);k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(s=c[f+8>>2]|0,t=c[f+12>>2]|0,(s|0)!=(t|0)):0){f=s;do{s=f+4|0;c[s>>2]=(c[s>>2]|0)+l;f=f+16|0}while((f|0)!=(t|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}o=((c[f+80>>2]|0)-(c[f+76>>2]|0)>>2)-(c[f+48>>2]|0)|0;n=(o|0)!=0;if(n){cj(ea,3);Ul(c[ea>>2]|0,o,297613);f=0;do{t=c[_>>2]|0;t=c[(c[t+76>>2]|0)+((c[t+48>>2]|0)+f<<2)>>2]|0;c[u>>2]=f;Sz(ba,100,297627,u)|0;s=c[ea>>2]|0;Ul(s,bl(c[_>>2]|0,t+12|0)|0,ba);f=f+1|0}while((f|0)!=(o|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(v=c[f+8>>2]|0,w=c[f+12>>2]|0,(v|0)!=(w|0)):0){f=v;do{v=f+4|0;c[v>>2]=(c[v>>2]|0)+l;f=f+16|0}while((f|0)!=(w|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}k=((c[f+140>>2]|0)-(c[f+136>>2]|0)>>2)-(c[f+52>>2]|0)|0;if(k){cj(ea,4);Ul(c[ea>>2]|0,k,297656);b=0;do{j=c[_>>2]|0;j=c[(c[j+136>>2]|0)+((c[j+52>>2]|0)+b<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[x>>2]=330351;c[x+4>>2]=b;Pn(e,297555,x);f=c[ea>>2]|0}aj(f,c[j+40>>2]|0);f=c[ea>>2]|0;w=j+32|0;Ul(f,((a[j+33>>0]|0)==0?0:2)|d[w>>0],297446);Ul(f,c[j+16>>2]|0,297460);if(a[w>>0]|0)Ul(f,c[j+24>>2]|0,297476);b=b+1|0}while((b|0)!=(k|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(y=c[f+8>>2]|0,z=c[f+12>>2]|0,(y|0)!=(z|0)):0){f=y;do{y=f+4|0;c[y>>2]=(c[y>>2]|0)+l;f=f+16|0}while((f|0)!=(z|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}k=((c[f+164>>2]|0)-(c[f+160>>2]|0)>>2)-(c[f+56>>2]|0)|0;if(k){cj(ea,5);Ul(c[ea>>2]|0,k,297667);b=0;do{j=c[_>>2]|0;j=c[(c[j+160>>2]|0)+((c[j+56>>2]|0)+b<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[A>>2]=330283;c[A+4>>2]=b;Pn(e,297555,A);f=c[ea>>2]|0}z=j+32|0;Ul(f,((a[j+33>>0]|0)==0?0:2)|d[z>>0],297446);Ul(f,c[j+16>>2]|0,297460);if(a[z>>0]|0)Ul(f,c[j+24>>2]|0,297476);b=b+1|0}while((b|0)!=(k|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(B=c[f+8>>2]|0,C=c[f+12>>2]|0,(B|0)!=(C|0)):0){f=B;do{B=f+4|0;c[B>>2]=(c[B>>2]|0)+l;f=f+16|0}while((f|0)!=(C|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}j=((c[f+92>>2]|0)-(c[f+88>>2]|0)>>2)-(c[f+60>>2]|0)|0;if(j){cj(ea,6);Ul(c[ea>>2]|0,j,297680);e=0;do{f=c[_>>2]|0;f=c[(c[f+88>>2]|0)+((c[f+60>>2]|0)+e<<2)>>2]|0;aj(c[ea>>2]|0,c[f+12>>2]|0);C=c[ea>>2]|0;a[ba>>0]=a[f+16>>0]|0;Qn(C,ba,1,323612,0);f=c[f+20>>2]|0;if(f|0)do{dj(ea,0,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[ea>>2]|0,11);e=e+1|0}while((e|0)!=(j|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(D=c[f+8>>2]|0,E=c[f+12>>2]|0,(D|0)!=(E|0)):0){f=D;do{D=f+4|0;c[D>>2]=(c[D>>2]|0)+l;f=f+16|0}while((f|0)!=(E|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}b=((c[f+68>>2]|0)-(c[f+64>>2]|0)>>2)-(c[f+44>>2]|0)|0;if(b){cj(ea,13);Ul(c[ea>>2]|0,b,319041);j=0;do{f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[F>>2]=330237;c[F+4>>2]=j;Pn(e,297555,F);f=c[ea>>2]|0}E=c[_>>2]|0;E=c[(c[E+64>>2]|0)+((c[E+44>>2]|0)+j<<2)>>2]|0;Ul(f,0,323481);D=c[ea>>2]|0;Ul(D,bl(c[_>>2]|0,E+12|0)|0,323523);j=j+1|0}while((j|0)!=(b|0));k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(G=c[f+8>>2]|0,H=c[f+12>>2]|0,(G|0)!=(H|0)):0){f=G;do{G=f+4|0;c[G>>2]=(c[G>>2]|0)+l;f=f+16|0}while((f|0)!=(H|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}if((c[f+116>>2]|0)!=(c[f+112>>2]|0)){cj(ea,7);j=c[_>>2]|0;Ul(c[ea>>2]|0,(c[j+116>>2]|0)-(c[j+112>>2]|0)>>2,297692);j=c[_>>2]|0;f=c[j+112>>2]|0;j=c[j+116>>2]|0;b:do if((f|0)!=(j|0))while(1){e=c[f>>2]|0;F=c[ea>>2]|0;G=a[e+11>>0]|0;E=G<<24>>24<0;H=E?c[e>>2]|0:e;G=E?c[e+4>>2]|0:G&255;Ul(F,G,324027);Qn(F,H,G,297704,1);G=c[ea>>2]|0;H=e+12|0;a[ba>>0]=c[H>>2];Qn(G,ba,1,316908,0);switch(c[H>>2]|0){case 0:{H=Ek(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297716);break}case 1:{H=Gk(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297734);break}case 2:{H=Hk(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297753);break}case 3:{H=Fk(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297773);break}case 4:{H=Jk(c[_>>2]|0,e+16|0)|0;Ul(c[ea>>2]|0,H,297793);break}default:{}}f=f+4|0;if((f|0)==(j|0))break b}while(0);k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(I=c[f+8>>2]|0,J=c[f+12>>2]|0,(I|0)!=(J|0)):0){f=I;do{I=f+4|0;c[I>>2]=(c[I>>2]|0)+l;f=f+16|0}while((f|0)!=(J|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}e=c[f+184>>2]|0;if((c[f+188>>2]|0)!=(e|0)?(K=Ek(f,c[e>>2]|0)|0,(K|0)!=-1):0){cj(ea,8);Ul(c[ea>>2]|0,K,297812);k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(L=c[f+8>>2]|0,M=c[f+12>>2]|0,(L|0)!=(M|0)):0){f=L;do{L=f+4|0;c[L>>2]=(c[L>>2]|0)+l;f=f+16|0}while((f|0)!=(M|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;f=ea+60|0;c[f>>2]=(c[f>>2]|0)+1;f=c[_>>2]|0}if((c[f+152>>2]|0)!=(c[f+148>>2]|0)){cj(ea,9);f=c[_>>2]|0;Ul(c[ea>>2]|0,(c[f+152>>2]|0)-(c[f+148>>2]|0)>>2,297829);f=c[_>>2]|0;if((c[f+152>>2]|0)!=(c[f+148>>2]|0)){k=0;do{j=c[(c[f+148>>2]|0)+(k<<2)>>2]|0;f=c[ea>>2]|0;e=c[f+12>>2]|0;if(e){c[N>>2]=297847;c[N+4>>2]=k;Pn(e,297555,N);f=c[ea>>2]|0}b=j+48|0;if(!(a[b>>0]|0)){a[ba>>0]=0;Qn(f,ba,1,0,0);f=c[j+56>>2]|0;if(f|0)do{dj(ea,0,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[ea>>2]|0,11)}else{a[ba>>0]=1;Qn(f,ba,1,0,0);aj(c[ea>>2]|0,c[j+52>>2]|0)}f=j+68|0;j=j+72|0;Ul(c[ea>>2]|0,((c[j>>2]|0)-(c[f>>2]|0)|0)/40|0,297867);f=c[f>>2]|0;j=c[j>>2]|0;e=(f|0)==(j|0);c:do if(!(a[b>>0]|0)){if(!e)do{ej(ea,Ek(c[_>>2]|0,f+4|0)|0,297882,0);f=f+40|0}while((f|0)!=(j|0))}else if(!e)while(1){switch(c[f>>2]|0){case 0:{$i(c[ea>>2]|0,208);break}case 1:{$i(c[ea>>2]|0,210);ej(ea,Ek(c[_>>2]|0,f+4|0)|0,297882,0);break}default:{}}$i(c[ea>>2]|0,11);f=f+40|0;if((f|0)==(j|0))break c}while(0);k=k+1|0;f=c[_>>2]|0}while(k>>>0<(c[f+152>>2]|0)-(c[f+148>>2]|0)>>2>>>0)}k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(O=c[f+8>>2]|0,P=c[f+12>>2]|0,(O|0)!=(P|0)):0){f=O;do{O=f+4|0;c[O>>2]=(c[O>>2]|0)+l;f=f+16|0}while((f|0)!=(P|0))}}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;P=ea+60|0;c[P>>2]=(c[P>>2]|0)+1}if(a[(c[$>>2]|0)+8>>0]|0){cj(ea,12);k=c[_>>2]|0;Ul(c[ea>>2]|0,(c[k+176>>2]|0)-(c[k+172>>2]|0)>>2,319180);k=c[ea+64>>2]|0;m=ea+68|0;j=c[m>>2]|0;f=c[ea>>2]|0;e=(c[f+4>>2]|0)-k|0;if(a[(c[$>>2]|0)+11>>0]|0){b=e-j|0;e=Sl(b)|0;l=e-j|0;if(l){Rn(f,e+k|0,j+k|0,b);f=c[ea>>2]|0}Wl(f,k,b,297536);Mn(c[ea>>2]|0,l);f=c[ea+56>>2]|0;if((l|0)!=0&(f|0)!=0?(i=c[f+8>>2]|0,Q=c[f+12>>2]|0,(i|0)!=(Q|0)):0)do{P=i+4|0;c[P>>2]=(c[P>>2]|0)+l;i=i+16|0}while((i|0)!=(Q|0))}else Tl(f,k,e+-5|0,297536);c[m>>2]=0;Q=ea+60|0;c[Q>>2]=(c[Q>>2]|0)+1}if(n){cj(ea,10);Ul(c[ea>>2]|0,o,297613);l=0;do{i=c[ea>>2]|0;f=c[i+12>>2]|0;if(f){c[R>>2]=297907;c[R+4>>2]=l;Pn(f,297555,R);i=c[ea>>2]|0}b=c[_>>2]|0;b=c[(c[b+76>>2]|0)+((c[b+48>>2]|0)+l<<2)>>2]|0;f=a[(c[$>>2]|0)+11>>0]|0;a[ba>>0]=0;a[ba+1>>0]=0;a[ba+2>>0]=0;a[ba+3>>0]=0;a[ba+4>>0]=0;k=c[i+4>>2]|0;Qn(i,ba,f<<24>>24==0?5:1,297921,0);i=b+76|0;f=c[i>>2]|0;j=b+80|0;e=c[j>>2]|0;if(Ok(f,e)|0){Ul(c[ea>>2]|0,e-f>>3,297944);i=c[i>>2]|0;f=c[j>>2]|0;if((i|0)!=(f|0))do{Q=c[i>>2]|0;Ul(c[ea>>2]|0,c[i+4>>2]|0,318312);aj(c[ea>>2]|0,Q);i=i+8|0}while((i|0)!=(f|0))}else Ul(c[ea>>2]|0,0,297944);i=c[b+108>>2]|0;if(i|0)do{dj(ea,b,i);i=c[i+4>>2]|0}while((i|0)!=0);$i(c[ea>>2]|0,11);f=c[ea>>2]|0;i=(c[f+4>>2]|0)-k|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(f,k,i+-5|0,297961);else{e=i+-1|0;i=Sl(e)|0;j=i+-1|0;if(!j)i=f;else{Rn(f,i+k|0,k+1|0,e);i=c[ea>>2]|0}Wl(i,k,e,297961);Mn(c[ea>>2]|0,j)}l=l+1|0}while((l|0)!=(o|0));b=c[ea+64>>2]|0;l=ea+68|0;e=c[l>>2]|0;i=c[ea>>2]|0;f=(c[i+4>>2]|0)-b|0;if(a[(c[$>>2]|0)+11>>0]|0){j=f-e|0;f=Sl(j)|0;k=f-e|0;if(k){Rn(i,f+b|0,e+b|0,j);i=c[ea>>2]|0}Wl(i,b,j,297536);Mn(c[ea>>2]|0,k);i=c[ea+56>>2]|0;if((k|0)!=0&(i|0)!=0?(h=c[i+8>>2]|0,S=c[i+12>>2]|0,(h|0)!=(S|0)):0)do{R=h+4|0;c[R>>2]=(c[R>>2]|0)+k;h=h+16|0}while((h|0)!=(S|0))}else Tl(i,b,f+-5|0,297536);c[l>>2]=0;S=ea+60|0;c[S>>2]=(c[S>>2]|0)+1}S=c[_>>2]|0;if((c[S+176>>2]|0)!=(c[S+172>>2]|0)){cj(ea,11);h=c[_>>2]|0;Ul(c[ea>>2]|0,(c[h+176>>2]|0)-(c[h+172>>2]|0)>>2,297982);h=c[_>>2]|0;d:do if((c[h+176>>2]|0)!=(c[h+172>>2]|0)){k=0;e:while(1){f=c[(c[h+172>>2]|0)+(k<<2)>>2]|0;h=c[ea>>2]|0;i=c[h+12>>2]|0;if(i){c[T>>2]=298e3;c[T+4>>2]=k;Pn(i,297555,T);h=c[ea>>2]|0}if(!(a[f+48>>0]|0)){a[ba>>0]=0;Qn(h,ba,1,0,0);h=c[f+52>>2]|0;if(h|0)do{dj(ea,0,h);h=c[h+4>>2]|0}while((h|0)!=0);$i(c[ea>>2]|0,11)}else{a[ba>>0]=1;Qn(h,ba,1,0,0)}b=f+64|0;j=f+68|0;Ul(c[ea>>2]|0,(c[j>>2]|0)-(c[b>>2]|0)|0,298020);h=c[ea>>2]|0;i=c[h+12>>2]|0;if(!i)e=h;else{c[U>>2]=318859;c[U+4>>2]=k;Pn(i,297555,U);e=c[ea>>2]|0}h=(c[j>>2]|0)-(c[b>>2]|0)|0;do if(h|0){if((h|0)<0)break e;f=_A(h)|0;i=c[b>>2]|0;h=(c[j>>2]|0)-i|0;if((h|0)>0?(sC(f|0,i|0,h|0)|0,Qn(e,f,h,318859,0),(f|0)==0):0)break;$A(f)}while(0);k=k+1|0;h=c[_>>2]|0;if(k>>>0>=(c[h+176>>2]|0)-(c[h+172>>2]|0)>>2>>>0)break d}HB()}while(0);j=c[ea+64>>2]|0;k=ea+68|0;f=c[k>>2]|0;h=c[ea>>2]|0;i=(c[h+4>>2]|0)-j|0;if(a[(c[$>>2]|0)+11>>0]|0){e=i-f|0;i=Sl(e)|0;b=i-f|0;if(b){Rn(h,i+j|0,f+j|0,e);h=c[ea>>2]|0}Wl(h,j,e,297536);Mn(c[ea>>2]|0,b);h=c[ea+56>>2]|0;if((b|0)!=0&(h|0)!=0?(g=c[h+8>>2]|0,V=c[h+12>>2]|0,(g|0)!=(V|0)):0)do{U=g+4|0;c[U>>2]=(c[U>>2]|0)+b;g=g+16|0}while((g|0)!=(V|0))}else Tl(h,j,i+-5|0,297536);c[k>>2]=0;V=ea+60|0;c[V>>2]=(c[V>>2]|0)+1}g=c[$>>2]|0;if(a[g+13>>0]|0){c[Z>>2]=0;m=Z+4|0;c[m>>2]=0;c[Z+8>>2]=0;fj(ea,313156);j=c[_>>2]|0;g=c[j+76>>2]|0;e=c[j+80>>2]|0;if((g|0)==(e|0))h=0;else{h=0;do{i=c[g>>2]|0;f=a[i+11>>0]|0;if(f<<24>>24<0)i=c[i+4>>2]|0;else i=f&255;h=h+((i|0)!=0&1)|0;g=g+4|0}while((g|0)!=(e|0))}g=a[j+20+11>>0]|0;if(g<<24>>24<0)g=c[j+24>>2]|0;else g=g&255;if(g|0){Ul(c[ea>>2]|0,0,298038);k=ea+84|0;c[k>>2]=1;T=c[ea>>2]|0;e=a[(c[$>>2]|0)+11>>0]|0;a[ba>>0]=0;a[ba+1>>0]=0;a[ba+2>>0]=0;a[ba+3>>0]=0;a[ba+4>>0]=0;f=c[T+4>>2]|0;Qn(T,ba,e<<24>>24==0?5:1,298055,0);e=ea+80|0;c[e>>2]=f;f=c[ea>>2]|0;c[ea+88>>2]=c[f+4>>2];T=c[_>>2]|0;g=T+20|0;V=a[g+11>>0]|0;U=V<<24>>24<0;V=U?c[T+24>>2]|0:V&255;g=U?c[g>>2]|0:g;U=ba;c[U>>2]=g;c[U+4>>2]=V;if(V>>>0<1|(V|0)==1&g>>>0<0)i=0;else{Un(ba);i=ba;g=c[i>>2]|0;i=c[i+4>>2]|0}Ul(f,i,324027);Qn(f,g,i,313350,1);b=c[e>>2]|0;f=c[k>>2]|0;g=c[ea>>2]|0;i=(c[g+4>>2]|0)-b|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(g,b,i+-5|0,298079);else{e=i-f|0;i=Sl(e)|0;j=i-f|0;if(j){Rn(g,i+b|0,f+b|0,e);g=c[ea>>2]|0}Wl(g,b,e,298079);Mn(c[ea>>2]|0,j)}c[k>>2]=0}if(!h){h=ba;l=ea+84|0;k=ea+80|0;g=ea+88|0}else{Ul(c[ea>>2]|0,1,298101);l=ea+84|0;c[l>>2]=1;g=c[ea>>2]|0;k=a[(c[$>>2]|0)+11>>0]|0;a[ba>>0]=0;a[ba+1>>0]=0;a[ba+2>>0]=0;a[ba+3>>0]=0;a[ba+4>>0]=0;V=c[g+4>>2]|0;Qn(g,ba,k<<24>>24==0?5:1,298055,0);k=ea+80|0;c[k>>2]=V;V=c[ea>>2]|0;g=ea+88|0;c[g>>2]=c[V+4>>2];Ul(V,h,297613);h=c[_>>2]|0;if((c[h+80>>2]|0)!=(c[h+76>>2]|0)){b=0;do{f=c[(c[h+76>>2]|0)+(b<<2)>>2]|0;j=f+11|0;i=a[j>>0]|0;if(i<<24>>24<0)i=c[f+4>>2]|0;else i=i&255;if(i){Ul(c[ea>>2]|0,b,313526);c[W>>2]=b;Sz(X,100,298120,W)|0;e=c[ea>>2]|0;V=a[j>>0]|0;h=V<<24>>24<0;V=h?c[f+4>>2]|0:V&255;h=h?c[f>>2]|0:f;U=ba;c[U>>2]=h;c[U+4>>2]=V;if(V>>>0<1|(V|0)==1&h>>>0<0)i=0;else{Un(ba);i=ba;h=c[i>>2]|0;i=c[i+4>>2]|0}Ul(e,i,324027);Qn(e,h,i,X,1);h=c[_>>2]|0}b=b+1|0}while(b>>>0<(c[h+80>>2]|0)-(c[h+76>>2]|0)>>2>>>0)}b=c[k>>2]|0;f=c[l>>2]|0;h=c[ea>>2]|0;i=(c[h+4>>2]|0)-b|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(h,b,i+-5|0,298079);else{e=i-f|0;i=Sl(e)|0;j=i-f|0;if(j){Rn(h,i+b|0,f+b|0,e);h=c[ea>>2]|0}Wl(h,b,e,298079);Mn(c[ea>>2]|0,j)}c[l>>2]=0;h=ba}Ul(c[ea>>2]|0,2,298134);c[l>>2]=1;U=c[ea>>2]|0;V=a[(c[$>>2]|0)+11>>0]|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;a[h+4>>0]=0;W=c[U+4>>2]|0;Qn(U,h,V<<24>>24==0?5:1,298055,0);c[k>>2]=W;W=c[ea>>2]|0;c[g>>2]=c[W+4>>2];g=c[_>>2]|0;Ul(W,(c[g+80>>2]|0)-(c[g+76>>2]|0)>>2,297613);g=c[_>>2]|0;if((c[g+80>>2]|0)!=(c[g+76>>2]|0)){b=0;do{W=c[(c[g+76>>2]|0)+(b<<2)>>2]|0;e=(c[W+56>>2]|0)-(c[W+52>>2]|0)>>2;e=e+(Ok(c[W+76>>2]|0,c[W+80>>2]|0)|0)|0;Ul(c[ea>>2]|0,b,313526);Ul(c[ea>>2]|0,e,298150);Cl(e,W+88|0,Z);if(e|0){i=c[Z>>2]|0;j=0;do{g=i+(j*12|0)|0;c[Y>>2]=j;Sz(X,100,298161,Y)|0;Ul(c[ea>>2]|0,j,298176);f=c[ea>>2]|0;W=a[g+11>>0]|0;V=W<<24>>24<0;W=V?c[i+(j*12|0)+4>>2]|0:W&255;g=V?c[g>>2]|0:g;V=ba;c[V>>2]=g;c[V+4>>2]=W;if(W>>>0<1|(W|0)==1&g>>>0<0)h=0;else{Un(ba);h=ba;g=c[h>>2]|0;h=c[h+4>>2]|0}Ul(f,h,324027);Qn(f,g,h,X,1);j=j+1|0}while((j|0)!=(e|0))}b=b+1|0;g=c[_>>2]|0}while(b>>>0<(c[g+80>>2]|0)-(c[g+76>>2]|0)>>2>>>0)}j=c[k>>2]|0;i=c[l>>2]|0;g=c[ea>>2]|0;h=(c[g+4>>2]|0)-j|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(g,j,h+-5|0,298079);else{f=h-i|0;h=Sl(f)|0;e=h-i|0;if(e){Rn(g,h+j|0,i+j|0,f);g=c[ea>>2]|0}Wl(g,j,f,298079);Mn(c[ea>>2]|0,e)}c[l>>2]=0;e=c[ea+64>>2]|0;b=ea+68|0;i=c[b>>2]|0;g=c[ea>>2]|0;h=(c[g+4>>2]|0)-e|0;do if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(g,e,h+-5|0,297536);else{f=h-i|0;h=Sl(f)|0;j=h-i|0;if(j){Rn(g,h+e|0,i+e|0,f);g=c[ea>>2]|0}Wl(g,e,f,297536);Mn(c[ea>>2]|0,j);g=c[ea+56>>2]|0;if(!((j|0)!=0&(g|0)!=0))break;h=c[g+8>>2]|0;i=c[g+12>>2]|0;if((h|0)==(i|0))break;g=h;do{Y=g+4|0;c[Y>>2]=(c[Y>>2]|0)+j;g=g+16|0}while((g|0)!=(i|0))}while(0);c[b>>2]=0;h=ea+60|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Z>>2]|0;if(h|0){g=c[m>>2]|0;if((g|0)!=(h|0))do{g=g+-12|0;if((a[g+11>>0]|0)<0)$A(c[g>>2]|0)}while((g|0)!=(h|0));c[m>>2]=h;$A(h)}g=c[$>>2]|0}if(a[g+12>>0]|0){fj(ea,314485);Ul(c[ea>>2]|0,2,298188);g=ea+32|0;h=ea+36|0;if((c[h>>2]|0)!=(c[g>>2]|0)){k=c[ea>>2]|0;a[ba>>0]=8;Qn(k,ba,1,298205,0);k=ea+84|0;c[k>>2]=1;Z=c[ea>>2]|0;b=a[(c[$>>2]|0)+11>>0]|0;a[ba>>0]=0;a[ba+1>>0]=0;a[ba+2>>0]=0;a[ba+3>>0]=0;a[ba+4>>0]=0;j=c[Z+4>>2]|0;Qn(Z,ba,b<<24>>24==0?5:1,298055,0);b=ea+80|0;c[b>>2]=j;j=c[ea>>2]|0;c[ea+88>>2]=c[j+4>>2];Ul(j,((c[h>>2]|0)-(c[g>>2]|0)|0)/12|0,298218);g=c[g>>2]|0;j=c[h>>2]|0;f:do if((g|0)!=(j|0))while(1){e=g+4|0;h=c[e>>2]|0;switch(h|0){case 0:{f=g+8|0;i=f;f=(c[f>>2]|0)>>>0>=(c[(c[_>>2]|0)+48>>2]|0)>>>0;break}case 2:{f=g+8|0;i=f;f=(c[f>>2]|0)>>>0>=(c[(c[_>>2]|0)+60>>2]|0)>>>0;break}default:{i=g+8|0;f=1}}Z=c[ea>>2]|0;a[ba>>0]=h;Qn(Z,ba,1,298230,0);Ul(c[ea>>2]|0,f?0:16,298242);Ul(c[ea>>2]|0,c[i>>2]|0,298255);g:do if(f)switch(c[e>>2]|0){case 0:{X=c[ea>>2]|0;W=c[(c[(c[_>>2]|0)+76>>2]|0)+(c[i>>2]<<2)>>2]|0;Z=a[W+11>>0]|0;V=Z<<24>>24<0;Y=V?c[W>>2]|0:W;Z=V?c[W+4>>2]|0:Z&255;Ul(X,Z,324027);Qn(X,Y,Z,313628,1);break g}case 2:{X=c[ea>>2]|0;W=c[(c[(c[_>>2]|0)+88>>2]|0)+(c[i>>2]<<2)>>2]|0;Z=a[W+11>>0]|0;V=Z<<24>>24<0;Y=V?c[W>>2]|0:W;Z=V?c[W+4>>2]|0:Z&255;Ul(X,Z,324027);Qn(X,Y,Z,298269,1);break g}default:break g}while(0);g=g+12|0;if((g|0)==(j|0))break f}while(0);j=c[b>>2]|0;i=c[k>>2]|0;g=c[ea>>2]|0;h=(c[g+4>>2]|0)-j|0;if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(g,j,h+-5|0,298079);else{f=h-i|0;h=Sl(f)|0;e=h-i|0;if(e){Rn(g,h+j|0,i+j|0,f);g=c[ea>>2]|0}Wl(g,j,f,298079);Mn(c[ea>>2]|0,e)}c[k>>2]=0}o=ea+64|0;e=c[o>>2]|0;n=ea+68|0;i=c[n>>2]|0;g=c[ea>>2]|0;h=(c[g+4>>2]|0)-e|0;do if(!(a[(c[$>>2]|0)+11>>0]|0)){Tl(g,e,h+-5|0,297536);f=ea+56|0}else{f=h-i|0;h=Sl(f)|0;j=h-i|0;if(j){Rn(g,h+e|0,i+e|0,f);g=c[ea>>2]|0}Wl(g,e,f,297536);Mn(c[ea>>2]|0,j);f=ea+56|0;g=c[f>>2]|0;if(!((j|0)!=0&(g|0)!=0))break;h=c[g+8>>2]|0;i=c[g+12>>2]|0;if((h|0)==(i|0))break;g=h;do{_=g+4|0;c[_>>2]=(c[_>>2]|0)+j;g=g+16|0}while((g|0)!=(i|0))}while(0);c[n>>2]=0;m=ea+60|0;c[m>>2]=(c[m>>2]|0)+1;g=c[ea+44>>2]|0;l=c[ea+48>>2]|0;if((g|0)!=(l|0))do{h=c[g>>2]|0;c[ca>>2]=314270;c[ca+4>>2]=h;Sz(ba,128,298281,ca)|0;fj(ea,ba);Ul(c[ea>>2]|0,c[g+4>>2]|0,298287);h=g+8|0;i=g+12|0;Ul(c[ea>>2]|0,(c[i>>2]|0)-(c[h>>2]|0)>>4,298307);h=c[h>>2]|0;i=c[i>>2]|0;h:do if((h|0)!=(i|0))while(1){Ul(c[ea>>2]|0,c[h>>2]|0,298318);Ul(c[ea>>2]|0,c[h+4>>2]|0,298329);Ul(c[ea>>2]|0,c[h+8>>2]|0,298342);switch(c[h>>2]|0){case 9:case 8:case 5:case 11:case 4:case 3:{Ul(c[ea>>2]|0,c[h+12>>2]|0,298354);break}default:{}}h=h+16|0;if((h|0)==(i|0))break h}while(0);b=c[o>>2]|0;e=c[n>>2]|0;h=c[ea>>2]|0;i=(c[h+4>>2]|0)-b|0;do if(!(a[(c[$>>2]|0)+11>>0]|0))Tl(h,b,i+-5|0,297536);else{j=i-e|0;i=Sl(j)|0;k=i-e|0;if(k){Rn(h,i+b|0,e+b|0,j);h=c[ea>>2]|0}Wl(h,b,j,297536);Mn(c[ea>>2]|0,k);h=c[f>>2]|0;if(!((k|0)!=0&(h|0)!=0))break;i=c[h+8>>2]|0;e=c[h+12>>2]|0;if((i|0)==(e|0))break;h=i;do{_=h+4|0;c[_>>2]=(c[_>>2]|0)+k;h=h+16|0}while((h|0)!=(e|0))}while(0);c[n>>2]=0;c[m>>2]=(c[m>>2]|0)+1;g=g+20|0}while((g|0)!=(l|0))}j=c[(c[ea>>2]|0)+8>>2]|0;i=ea+44|0;f=c[i>>2]|0;if(f|0){e=ea+48|0;g=c[e>>2]|0;if((g|0)==(f|0))g=f;else{do{h=c[g+-12>>2]|0;if(h|0){c[g+-8>>2]=h;$A(h)}g=g+-20|0}while((g|0)!=(f|0));g=c[i>>2]|0}c[e>>2]=f;$A(g)}g=c[da>>2]|0;if(g|0){c[ea+36>>2]=g;$A(g)}g=c[ea+20>>2]|0;if(g|0)do{h=g;g=c[g>>2]|0;i=h+8|0;if((a[i+11>>0]|0)<0)$A(c[i>>2]|0);$A(h)}while((g|0)!=0);ea=ea+12|0;g=c[ea>>2]|0;c[ea>>2]=0;if(!g){aa=fa;return j|0}$A(g);aa=fa;return j|0}function cj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+128|0;h=j+112|0;i=j+104|0;f=j;e=cu(d)|0;c[i>>2]=e;c[i+4>>2]=d;Sz(f,100,298921,i)|0;e=c[b>>2]|0;g=c[e+12>>2]|0;if(g){c[h>>2]=f;Pn(g,298380,h);e=c[b>>2]|0}a[i>>0]=d;Qn(e,i,1,312891,0);c[b+72>>2]=d;c[b+68>>2]=1;g=c[b>>2]|0;h=a[(c[b+4>>2]|0)+11>>0]|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;a[i+4>>0]=0;d=c[g+4>>2]|0;Qn(g,i,h<<24>>24==0?5:1,298386,0);c[b+64>>2]=d;c[b+76>>2]=c[(c[b>>2]|0)+4>>2];aa=j;return}function dj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=aa;aa=aa+16|0;h=i;do switch(c[e+32>>2]|0){case 0:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 1:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 2:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 3:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 5:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 4:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,322276);aa=i;return}case 6:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 7:{$i(c[b>>2]|0,2);lj(b,e+48|0);f=c[e+112>>2]|0;if(f|0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,11);aa=i;return}case 8:{$i(c[b>>2]|0,12);Ul(c[b>>2]|0,c[e+60>>2]|0,298437);aa=i;return}case 9:{$i(c[b>>2]|0,13);Ul(c[b>>2]|0,c[e+60>>2]|0,298437);aa=i;return}case 10:{$i(c[b>>2]|0,10);Ul(c[b>>2]|0,c[e+60>>2]|0,298437);h=c[b>>2]|0;Ul(h,Jk(c[b+8>>2]|0,e+72|0)|0,322003);aa=i;return}case 11:{$i(c[b>>2]|0,14);f=e+36|0;g=e+40|0;Ul(c[b>>2]|0,((c[g>>2]|0)-(c[f>>2]|0)|0)/36|0,298449);f=c[f>>2]|0;g=c[g>>2]|0;if((f|0)!=(g|0))do{Ul(c[b>>2]|0,c[f+24>>2]|0,298437);f=f+36|0}while((f|0)!=(g|0));Ul(c[b>>2]|0,c[e+48+24>>2]|0,298461);aa=i;return}case 12:{e=Ek(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,16);ej(b,e,313526,0);aa=i;return}case 37:{e=Ek(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,18);ej(b,e,313526,0);aa=i;return}case 13:{d=c[b+8>>2]|0;h=bl(d,e+36|0)|0;e=Gk(d,e+100|0)|0;$i(c[b>>2]|0,17);ej(b,h,298485,6);Ul(c[b>>2]|0,e,322687);aa=i;return}case 38:{d=c[b+8>>2]|0;h=bl(d,e+36|0)|0;e=Gk(d,e+100|0)|0;$i(c[b>>2]|0,19);ej(b,h,298485,6);Ul(c[b>>2]|0,e,322687);aa=i;return}case 14:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 15:switch(c[e+60>>2]|0){case -1:{$i(c[b>>2]|0,52);Yl(c[b>>2]|0,c[e+64>>2]|0,298501);aa=i;return}case -2:{$i(c[b>>2]|0,53);e=e+64|0;Zl(c[b>>2]|0,c[e>>2]|0,c[e+4>>2]|0);aa=i;return}case -3:{$i(c[b>>2]|0,54);b=c[b>>2]|0;c[h>>2]=c[e+64>>2];Qn(b,h,4,298525,0);aa=i;return}case -4:{$i(c[b>>2]|0,55);b=c[b>>2]|0;g=e+64|0;d=c[g+4>>2]|0;e=h;c[e>>2]=c[g>>2];c[e+4>>2]=d;Qn(b,h,8,298537,0);aa=i;return}case -5:{$i(c[b>>2]|0,213);b=c[b>>2]|0;e=e+64|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];Qn(b,h,16,298549,0);aa=i;return}default:{aa=i;return}}case 16:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 17:{$i(c[b>>2]|0,20);aa=i;return}case 18:{e=Fk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,25);ej(b,e,298562,7);aa=i;return}case 19:{e=Fk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,26);ej(b,e,298562,7);aa=i;return}case 20:{$i(c[b>>2]|0,4);lj(b,e+48|0);g=c[e+112>>2]|0;if(g|0)do{dj(b,d,g);g=c[g+4>>2]|0}while((g|0)!=0);if(c[e+152>>2]|0?($i(c[b>>2]|0,5),f=c[e+144>>2]|0,f|0):0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,11);aa=i;return}case 21:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,321351);aa=i;return}case 22:{if(!d)if(!(c[e+56>>2]|0))f=c[e+60>>2]|0;else f=-1;else f=Qk(d,e+36|0)|0;$i(c[b>>2]|0,22);Ul(c[b>>2]|0,f,298176);aa=i;return}case 23:{if(!d)if(!(c[e+56>>2]|0))f=c[e+60>>2]|0;else f=-1;else f=Qk(d,e+36|0)|0;$i(c[b>>2]|0,23);Ul(c[b>>2]|0,f,298176);aa=i;return}case 24:{if(!d)if(!(c[e+56>>2]|0))f=c[e+60>>2]|0;else f=-1;else f=Qk(d,e+36|0)|0;$i(c[b>>2]|0,24);Ul(c[b>>2]|0,f,298176);aa=i;return}case 25:{$i(c[b>>2]|0,3);lj(b,e+48|0);f=c[e+112>>2]|0;if(f|0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,11);aa=i;return}case 26:{$i(c[b>>2]|0,199);Ul(c[b>>2]|0,0,298575);Ul(c[b>>2]|0,0,298575);aa=i;return}case 27:{e=Kk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,198);Ul(c[b>>2]|0,e,298596);aa=i;return}case 28:{$i(c[b>>2]|0,200);Ul(c[b>>2]|0,0,298614);aa=i;return}case 29:{$i(c[b>>2]|0,51);Ul(c[b>>2]|0,0,321538);aa=i;return}case 30:{e=Kk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,197);Ul(c[b>>2]|0,e,298635);Ul(c[b>>2]|0,0,298655);aa=i;return}case 31:{$i(c[b>>2]|0,50);Ul(c[b>>2]|0,0,321447);aa=i;return}case 44:{$i(c[b>>2]|0,203);Ul(c[b>>2]|0,0,298676);Ul(c[b>>2]|0,0,298676);aa=i;return}case 45:{e=Lk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,202);Ul(c[b>>2]|0,e,298696);aa=i;return}case 46:{e=Lk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,201);Ul(c[b>>2]|0,e,298714);Ul(c[b>>2]|0,0,298733);aa=i;return}case 47:{e=Gk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,204);Ul(c[b>>2]|0,e,298753);aa=i;return}case 50:{e=Gk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,205);Ul(c[b>>2]|0,e,298775);aa=i;return}case 48:{e=Gk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,206);Ul(c[b>>2]|0,e,298797);aa=i;return}case 49:{e=Gk(c[b+8>>2]|0,e+36|0)|0;$i(c[b>>2]|0,207);Ul(c[b>>2]|0,e,298820);aa=i;return}case 34:{$i(c[b>>2]|0,208);aa=i;return}case 33:{$i(c[b>>2]|0,209);aa=i;return}case 32:{$i(c[b>>2]|0,1);aa=i;return}case 35:{$i(c[b>>2]|0,9);aa=i;return}case 36:{$i(c[b>>2]|0,15);aa=i;return}case 39:{$i(c[b>>2]|0,21);aa=i;return}case 43:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,321406);aa=i;return}case 52:{$i(c[b>>2]|0,8);Ul(c[b>>2]|0,c[e+60>>2]|0,298843);aa=i;return}case 53:{$i(c[b>>2]|0,6);lj(b,e+48|0);f=c[e+112>>2]|0;if(f|0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,7);f=c[e+144>>2]|0;if(f|0)do{dj(b,d,f);f=c[f+4>>2]|0}while((f|0)!=0);$i(c[b>>2]|0,11);aa=i;return}case 54:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 51:{$i(c[b>>2]|0,c[e+36>>2]|0);aa=i;return}case 40:{$i(c[b>>2]|0,c[e+36>>2]|0);b=c[b>>2]|0;a[h>>0]=c[e+40>>2];Qn(b,h,1,298855,0);aa=i;return}case 41:{$i(c[b>>2]|0,c[e+36>>2]|0);b=c[b>>2]|0;e=e+40|0;c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];Qn(b,h,16,298873,0);aa=i;return}case 42:{g=e+36|0;$i(c[b>>2]|0,c[g>>2]|0);g=Cm(g,c[e+40>>2]|0)|0;d=c[b>>2]|0;if(g>>>0>1){f=0;while(1){f=f+1<<24>>24;if(g>>>0>3)g=g>>>1;else break}}else f=0;a[h>>0]=f;Qn(d,h,1,298427,0);Ul(c[b>>2]|0,c[e+44>>2]|0,321351);aa=i;return}case 55:{$i(c[b>>2]|0,0);aa=i;return}default:{aa=i;return}}while(0)}function ej(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=aa;aa=aa+32|0;w=A+12|0;y=A+8|0;x=A+4|0;z=A;if(!(a[(c[b+4>>2]|0)+12>>0]|0)){Ul(c[b>>2]|0,d,e);aa=A;return}c[y>>2]=f;v=b+56|0;g=c[v>>2]|0;if(g){h=b+60|0;if((c[g+4>>2]|0)!=(c[h>>2]|0))i=5}else{h=b+60|0;i=5}if((i|0)==5){l=cu(c[b+72>>2]|0)|0;s=b+48|0;o=c[s>>2]|0;r=b+52|0;q=c[r>>2]|0;j=c[h>>2]|0;h=q;if(o>>>0>=q>>>0){q=b+44|0;g=c[q>>2]|0;k=(o-g|0)/20|0;i=k+1|0;m=g;if(i>>>0>214748364)HB();n=(h-g|0)/20|0;h=n<<1;h=n>>>0<107374182?(h>>>0<i>>>0?i:h):214748364;do if(h)if(h>>>0>214748364)U();else{p=_A(h*20|0)|0;break}else p=0;while(0);i=p+(k*20|0)|0;n=p+(h*20|0)|0;c[i>>2]=l;c[p+(k*20|0)+4>>2]=j;c[p+(k*20|0)+8>>2]=0;c[p+(k*20|0)+12>>2]=0;c[p+(k*20|0)+16>>2]=0;k=i+20|0;if((o|0)!=(m|0)){g=o;do{j=i;i=i+-20|0;l=g;g=g+-20|0;h=g;p=c[h+4>>2]|0;o=i;c[o>>2]=c[h>>2];c[o+4>>2]=p;o=j+-12|0;p=l+-12|0;c[o>>2]=0;h=j+-8|0;c[h>>2]=0;j=j+-4|0;c[j>>2]=0;c[o>>2]=c[p>>2];o=l+-8|0;c[h>>2]=c[o>>2];l=l+-4|0;c[j>>2]=c[l>>2];c[l>>2]=0;c[o>>2]=0;c[p>>2]=0}while((g|0)!=(m|0));g=c[q>>2]|0;h=c[s>>2]|0;j=g;c[q>>2]=i;c[s>>2]=k;c[r>>2]=n;if((h|0)!=(j|0))do{i=c[h+-12>>2]|0;if(i|0){c[h+-8>>2]=i;$A(i)}h=h+-20|0}while((h|0)!=(j|0))}else{c[q>>2]=i;c[s>>2]=k;c[r>>2]=n}if(g|0)$A(g)}else{c[o>>2]=l;c[o+4>>2]=j;c[o+8>>2]=0;c[o+12>>2]=0;c[o+16>>2]=0;c[s>>2]=o+20}c[v>>2]=(c[s>>2]|0)+-20}q=(c[(c[b>>2]|0)+4>>2]|0)-(c[b+76>>2]|0)|0;c[x>>2]=q;c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;switch(f|0){case 0:{lB(w,c[(c[(c[b+8>>2]|0)+76>>2]|0)+(d<<2)>>2]|0)|0;t=0;break}case 7:{lB(w,c[(c[(c[b+8>>2]|0)+88>>2]|0)+(d<<2)>>2]|0)|0;t=2;break}default:U()}h=b+12|0;g=gj(h,w)|0;do if(!g){p=b+32|0;o=b+36|0;j=((c[o>>2]|0)-(c[p>>2]|0)|0)/12|0;g=hj(h,w)|0;c[g>>2]=j;g=c[o>>2]|0;n=b+40|0;h=c[n>>2]|0;if(g>>>0<h>>>0){c[g>>2]=j;c[g+4>>2]=t;c[g+8>>2]=d;c[o>>2]=(c[o>>2]|0)+12;break}m=c[p>>2]|0;l=g-m|0;k=(l|0)/12|0;g=k+1|0;if(g>>>0>357913941)HB();s=(h-m|0)/12|0;i=s<<1;i=s>>>0<178956970?(i>>>0<g>>>0?g:i):357913941;do if(i)if(i>>>0>357913941)U();else{u=_A(i*12|0)|0;break}else u=0;while(0);h=u+(k*12|0)|0;c[h>>2]=j;c[u+(k*12|0)+4>>2]=t;c[u+(k*12|0)+8>>2]=d;g=h+(((l|0)/-12|0)*12|0)|0;if((l|0)>0)sC(g|0,m|0,l|0)|0;c[p>>2]=g;c[o>>2]=h+12;c[n>>2]=u+(i*12|0);if(m)$A(m)}else j=c[g+20>>2]|0;while(0);if((a[w+11>>0]|0)<0)$A(c[w>>2]|0);c[z>>2]=j;g=c[v>>2]|0;i=g+12|0;h=c[i>>2]|0;if(h>>>0<(c[g+16>>2]|0)>>>0){Gj(h,f,q,j,0);c[i>>2]=(c[i>>2]|0)+16}else ij(g+8|0,y,x,z);Vl(c[b>>2]|0,d,e);aa=A;return}function fj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+128|0;h=j+112|0;i=j+104|0;f=j;c[i>>2]=d;Sz(f,100,298367,i)|0;e=c[b>>2]|0;g=c[e+12>>2]|0;if(g){c[h>>2]=f;Pn(g,298380,h);e=c[b>>2]|0}a[i>>0]=0;Qn(e,i,1,312891,0);c[b+72>>2]=0;c[b+68>>2]=1;f=c[b>>2]|0;g=a[(c[b+4>>2]|0)+11>>0]|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;a[i+4>>0]=0;h=c[f+4>>2]|0;Qn(f,i,g<<24>>24==0?5:1,298386,0);c[b+64>>2]=h;h=c[b>>2]|0;c[b+76>>2]=c[h+4>>2];i=Uz(d)|0;Ul(h,i,324027);Qn(h,d,i,298407,1);aa=j;return}function gj(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=a[e+11>>0]|0;r=s<<24>>24<0;t=r?c[e>>2]|0:e;s=r?c[e+4>>2]|0:s&255;if(s>>>0>3){e=t;h=s;f=s;while(1){r=v(d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24,1540483477)|0;h=(v(r>>>24^r,1540483477)|0)^(v(h,1540483477)|0);f=f+-4|0;if(f>>>0<=3)break;else e=e+4|0}r=s+-4|0;f=r&-4;g=t+(f+4)|0;e=h;f=r-f|0}else{g=t;e=s;f=s}switch(f|0){case 3:{i=d[g+2>>0]<<16^e;l=7;break}case 2:{i=e;l=7;break}case 1:{j=e;l=8;break}default:k=e}if((l|0)==7){j=d[g+1>>0]<<8^i;l=8}if((l|0)==8)k=v(j^d[g>>0],1540483477)|0;r=v(k>>>13^k,1540483477)|0;r=r>>>15^r;p=c[b+4>>2]|0;if(!p){t=0;return t|0}i=p+-1|0;f=(i&p|0)==0;if(!f)if(r>>>0<p>>>0)q=r;else q=(r>>>0)%(p>>>0)|0;else q=r&i;e=c[(c[b>>2]|0)+(q<<2)>>2]|0;if(!e){t=0;return t|0}j=c[e>>2]|0;if(!j){t=0;return t|0}k=(s|0)==0;if(f){e=j;a:while(1){l=c[e+4>>2]|0;f=(l|0)==(r|0);if(!(f|(l&i|0)==(q|0))){e=0;l=45;break}do if(f?(m=e+8|0,n=a[m+11>>0]|0,o=n<<24>>24<0,n=n&255,((o?c[e+12>>2]|0:n)|0)==(s|0)):0){f=c[m>>2]|0;g=o?f:m;f=f&255;if(o){if(k){l=45;break a}if(!(Tz(g,t,s)|0)){l=45;break a}else break}if(k){l=45;break a}if((a[t>>0]|0)==f<<24>>24){f=n;g=m;h=t;do{f=f+-1|0;g=g+1|0;if(!f){l=45;break a}h=h+1|0}while((a[g>>0]|0)==(a[h>>0]|0))}}while(0);e=c[e>>2]|0;if(!e){e=0;l=45;break}}if((l|0)==45)return e|0}b:while(1){e=c[j+4>>2]|0;do if((e|0)==(r|0)){e=j+8|0;g=a[e+11>>0]|0;i=g<<24>>24<0;g=g&255;if(((i?c[j+12>>2]|0:g)|0)==(s|0)){f=c[e>>2]|0;h=i?f:e;f=f&255;if(i){if(k){e=j;l=45;break b}if(!(Tz(h,t,s)|0)){e=j;l=45;break b}else break}if(k){e=j;l=45;break b}if((a[t>>0]|0)==f<<24>>24){f=t;do{g=g+-1|0;e=e+1|0;if(!g){e=j;l=45;break b}f=f+1|0}while((a[e>>0]|0)==(a[f>>0]|0))}}}else{if(e>>>0>=p>>>0)e=(e>>>0)%(p>>>0)|0;if((e|0)!=(q|0)){e=0;l=45;break b}}while(0);j=c[j>>2]|0;if(!j){e=0;l=45;break}}if((l|0)==45)return e|0;return 0} +function $t(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;A=aa;aa=aa+32|0;y=A+20|0;z=A;w=a+40|0;x=a+44|0;m=c[x>>2]|0;i=m;k=(d|0)!=0;a:do if(k?(h=c[w>>2]|0,(m|0)!=(h|0)):0){g=0;j=m;while(1){u=j;j=j+-20|0;g=(c[u+-4>>2]|0)+g|0;if((g|0)==(d|0))break;if(g>>>0>d>>>0|(j|0)==(h|0)){u=g;g=i;break a}}u=d;g=j}else{u=0;g=i}while(0);c[z>>2]=b;c[z+4>>2]=0;q=z+8|0;c[q>>2]=0;r=z+12|0;c[r>>2]=0;s=z+16|0;c[s>>2]=e;do if(k&(u|0)==(d|0)?(o=z+4|0,f=g,(m|0)!=(f|0)):0){g=0;i=0;h=f;while(1){j=i;if(g>>>0>=i>>>0){i=c[o>>2]|0;b=(g-i|0)/20|0;g=b+1|0;if(g>>>0>214748364){g=13;break}l=(j-i|0)/20|0;n=l<<1;g=l>>>0<107374182?(n>>>0<g>>>0?g:n):214748364;if(!g)i=0;else{if(g>>>0>214748364){g=16;break}i=_A(g*20|0)|0}j=i+(b*20|0)|0;n=i+(g*20|0)|0;c[j>>2]=c[h>>2];g=h+4|0;c[i+(b*20|0)+4>>2]=c[g>>2];k=h+8|0;c[i+(b*20|0)+8>>2]=c[k>>2];l=h+12|0;c[i+(b*20|0)+12>>2]=c[l>>2];c[l>>2]=0;c[k>>2]=0;c[g>>2]=0;c[i+(b*20|0)+16>>2]=c[h+16>>2];g=j+20|0;k=g;b=c[o>>2]|0;i=c[q>>2]|0;if((i|0)==(b|0)){l=b;i=b}else{do{l=j;j=j+-20|0;B=i;i=i+-20|0;c[j>>2]=c[i>>2];D=l+-16|0;C=B+-16|0;c[D>>2]=0;E=l+-12|0;c[E>>2]=0;F=l+-8|0;c[F>>2]=0;c[D>>2]=c[C>>2];D=B+-12|0;c[E>>2]=c[D>>2];E=B+-8|0;c[F>>2]=c[E>>2];c[E>>2]=0;c[D>>2]=0;c[C>>2]=0;c[l+-4>>2]=c[B+-4>>2]}while((i|0)!=(b|0));l=c[o>>2]|0;i=c[q>>2]|0}c[o>>2]=j;c[q>>2]=k;c[r>>2]=n;k=l;if((i|0)!=(k|0))do{j=i+-16|0;i=i+-20|0;b=c[j>>2]|0;if(b|0){Es(j,b);$A(c[j>>2]|0)}}while((i|0)!=(k|0));if(l)$A(l)}else{c[g>>2]=c[h>>2];E=g+4|0;F=h+4|0;c[E>>2]=0;D=g+8|0;c[D>>2]=0;C=g+12|0;c[C>>2]=0;c[E>>2]=c[F>>2];E=h+8|0;c[D>>2]=c[E>>2];D=h+12|0;c[C>>2]=c[D>>2];c[D>>2]=0;c[E>>2]=0;c[F>>2]=0;c[g+16>>2]=c[h+16>>2];g=(c[q>>2]|0)+20|0;c[q>>2]=g}h=h+20|0;if((h|0)==(m|0)){g=32;break}i=c[r>>2]|0}if((g|0)==13)HB();else if((g|0)==16)U();else if((g|0)==32){n=c[x>>2]|0;if((n|0)!=(m|0))do{c[f>>2]=c[m>>2];k=f+4|0;l=m+4|0;b=c[k>>2]|0;if(!b){g=f+8|0;h=f+12|0}else{g=f+8|0;h=c[g>>2]|0;if((h|0)==(b|0))h=b;else{do{i=h+-16|0;h=h+-20|0;j=c[i>>2]|0;if(j|0){Es(i,j);$A(c[i>>2]|0)}}while((h|0)!=(b|0));h=c[k>>2]|0}c[g>>2]=b;$A(h);h=f+12|0;c[h>>2]=0;c[g>>2]=0;c[k>>2]=0}c[k>>2]=c[l>>2];F=m+8|0;c[g>>2]=c[F>>2];E=m+12|0;c[h>>2]=c[E>>2];c[E>>2]=0;c[F>>2]=0;c[l>>2]=0;c[f+16>>2]=c[m+16>>2];m=m+20|0;f=f+20|0}while((m|0)!=(n|0));Es(w,f);p=c[x>>2]|0;break}}else p=m;while(0);k=a+48|0;F=c[k>>2]|0;g=F;if(p>>>0>=F>>>0){f=c[w>>2]|0;i=(p-f|0)/20|0;h=i+1|0;j=f;if(h>>>0>214748364)HB();F=(g-f|0)/20|0;g=F<<1;g=F>>>0<107374182?(g>>>0<h>>>0?h:g):214748364;do if(g)if(g>>>0>214748364)U();else{t=_A(g*20|0)|0;break}else t=0;while(0);h=t+(i*20|0)|0;b=t+(g*20|0)|0;c[h>>2]=c[z>>2];F=z+4|0;c[t+(i*20|0)+4>>2]=c[F>>2];c[t+(i*20|0)+8>>2]=c[q>>2];c[t+(i*20|0)+12>>2]=c[r>>2];c[r>>2]=0;c[q>>2]=0;c[F>>2]=0;c[t+(i*20|0)+16>>2]=c[s>>2];i=h+20|0;if((p|0)!=(j|0)){f=p;do{F=h;h=h+-20|0;E=f;f=f+-20|0;c[h>>2]=c[f>>2];C=F+-16|0;D=E+-16|0;c[C>>2]=0;B=F+-12|0;c[B>>2]=0;t=F+-8|0;c[t>>2]=0;c[C>>2]=c[D>>2];C=E+-12|0;c[B>>2]=c[C>>2];B=E+-8|0;c[t>>2]=c[B>>2];c[B>>2]=0;c[C>>2]=0;c[D>>2]=0;c[F+-4>>2]=c[E+-4>>2]}while((f|0)!=(j|0));f=c[w>>2]|0;g=c[x>>2]|0;j=f;c[w>>2]=h;c[x>>2]=i;c[k>>2]=b;if((g|0)!=(j|0))do{h=g+-16|0;g=g+-20|0;i=c[h>>2]|0;if(i|0){Es(h,i);$A(c[h>>2]|0)}}while((g|0)!=(j|0))}else{c[w>>2]=h;c[x>>2]=i;c[k>>2]=b}if(f|0)$A(f)}else{c[p>>2]=c[z>>2];F=z+4|0;c[p+4>>2]=c[F>>2];c[p+8>>2]=c[q>>2];c[p+12>>2]=c[r>>2];c[r>>2]=0;c[q>>2]=0;c[F>>2]=0;c[p+16>>2]=c[s>>2];c[x>>2]=(c[x>>2]|0)+20}if((e|0)==0|u>>>0>d>>>0?(F=c[w>>2]|0,c[y>>2]=F,E=c[x>>2]|0,c[y+4>>2]=E,c[y+8>>2]=c[k>>2],v=F,c[w>>2]=0,c[w+4>>2]=0,c[w+8>>2]=0,Ds(a,v,E),F|0):0){Es(y,v);$A(c[y>>2]|0)}f=z+4|0;g=c[f>>2]|0;if(!g){aa=A;return}Es(f,g);$A(c[f>>2]|0);aa=A;return}function au(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if((c[d+20>>2]|0)!=1){e=c[d+24>>2]|0;d=c[b+28>>2]|0;b=((c[b+32>>2]|0)-d|0)/40|0;if(b>>>0>e>>>0){b=d+((b+~e|0)*40|0)|0;k=17}else{k=0;return k|0}}else{j=c[b+28>>2]|0;b=(c[b+32>>2]|0)-j|0;if(!b){k=0;return k|0}e=(b|0)/40|0;h=d+24|0;i=a[h+11>>0]|0;g=i<<24>>24<0;i=g?c[d+28>>2]|0:i&255;h=g?c[h>>2]|0:h;if(!i){while(1){e=e+-1|0;b=j+(e*40|0)|0;i=a[b+11>>0]|0;if(!((i<<24>>24<0?c[j+(e*40|0)+4>>2]|0:i&255)|0))break a;if(!e){b=0;break}}return b|0}while(1){e=e+-1|0;b=j+(e*40|0)|0;f=a[b+11>>0]|0;g=f<<24>>24<0;f=f&255;do if(((g?c[j+(e*40|0)+4>>2]|0:f)|0)==(i|0)){d=c[b>>2]|0;if(g)if(!(Tz(d,h,i)|0))break a;else break;if((a[h>>0]|0)==(d&255)<<24>>24){d=f;f=b;g=h;do{d=d+-1|0;f=f+1|0;if(!d){k=17;break a}g=g+1|0}while((a[f>>0]|0)==(a[g>>0]|0))}}while(0);if(!e){b=0;break}}return b|0}while(0);if((k|0)==17)if(!b){k=0;return k|0}if((c[b+12>>2]|0)==2){k=(c[b+20>>2]|0)-(c[b+16>>2]|0)>>2;return k|0}else{k=(c[b+32>>2]|0)-(c[b+28>>2]|0)>>2;return k|0}return 0}function bu(a){a=a|0;var b=0;switch(a|0){case 6:case 5:case 4:case 3:case 2:case 1:case 0:{b=a;break}case 13:{b=7;break}case 7:{b=8;break}case 8:{b=9;break}case 9:{b=10;break}case 12:{b=11;break}case 10:{b=12;break}case 11:{b=13;break}default:U()}return b|0}function cu(a){a=a|0;var b=0;do switch(a|0){case 0:{b=312679;break}case 1:{b=312674;break}case 2:{b=312667;break}case 3:{b=312658;break}case 4:{b=312652;break}case 5:{b=312645;break}case 6:{b=312638;break}case 13:{b=312632;break}case 7:{b=312625;break}case 8:{b=312619;break}case 9:{b=312614;break}case 12:{b=312604;break}case 10:{b=312599;break}case 11:{b=312594;break}default:U()}while(0);return b|0}function du(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;u=aa;aa=aa+208|0;q=u+48|0;p=u+40|0;o=u+32|0;r=u+24|0;n=u+16|0;m=u+8|0;j=u;t=u+52|0;c[t>>2]=e;i=t+4|0;c[i>>2]=b;c[t+8>>2]=e;l=t+12|0;c[l>>2]=0;s=t+16|0;b=g+12|0;$x(s,c[b>>2]|0,f);k=t+36|0;c[k>>2]=(c[b>>2]|0)==0?f:s;s=t+40|0;b=t+76|0;e=s;h=e+36|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(h|0));c[b>>2]=g;c[t+80>>2]=-1;a[t+84>>0]=0;a[t+85>>0]=0;b=t+144|0;e=t+88|0;h=e+56|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(h|0));c[b>>2]=-1;na[c[(c[f>>2]|0)+12>>2]&31](f,i);b=c[l>>2]|0;f=b+4|0;g=c[t>>2]|0;do if(f>>>0<=g>>>0){h=c[t+4>>2]|0;j=h+b|0;j=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;c[l>>2]=f;if((j|0)!=1836278016){eu(t,312723,m);e=1;break}e=b+8|0;if(e>>>0>g>>>0){c[n>>2]=312692;c[n+4>>2]=312739;eu(t,312701,n);e=1;break}b=h+f|0;b=d[b>>0]|d[b+1>>0]<<8|d[b+2>>0]<<16|d[b+3>>0]<<24;c[l>>2]=e;if((b|0)!=1){c[r>>2]=b;c[r+4>>2]=1;eu(t,312747,r);e=1;break}r=c[k>>2]|0;if(fa[c[(c[r>>2]|0)+16>>2]&511](r,1)|0){eu(t,312789,o);e=1;break}if((fu(t)|0)!=1){if((c[t+116>>2]|0)!=(c[t+136>>2]|0)){eu(t,312817,p);e=1;break}r=c[k>>2]|0;if(!(ea[c[(c[r>>2]|0)+20>>2]&127](r)|0))e=0;else{eu(t,312865,q);e=1}}else e=1}else{c[j>>2]=312692;c[j+4>>2]=312686;eu(t,312701,j);e=1}while(0);b=c[t+64>>2]|0;if(b|0){c[t+68>>2]=b;$A(b)}b=c[t+52>>2]|0;if(b|0){c[t+56>>2]=b;$A(b)}b=c[s>>2]|0;if(!b){aa=u;return e|0}c[t+44>>2]=b;$A(b);aa=u;return e|0}function eu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=aa;aa=aa+224|0;m=n+176|0;l=n+160|0;g=n+144|0;i=n+128|0;h=n;j=n+188|0;if(!(a[b+85>>0]|0))k=1;else k=d[(c[b+76>>2]|0)+18>>0]|0;c[g>>2]=f;c[i>>2]=c[g>>2];g=(Vz(h,128,e,g)|0)+1|0;if(g>>>0>128){h=aa;aa=aa+((1*g|0)+15&-16)|0;Vz(h,g,e,i)|0}g=b+12|0;f=c[g>>2]|0;e=Uz(h)|0;c[j>>2]=k;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=f;f=j+24|0;Wn(f,h,e);b=c[b+36>>2]|0;a:do if(!(fa[c[(c[b>>2]|0)+8>>2]&511](b,j)|0)){g=c[g>>2]|0;switch((k&255)<<24>>24){case 0:{c[l>>2]=g;c[l+4>>2]=324100;c[l+8>>2]=h;BA(0,324108,l);break a}case 1:{c[m>>2]=g;c[m+4>>2]=324094;c[m+8>>2]=h;BA(0,324108,m);break a}default:U()}}while(0);if((a[f+11>>0]|0)>=0){aa=n;return}$A(c[f>>2]|0);aa=n;return}function fu(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,ba=0,ca=0,da=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0,Le=0,Me=0,Ne=0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0,ef=0,ff=0,gf=0,hf=0,jf=0,kf=0,lf=0,mf=0,nf=0,of=0,pf=0,qf=0,rf=0,sf=0,tf=0,uf=0,vf=0,wf=0,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Df=0,Ef=0,Ff=0,Gf=0,Hf=0,If=0,Jf=0,Kf=0,Lf=0,Mf=0,Nf=0,Of=0,Pf=0,Qf=0,Rf=0,Sf=0,Tf=0;Pf=aa;aa=aa+2560|0;Ra=Pf+2520|0;Sa=Pf+2496|0;Df=Pf+2488|0;Cf=Pf+2480|0;Bf=Pf+2472|0;Af=Pf+2464|0;zf=Pf+2456|0;yf=Pf+2448|0;xf=Pf+2440|0;wf=Pf+2432|0;vf=Pf+2424|0;tf=Pf+2408|0;sf=Pf+2400|0;rf=Pf+2392|0;qf=Pf+2384|0;pf=Pf+2376|0;of=Pf+2368|0;nf=Pf+2360|0;mf=Pf+2352|0;lf=Pf+2344|0;kf=Pf+2336|0;jf=Pf+2328|0;hf=Pf+2320|0;ff=Pf+2312|0;ef=Pf+2304|0;df=Pf+2296|0;cf=Pf+2288|0;bf=Pf+2280|0;af=Pf+2272|0;$e=Pf+2256|0;Ze=Pf+2248|0;Ye=Pf+2240|0;Xe=Pf+2232|0;We=Pf+2224|0;Ve=Pf+2216|0;Ue=Pf+2208|0;Te=Pf+2200|0;Se=Pf+2192|0;Re=Pf+2184|0;Pe=Pf+2176|0;Oe=Pf+2160|0;Ne=Pf+2152|0;Me=Pf+2144|0;Le=Pf+2136|0;Ke=Pf+2128|0;Je=Pf+2120|0;Ie=Pf+2104|0;He=Pf+2096|0;Ge=Pf+2088|0;Ee=Pf+2080|0;De=Pf+2072|0;Ce=Pf+2064|0;Be=Pf+2056|0;Ae=Pf+2048|0;ze=Pf+2040|0;ye=Pf+2032|0;xe=Pf+2024|0;we=Pf+2016|0;ve=Pf+2008|0;ue=Pf+1992|0;te=Pf+1984|0;re=Pf+1976|0;qe=Pf+1968|0;pe=Pf+1960|0;oe=Pf+1952|0;ne=Pf+1944|0;me=Pf+1936|0;le=Pf+1928|0;ke=Pf+1920|0;je=Pf+1912|0;ie=Pf+1904|0;he=Pf+1888|0;ge=Pf+1880|0;ee=Pf+1872|0;de=Pf+1864|0;ce=Pf+1856|0;be=Pf+1848|0;ae=Pf+1840|0;$d=Pf+1832|0;_d=Pf+1824|0;Zd=Pf+1816|0;Yd=Pf+1808|0;Xd=Pf+1800|0;Wd=Pf+1792|0;Vd=Pf+1784|0;Td=Pf+1776|0;Sd=Pf+1768|0;Rd=Pf+1760|0;Qd=Pf+1752|0;Pd=Pf+1744|0;Od=Pf+1736|0;Md=Pf+1720|0;Ld=Pf+1712|0;Kd=Pf+1704|0;Jd=Pf+1696|0;Id=Pf+1688|0;Hd=Pf+1680|0;Gd=Pf+1672|0;Fd=Pf+1664|0;Ed=Pf+1656|0;Dd=Pf+1640|0;Cd=Pf+1632|0;Bd=Pf+1624|0;Ad=Pf+1616|0;zd=Pf+1608|0;yd=Pf+1600|0;xd=Pf+1592|0;wd=Pf+1576|0;vd=Pf+1568|0;ud=Pf+1560|0;td=Pf+1552|0;rd=Pf+1544|0;qd=Pf+1536|0;pd=Pf+1528|0;od=Pf+1512|0;nd=Pf+1504|0;md=Pf+1496|0;ld=Pf+1488|0;kd=Pf+1480|0;id=Pf+1472|0;hd=Pf+1464|0;gd=Pf+1456|0;ed=Pf+1440|0;dd=Pf+1432|0;cd=Pf+1424|0;bd=Pf+1416|0;ad=Pf+1408|0;$c=Pf+1400|0;_c=Pf+1392|0;Zc=Pf+1384|0;Yc=Pf+1376|0;Wc=Pf+1368|0;Vc=Pf+1360|0;Uc=Pf+1352|0;Tc=Pf+1344|0;Sc=Pf+1336|0;Rc=Pf+1328|0;Qc=Pf+1320|0;Pc=Pf+1312|0;Nc=Pf+1304|0;Mc=Pf+1296|0;Lc=Pf+1280|0;Kc=Pf+1272|0;Jc=Pf+1264|0;Ic=Pf+1256|0;Hc=Pf+1248|0;Fc=Pf+1240|0;Ec=Pf+1232|0;Dc=Pf+1224|0;Cc=Pf+1216|0;Bc=Pf+1200|0;Ac=Pf+1192|0;yc=Pf+1184|0;xc=Pf+1176|0;wc=Pf+1168|0;vc=Pf+1152|0;uc=Pf+1144|0;tc=Pf+1136|0;sc=Pf+1128|0;rc=Pf+1120|0;pc=Pf+1104|0;oc=Pf+1096|0;nc=Pf+1088|0;mc=Pf+1080|0;lc=Pf+1072|0;kc=Pf+1064|0;jc=Pf+1056|0;ic=Pf+1048|0;gc=Pf+1040|0;fc=Pf+1032|0;ec=Pf+1024|0;dc=Pf+1016|0;cc=Pf+1008|0;bc=Pf+1e3|0;ac=Pf+992|0;$b=Pf+984|0;Zb=Pf+976|0;Yb=Pf+968|0;Xb=Pf+960|0;Wb=Pf+952|0;Vb=Pf+944|0;Ub=Pf+936|0;Tb=Pf+928|0;Sb=Pf+920|0;Rb=Pf+912|0;Qb=Pf+904|0;Pb=Pf+896|0;Ob=Pf+888|0;Mb=Pf+880|0;Lb=Pf+872|0;Kb=Pf+864|0;Jb=Pf+856|0;Ib=Pf+848|0;Hb=Pf+840|0;Gb=Pf+832|0;Fb=Pf+824|0;Db=Pf+816|0;Cb=Pf+808|0;Bb=Pf+800|0;Ab=Pf+792|0;zb=Pf+784|0;yb=Pf+776|0;xb=Pf+768|0;vb=Pf+760|0;ub=Pf+752|0;tb=Pf+744|0;sb=Pf+736|0;rb=Pf+728|0;qb=Pf+720|0;pb=Pf+712|0;ob=Pf+704|0;mb=Pf+696|0;lb=Pf+680|0;kb=Pf+672|0;jb=Pf+664|0;ib=Pf+656|0;hb=Pf+648|0;gb=Pf+640|0;fb=Pf+632|0;eb=Pf+624|0;db=Pf+616|0;cb=Pf+608|0;ab=Pf+600|0;$a=Pf+592|0;_a=Pf+584|0;Za=Pf+576|0;Ya=Pf+568|0;Xa=Pf+560|0;Wa=Pf+552|0;Va=Pf+544|0;Of=Pf+536|0;Nf=Pf+528|0;Mf=Pf+520|0;Kf=Pf+504|0;Jf=Pf+496|0;If=Pf+488|0;Hf=Pf+480|0;Gf=Pf+472|0;Ff=Pf+464|0;uf=Pf+448|0;gf=Pf+440|0;_e=Pf+432|0;Qe=Pf+424|0;Fe=Pf+416|0;se=Pf+408|0;fe=Pf+400|0;Ud=Pf+392|0;Nd=Pf+384|0;sd=Pf+368|0;fd=Pf+360|0;Xc=Pf+352|0;Oc=Pf+344|0;Gc=Pf+336|0;zc=Pf+328|0;qc=Pf+320|0;hc=Pf+312|0;_b=Pf+304|0;Nb=Pf+296|0;Eb=Pf+288|0;wb=Pf+280|0;nb=Pf+272|0;bb=Pf+264|0;Lf=Pf+256|0;Ef=Pf+248|0;jd=Pf+240|0;Ua=Pf+232|0;Ta=Pf+224|0;ya=Pf+216|0;ba=Pf+208|0;R=Pf+200|0;S=Pf+192|0;T=Pf+184|0;V=Pf+176|0;$=Pf+152|0;_=Pf+128|0;B=Pf+120|0;C=Pf+112|0;D=Pf+104|0;E=Pf+96|0;F=Pf+88|0;G=Pf+80|0;H=Pf+72|0;I=Pf+64|0;J=Pf+56|0;K=Pf+48|0;L=Pf+40|0;M=Pf+32|0;N=Pf+24|0;O=Pf+16|0;P=Pf+8|0;Q=Pf;Ca=Pf+2544|0;xa=d+12|0;e=c[xa>>2]|0;Ea=d+8|0;if(e>>>0>=(c[Ea>>2]|0)>>>0){Of=0;aa=Pf;return Of|0}W=d+4|0;ca=d+80|0;Z=d+84|0;Y=d+36|0;za=d+76|0;Fa=H+4|0;ua=d+88|0;ra=d+92|0;oa=d+116|0;wa=d+120|0;sa=d+124|0;qa=d+128|0;ma=d+132|0;na=d+136|0;x=d+85|0;Qa=d+96|0;la=d+140|0;Aa=d+40|0;y=d+44|0;Ba=d+52|0;A=d+56|0;Ia=ya+4|0;Pa=ba+4|0;va=d+100|0;ta=d+104|0;pa=d+108|0;da=d+112|0;Ja=Sa+4|0;X=d+144|0;Ka=ya+4|0;Ma=ya+4|0;La=ya+4|0;Ga=R+4|0;Oa=R+4|0;Na=T+4|0;Ha=T+4|0;Da=H+4|0;g=e;v=c[d>>2]|0;e=0;w=0;a:while(1){f=c[W>>2]|0;f=_l(f+g|0,f+v|0,Ca)|0;if(!f){s=4;break}v=(c[xa>>2]|0)+f|0;c[xa>>2]=v;f=c[W>>2]|0;f=_l(f+v|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=6;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;i=c[Ra>>2]|0;v=c[d>>2]|0;f=i+f|0;c[d>>2]=f;u=c[Ca>>2]|0;if(u>>>0>13){s=8;break}if(f>>>0>(c[Ea>>2]|0)>>>0){s=10;break}t=(u|0)==0;if(!(t|(c[ca>>2]|0)==-1)?(r=bu(u)|0,(r|0)<=(bu(c[ca>>2]|0)|0)):0){s=13;break}if(!(t|(a[Z>>0]|0)==0)){s=15;break}r=c[Y>>2]|0;if(ha[c[(c[r>>2]|0)+24>>2]&127](r,w,u,i)|0){s=17;break}f=c[za>>2]|0;g=(a[f+17>>0]|0)!=0;do switch(u|0){case 0:{c[H>>2]=0;c[Fa>>2]=0;do if((gu(d,H,313108)|0)==1)f=1;else{r=c[Y>>2]|0;q=c[(c[r>>2]|0)+28>>2]|0;o=H;h=c[o>>2]|0;o=c[o+4>>2]|0;p=I;c[p>>2]=h;c[p+4>>2]=o;c[Ra>>2]=c[I>>2];c[Ra+4>>2]=c[I+4>>2];if(ga[q&127](r,i,Ra)|0){eu(d,313121,wb);f=1;break}r=a[x>>0]|0;a[x>>0]=1;f=c[Da>>2]|0;b:do if((a[(c[za>>2]|0)+16>>0]|0)!=0?(Yn(h,f,313156,4)|0)==0:0){q=c[Y>>2]|0;if(fa[c[(c[q>>2]|0)+604>>2]&511](q,i)|0){eu(d,313161,Eb);f=1;break}f=c[xa>>2]|0;h=c[d>>2]|0;c:do if(f>>>0<h>>>0){p=0;q=0;d:while(1){o=c[W>>2]|0;f=_l(o+f|0,o+h|0,Sa)|0;if(!f){s=30;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;h=q;q=c[Sa>>2]|0;if(p|0){if((q|0)==(h|0)){s=33;break}if(q>>>0<h>>>0){s=35;break}}o=c[W>>2]|0;f=_l(o+f|0,o+(c[d>>2]|0)|0,Ra)|0;if(!f){s=37;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;i=c[Ra>>2]|0;f=i+f|0;h=c[d>>2]|0;if(f>>>0>h>>>0){s=39;break}c[d>>2]=f;e:do switch(q|0){case 0:{o=c[Y>>2]|0;if(ha[c[(c[o>>2]|0)+608>>2]&127](o,p,0,i)|0){s=42;break d}if(!i)break e;c[ya>>2]=0;c[Ka>>2]=0;if((gu(d,ya,313350)|0)==1){s=47;break d}o=c[Y>>2]|0;n=c[(c[o>>2]|0)+612>>2]|0;k=ya;l=c[k+4>>2]|0;m=ba;c[m>>2]=c[k>>2];c[m+4>>2]=l;c[Ra>>2]=c[ba>>2];c[Ra+4>>2]=c[ba+4>>2];if(fa[n&511](o,Ra)|0){s=46;break d}break}case 1:{o=c[Y>>2]|0;if(ha[c[(c[o>>2]|0)+616>>2]&127](o,p,1,i)|0){s=50;break d}if(!i)break e;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=53;break d}i=(c[xa>>2]|0)+i|0;c[xa>>2]=i;l=c[Ra>>2]|0;i=(c[d>>2]|0)-i|0;if(l>>>0>i>>>0){s=55;break d}o=c[Y>>2]|0;if(fa[c[(c[o>>2]|0)+620>>2]&511](o,l)|0){s=57;break d}if(!l)break e;j=0;k=-1;while(1){c[ya>>2]=0;c[Ma>>2]=0;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=61;break d}c[xa>>2]=(c[xa>>2]|0)+i;i=c[Ra>>2]|0;if((i|0)==(k|0)){s=63;break d}if(!((k|0)==-1|i>>>0>k>>>0)){s=65;break d}if(i>>>0>=((c[oa>>2]|0)+(c[Qa>>2]|0)|0)>>>0){s=67;break d}if((gu(d,ya,313628)|0)==1){s=72;break d}o=c[Y>>2]|0;n=c[(c[o>>2]|0)+624>>2]|0;Qf=ya;k=c[Qf+4>>2]|0;m=R;c[m>>2]=c[Qf>>2];c[m+4>>2]=k;c[Ra>>2]=c[R>>2];c[Ra+4>>2]=c[R+4>>2];if(ga[n&127](o,i,Ra)|0){s=70;break d}j=j+1|0;if(j>>>0>=l>>>0)break;else k=i}break}case 2:{Qf=c[Y>>2]|0;if(ha[c[(c[Qf>>2]|0)+628>>2]&127](Qf,p,2,i)|0){s=74;break d}if(!i)break e;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=77;break d}i=(c[xa>>2]|0)+i|0;c[xa>>2]=i;o=c[Ra>>2]|0;i=(c[d>>2]|0)-i|0;if(o>>>0>i>>>0){s=79;break d}Qf=c[Y>>2]|0;if(fa[c[(c[Qf>>2]|0)+632>>2]&511](Qf,o)|0){s=81;break d}if(!o)break e;m=0;n=-1;do{i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=85;break d}i=(c[xa>>2]|0)+i|0;c[xa>>2]=i;j=n;n=c[Ra>>2]|0;if(n>>>0>=((c[oa>>2]|0)+(c[Qa>>2]|0)|0)>>>0){s=87;break d}if(!((j|0)==-1|n>>>0>j>>>0)){s=89;break d}Qf=c[W>>2]|0;i=_l(Qf+i|0,Qf+(c[d>>2]|0)|0,Ra)|0;if(!i){s=91;break d}i=(c[xa>>2]|0)+i|0;c[xa>>2]=i;l=c[Ra>>2]|0;i=(c[d>>2]|0)-i|0;if(l>>>0>i>>>0){s=93;break d}Qf=c[Y>>2]|0;if(ga[c[(c[Qf>>2]|0)+636>>2]&127](Qf,n,l)|0){s=95;break d}if(l|0){j=0;k=-1;while(1){c[ya>>2]=0;c[La>>2]=0;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,Ra)|0;if(!i){s=99;break d}c[xa>>2]=(c[xa>>2]|0)+i;i=c[Ra>>2]|0;if((i|0)==(k|0)){s=101;break d}if(!((k|0)==-1|i>>>0>k>>>0)){s=103;break d}if((gu(d,ya,313156)|0)==1){s=108;break d}Qf=c[Y>>2]|0;k=c[(c[Qf>>2]|0)+640>>2]|0;Tf=ya;Sf=c[Tf+4>>2]|0;Rf=S;c[Rf>>2]=c[Tf>>2];c[Rf+4>>2]=Sf;c[Ra>>2]=c[S>>2];c[Ra+4>>2]=c[S+4>>2];if(ha[k&127](Qf,n,i,Ra)|0){s=106;break d}j=j+1|0;if(j>>>0>=l>>>0)break;else k=i}}m=m+1|0}while(m>>>0<o>>>0);break}default:c[xa>>2]=f}while(0);if((c[xa>>2]|0)!=(f|0)){s=112;break}c[d>>2]=h;if(f>>>0>=h>>>0)break c;else p=p+1|0}switch(s|0){case 30:{c[Nb>>2]=313195;eu(d,312904,Nb);s=113;break}case 33:{eu(d,313205,_b);s=113;break}case 35:{eu(d,313227,hc);s=113;break}case 37:{c[qc>>2]=313252;eu(d,312904,qc);s=113;break}case 39:{eu(d,313268,zc);s=113;break}case 42:{s=0;eu(d,313311,Gc);break}case 46:{eu(d,313362,Oc);s=47;break}case 50:{s=0;eu(d,313391,Xc);break}case 53:{s=0;c[fd>>2]=313432;eu(d,312904,fd);break}case 55:{s=0;c[sd>>2]=313432;c[sd+4>>2]=l;c[sd+8>>2]=i;eu(d,313443,sd);break}case 57:{s=0;eu(d,313489,Nd);break}case 61:{c[Ud>>2]=313526;eu(d,312904,Ud);s=72;break}case 63:{c[fe>>2]=k;eu(d,313541,fe);s=72;break}case 65:{c[se>>2]=i;eu(d,313569,se);s=72;break}case 67:{c[Fe>>2]=i;eu(d,313601,Fe);s=72;break}case 70:{eu(d,313642,Qe);s=72;break}case 74:{s=0;eu(d,313673,_e);break}case 77:{s=0;c[gf>>2]=313711;eu(d,312904,gf);break}case 79:{s=0;c[uf>>2]=313711;c[uf+4>>2]=o;c[uf+8>>2]=i;eu(d,313443,uf);break}case 81:{s=0;eu(d,313726,Ff);break}case 85:{s=0;c[Gf>>2]=313526;eu(d,312904,Gf);break}case 87:{s=0;c[Hf>>2]=n;eu(d,313601,Hf);break}case 89:{s=0;c[If>>2]=n;eu(d,313767,If);break}case 91:{s=0;c[Jf>>2]=313806;eu(d,312904,Jf);break}case 93:{s=0;c[Kf>>2]=313806;c[Kf+4>>2]=l;c[Kf+8>>2]=i;eu(d,313443,Kf);break}case 95:{s=0;eu(d,313818,Mf);break}case 99:{c[Nf>>2]=313856;eu(d,312904,Nf);s=108;break}case 101:{c[Of>>2]=k;eu(d,313868,Of);s=108;break}case 103:{c[Va>>2]=i;eu(d,313894,Va);s=108;break}case 106:{eu(d,313923,Wa);s=108;break}case 112:{s=0;c[Xa>>2]=f;eu(d,313951,Xa);break}}if((s|0)==47)s=0;else if((s|0)==72)s=0;else if((s|0)==108)s=0;else if((s|0)==113){s=0;f=1;break b}c[d>>2]=h;f=1;break b}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+644>>2]&127](Tf)|0)){a[Z>>0]=1;s=309;break}else{eu(d,313996,Ya);f=1;break}}else s=119;while(0);f:do if((s|0)==119){s=0;if(!(Yn(h,f,314028,6)|0)){Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+664>>2]&511](Tf,i)|0){eu(d,314035,Za);f=1;break}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;do if(!f){c[_a>>2]=314070;eu(d,312904,_a);f=1}else{Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,ya)|0;if(!f){c[$a>>2]=314079;eu(d,312904,$a);f=1;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,ba)|0;if(!f){c[ab>>2]=314089;eu(d,312904,ab);f=1;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,R)|0;if(!f){c[cb>>2]=314100;eu(d,312904,cb);f=1;break}c[xa>>2]=(c[xa>>2]|0)+f;Tf=c[Y>>2]|0;if(ia[c[(c[Tf>>2]|0)+668>>2]&31](Tf,c[Sa>>2]|0,c[ya>>2]|0,c[ba>>2]|0,c[R>>2]|0)|0){eu(d,314112,db);f=1;break}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,S)|0;g:do if(!f){c[eb>>2]=314141;eu(d,312904,eb);f=1}else{c[xa>>2]=(c[xa>>2]|0)+f;Tf=c[Y>>2]|0;f=c[S>>2]|0;if(fa[c[(c[Tf>>2]|0)+672>>2]&511](Tf,f)|0){eu(d,314156,fb);f=1;break}h=f+-1|0;c[S>>2]=h;do if(f|0){while(1){c[T>>2]=0;c[Ha>>2]=0;if((gu(d,T,314192)|0)==1){s=139;break}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+676>>2]|0;s=T;Qf=c[s+4>>2]|0;Rf=V;c[Rf>>2]=c[s>>2];c[Rf+4>>2]=Qf;c[Ra>>2]=c[V>>2];c[Ra+4>>2]=c[V+4>>2];if(fa[Sf&511](Tf,Ra)|0){s=141;break}f=h+-1|0;if(!h){s=143;break}else h=f}if((s|0)==139){s=0;c[S>>2]=h;f=1;break g}else if((s|0)==141){s=0;c[S>>2]=h;eu(d,314206,gb);f=1;break g}else if((s|0)==143){s=0;c[S>>2]=f;break}}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+680>>2]&127](Tf)|0)){f=0;break}eu(d,314237,hb);f=1}while(0)}while(0);if((f|0)==1){f=1;break}else{s=309;break}}if(!(Zn(h,f)|0)){Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+648>>2]&511](Tf,i)|0){eu(d,314276,ib);f=1;break}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;h:do if(f){Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[kb>>2]=314324;eu(d,312904,kb);break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;l=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(l>>>0>f>>>0){c[lb>>2]=314324;c[lb+4>>2]=l;c[lb+8>>2]=f;eu(d,313443,lb);break}Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+652>>2]&127](Tf,l,c[Sa>>2]|0)|0){eu(d,314341,mb);break}i:do if(l|0){k=0;j:while(1){c[ba>>2]=0;f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,ya)|0;if(!f){s=162;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=164;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;j=c[Ra>>2]|0;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=166;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;h=c[Ra>>2]|0;i=c[ya>>2]|0;switch(i|0){case 9:case 8:case 5:case 11:case 4:case 3:{Tf=c[W>>2]|0;f=$l(Tf+f|0,Tf+(c[d>>2]|0)|0,ba)|0;if(!f){s=170;break j}c[xa>>2]=(c[xa>>2]|0)+f;f=c[ba>>2]|0;break}default:f=0}Tf=c[Y>>2]|0;if(ia[c[(c[Tf>>2]|0)+656>>2]&31](Tf,i,j,h,f)|0){s=172;break}k=k+1|0;if(k>>>0>=l>>>0)break i}if((s|0)==162){s=0;c[ob>>2]=314370;eu(d,312904,ob)}else if((s|0)==164){s=0;c[pb>>2]=330301;eu(d,312904,pb)}else if((s|0)==166){s=0;c[qb>>2]=314386;eu(d,312904,qb)}else if((s|0)==170){s=0;c[rb>>2]=314392;eu(d,314399,rb)}else if((s|0)==172){s=0;eu(d,314429,sb)}break h}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+660>>2]&127](Tf)|0)){s=309;break f}else{eu(d,314453,tb);break}}else{c[jb>>2]=314310;eu(d,312904,jb)}while(0);f=1;break}if(Yn(h,f,314485,7)|0){c[xa>>2]=c[d>>2];s=309;break}Tf=c[Y>>2]|0;if(!(fa[c[(c[Tf>>2]|0)+684>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;k:do if(!f){c[vb>>2]=312739;eu(d,312904,vb);f=1}else{h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Sa>>2]|0;if((f|0)!=2){c[xb>>2]=f;eu(d,314529,xb);f=1;break}f=c[d>>2]|0;l:do if(h>>>0<f>>>0){m=h;m:while(1){Tf=c[W>>2]|0;f=_l(Tf+m|0,Tf+f|0,ya)|0;if(!f){s=189;break}Tf=(c[xa>>2]|0)+f|0;c[xa>>2]=Tf;f=c[W>>2]|0;f=_l(f+Tf|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=191;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;m=(c[Ra>>2]|0)+h|0;f=c[d>>2]|0;if(m>>>0>f>>>0){s=193;break}c[d>>2]=m;n:do switch(c[ya>>2]|0){case 8:{Tf=c[W>>2]|0;h=_l(Tf+h|0,Tf+m|0,ba)|0;if(!h){s=196;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+688>>2]&511](Tf,c[ba>>2]|0)|0){s=198;break m}if(!(c[ba>>2]|0))break n;l=0;do{c[R>>2]=0;c[Ga>>2]=0;c[S>>2]=0;c[T>>2]=0;h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,T)|0;o:do if(!h){c[Db>>2]=314606;eu(d,312904,Db);h=0}else{Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,S)|0;if(!h){c[Fb>>2]=314615;eu(d,312904,Fb);h=0;break}c[xa>>2]=(c[xa>>2]|0)+h;h=c[T>>2]|0;Tf=c[Y>>2]|0;k=c[S>>2]|0;if(ha[c[(c[Tf>>2]|0)+692>>2]&127](Tf,l,h,k)|0){eu(d,314625,Gb);h=0;break}switch(h|0){case 4:case 2:case 0:{c[V>>2]=0;i=c[W>>2]|0;i=_l(i+(c[xa>>2]|0)|0,i+(c[d>>2]|0)|0,V)|0;p:do if(!i){c[Hb>>2]=314386;eu(d,312904,Hb)}else{c[xa>>2]=(c[xa>>2]|0)+i;if((k&80|0)!=16?(gu(d,R,314650)|0)==1:0)break;q:do switch(h|0){case 0:{Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+700>>2]|0;q=R;Qf=c[q+4>>2]|0;Tf=$;c[Tf>>2]=c[q>>2];c[Tf+4>>2]=Qf;Tf=c[V>>2]|0;c[Ra>>2]=c[$>>2];c[Ra+4>>2]=c[$+4>>2];if(!(ia[Rf&31](Sf,l,k,Ra,Tf)|0))break q;eu(d,314662,Ib);break p}case 2:{Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+704>>2]|0;q=R;Qf=c[q+4>>2]|0;Tf=_;c[Tf>>2]=c[q>>2];c[Tf+4>>2]=Qf;Tf=c[V>>2]|0;c[Ra>>2]=c[_>>2];c[Ra+4>>2]=c[_+4>>2];if(!(ia[Rf&31](Sf,l,k,Ra,Tf)|0))break q;eu(d,314695,Jb);break p}case 4:{Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+712>>2]|0;q=R;Qf=c[q+4>>2]|0;Tf=B;c[Tf>>2]=c[q>>2];c[Tf+4>>2]=Qf;Tf=c[V>>2]|0;c[Ra>>2]=c[B>>2];c[Ra+4>>2]=c[B+4>>2];if(!(ia[Rf&31](Sf,l,k,Ra,Tf)|0))break q;eu(d,314726,Kb);break p}default:{s=220;break a}}while(0);h=1;break o}while(0);h=0;break o}case 1:{c[V>>2]=0;c[C>>2]=0;c[D>>2]=0;r:do if((gu(d,R,314650)|0)!=1){do if(!(k&16)){h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,V)|0;if(!h){c[Lb>>2]=314756;eu(d,312904,Lb);break r}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,C)|0;if(!h){c[Mb>>2]=330301;eu(d,312904,Mb);break r}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,D)|0;if(!h){c[Ob>>2]=314764;eu(d,312904,Ob);break r}else{c[xa>>2]=(c[xa>>2]|0)+h;h=c[V>>2]|0;i=c[C>>2]|0;j=c[D>>2]|0;break}}else{h=0;i=0;j=0}while(0);Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+696>>2]|0;q=R;Qf=c[q+4>>2]|0;Rf=E;c[Rf>>2]=c[q>>2];c[Rf+4>>2]=Qf;c[Ra>>2]=c[E>>2];c[Ra+4>>2]=c[E+4>>2];if(!(ka[Sf&31](Tf,l,k,Ra,h,i,j)|0)){h=1;break o}else{eu(d,314769,Pb);break}}while(0);h=0;break o}case 3:{c[Ra>>2]=0;h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,Ra)|0;do if(h){c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(!(ha[c[(c[Tf>>2]|0)+708>>2]&127](Tf,l,k,c[Ra>>2]|0)|0)){h=1;break o}else{eu(d,314798,Rb);break}}else{c[Qb>>2]=314386;eu(d,312904,Qb)}while(0);h=0;break o}default:{h=1;break o}}}while(0);l=l+1|0;if(!h)break m}while(l>>>0<(c[ba>>2]|0)>>>0);break}case 5:{Tf=c[W>>2]|0;h=_l(Tf+h|0,Tf+m|0,ba)|0;if(!h){s=244;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+716>>2]&511](Tf,c[ba>>2]|0)|0){s=246;break m}if(!(c[ba>>2]|0))break n;i=0;do{c[R>>2]=0;c[Oa>>2]=0;do if((gu(d,R,314876)|0)==1)h=0;else{h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,S)|0;if(!h){c[Ub>>2]=314889;eu(d,312904,Ub);h=0;break}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,T)|0;if(!h){c[Vb>>2]=314907;eu(d,312904,Vb);h=0;break}c[xa>>2]=(c[xa>>2]|0)+h;Rf=c[Y>>2]|0;Qf=c[(c[Rf>>2]|0)+720>>2]|0;q=R;Tf=c[q+4>>2]|0;Sf=F;c[Sf>>2]=c[q>>2];c[Sf+4>>2]=Tf;Sf=c[S>>2]|0;Tf=c[T>>2]|0;c[Ra>>2]=c[F>>2];c[Ra+4>>2]=c[F+4>>2];if(!(ia[Qf&31](Rf,i,Ra,Sf,Tf)|0)){h=1;break}eu(d,314921,Wb);h=0}while(0);i=i+1|0;if(!h)break m}while(i>>>0<(c[ba>>2]|0)>>>0);break}case 6:{Tf=c[W>>2]|0;h=_l(Tf+h|0,Tf+m|0,ba)|0;if(!h){s=259;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+724>>2]&511](Tf,c[ba>>2]|0)|0){s=261;break m}Tf=c[ba>>2]|0;c[ba>>2]=Tf+-1;if(!Tf)break n;do{h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,Ra)|0;if(!h){s=265;break m}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,R)|0;if(!h){s=267;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+728>>2]&127](Tf,c[Ra>>2]|0,c[R>>2]|0)|0){s=269;break m}Tf=c[ba>>2]|0;c[ba>>2]=Tf+-1}while((Tf|0)!=0);break}case 7:{Tf=c[W>>2]|0;h=_l(Tf+h|0,Tf+m|0,ba)|0;if(!h){s=273;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+732>>2]&511](Tf,c[ba>>2]|0)|0){s=275;break m}Tf=c[ba>>2]|0;c[ba>>2]=Tf+-1;if(!Tf)break n;do{c[T>>2]=0;c[Na>>2]=0;if((gu(d,T,315063)|0)==1){s=301;break m}h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,R)|0;if(!h){s=282;break m}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,S)|0;if(!h){s=284;break m}c[xa>>2]=(c[xa>>2]|0)+h;Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+736>>2]|0;Qf=T;h=c[Qf+4>>2]|0;Tf=G;c[Tf>>2]=c[Qf>>2];c[Tf+4>>2]=h;Tf=c[R>>2]|0;h=c[S>>2]|0;c[Ra>>2]=c[G>>2];c[Ra+4>>2]=c[G+4>>2];if(ha[Rf&127](Sf,Ra,Tf,h)|0){s=286;break m}i=h+-1|0;c[S>>2]=i;if(h|0){while(1){h=c[W>>2]|0;h=_l(h+(c[xa>>2]|0)|0,h+(c[d>>2]|0)|0,Ra)|0;if(!h){s=290;break m}Tf=(c[xa>>2]|0)+h|0;c[xa>>2]=Tf;h=c[W>>2]|0;h=_l(h+Tf|0,h+(c[d>>2]|0)|0,V)|0;if(!h){s=292;break m}c[xa>>2]=(c[xa>>2]|0)+h;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+740>>2]&127](Tf,c[Ra>>2]|0,c[V>>2]|0)|0){s=294;break m}h=i+-1|0;if(!i)break;else i=h}c[S>>2]=h}Tf=c[ba>>2]|0;c[ba>>2]=Tf+-1}while((Tf|0)!=0);break}default:c[xa>>2]=m}while(0);if((c[xa>>2]|0)!=(m|0)){s=299;break}c[d>>2]=f;if(m>>>0>=f>>>0)break l}switch(s|0){case 189:{c[yb>>2]=330362;eu(d,312904,yb);s=300;break}case 191:{c[zb>>2]=313252;eu(d,312904,zb);s=300;break}case 193:{eu(d,313268,Ab);s=300;break}case 196:{s=0;c[Bb>>2]=314566;eu(d,312904,Bb);break}case 198:{s=0;eu(d,314576,Cb);break}case 244:{s=0;c[Sb>>2]=314830;eu(d,312904,Sb);break}case 246:{s=0;eu(d,314841,Tb);break}case 259:{s=0;c[Xb>>2]=314830;eu(d,312904,Xb);break}case 261:{s=0;eu(d,314951,Yb);break}case 265:{c[Zb>>2]=314987;eu(d,312904,Zb);s=270;break}case 267:{c[$b>>2]=313526;eu(d,312904,$b);s=270;break}case 269:{eu(d,314996,ac);s=270;break}case 273:{s=0;c[bc>>2]=315027;eu(d,312904,bc);break}case 275:{s=0;eu(d,315033,cc);break}case 282:{c[dc>>2]=315075;eu(d,312904,dc);s=301;break}case 284:{c[ec>>2]=315081;eu(d,312904,ec);s=301;break}case 286:{eu(d,315093,fc);s=301;break}case 290:{c[S>>2]=i;c[gc>>2]=315123;eu(d,312904,gc);s=295;break}case 292:{c[S>>2]=i;c[ic>>2]=314386;eu(d,312904,ic);s=295;break}case 294:{c[S>>2]=i;eu(d,315128,jc);s=295;break}case 299:{s=0;c[kc>>2]=m;eu(d,313951,kc);break}}if((s|0)==270)s=0;else if((s|0)==295)s=301;else if((s|0)==300){s=0;f=1;break k}if((s|0)==301)s=0;c[d>>2]=f;f=1;break k}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+744>>2]&127](Tf)|0)){f=0;break}eu(d,315158,lc);f=1}while(0)}else{eu(d,314493,ub);f=1}if((f|0)==1)f=1;else s=309}while(0);if((s|0)==309){Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+32>>2]&127](Tf)|0))f=0;else{eu(d,315192,mc);f=1}}a[x>>0]=r}while(0);s=(a[(c[za>>2]|0)+18>>0]|0)==0;e=s?e:((e|0)==1|(f|0)==1)&1;g=g&(s^1);s=763;break}case 1:{Tf=c[Y>>2]|0;s:do if(!(fa[c[(c[Tf>>2]|0)+36>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[oc>>2]=315258;eu(d,312904,oc);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[ua>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[pc>>2]=315258;c[pc+4>>2]=f;c[pc+8>>2]=h;eu(d,313443,pc);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+40>>2]&511](Tf,f)|0){eu(d,315269,rc);f=1;break}t:do if(c[ua>>2]|0){n=0;u:while(1){c[Ra>>2]=0;f=c[W>>2]|0;f=$l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=325;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;if((f|0)!=-32){s=327;break}f=c[W>>2]|0;f=_l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=329;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;m=c[Ra>>2]|0;h=c[d>>2]|0;i=h-f|0;if(m>>>0>i>>>0){s=331;break}i=c[Aa>>2]|0;j=(c[y>>2]|0)-i>>2;if(m>>>0<=j>>>0){if(m>>>0<j>>>0)c[y>>2]=i+(m<<2);if(!m)l=1;else s=337}else{hu(Aa,m-j|0);f=c[xa>>2]|0;s=337}if((s|0)==337){s=0;h=f;i=0;do{c[Ra>>2]=0;f=c[W>>2]|0;f=$l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=339;break u}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;switch(f|0){case -4:case -3:case -2:case -1:break;case -5:{if(!(a[(c[za>>2]|0)+4>>0]|0)){f=-5;s=345;break u}break}case -24:{if(!(a[c[za>>2]>>0]|0)){f=-24;s=345;break u}break}case -17:{if(!(a[(c[za>>2]|0)+9>>0]|0)){f=-17;s=345;break u}break}default:{s=344;break u}}c[(c[Aa>>2]|0)+(i<<2)>>2]=f;i=i+1|0}while(i>>>0<m>>>0);f=h;h=c[d>>2]|0;l=0}Tf=c[W>>2]|0;f=_l(Tf+f|0,Tf+h|0,Ra)|0;if(!f){s=350;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;k=c[Ra>>2]|0;h=(c[d>>2]|0)-f|0;if(k>>>0>h>>>0){s=352;break}if(k>>>0>=2?(a[(c[za>>2]|0)+6>>0]|0)==0:0){s=355;break}h=c[Ba>>2]|0;i=(c[A>>2]|0)-h>>2;if(k>>>0<=i>>>0){if(k>>>0<i>>>0)c[A>>2]=h+(k<<2);if(!k)h=0;else s=361}else{hu(Ba,k-i|0);f=c[xa>>2]|0;s=361}v:do if((s|0)==361){s=0;i=f;j=0;while(1){c[Ra>>2]=0;f=c[W>>2]|0;f=$l(f+i|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=363;break u}i=(c[xa>>2]|0)+f|0;c[xa>>2]=i;f=c[Ra>>2]|0;switch(f|0){case -4:case -3:case -2:case -1:break;case -5:{if(!(a[(c[za>>2]|0)+4>>0]|0)){f=-5;s=369;break u}break}case -24:{if(!(a[c[za>>2]>>0]|0)){f=-24;s=369;break u}break}case -17:{if(!(a[(c[za>>2]|0)+9>>0]|0)){f=-17;s=369;break u}break}default:{s=368;break u}}h=c[Ba>>2]|0;c[h+(j<<2)>>2]=f;j=j+1|0;if(j>>>0>=k>>>0)break v}}while(0);if(l)f=0;else f=c[Aa>>2]|0;Tf=c[Y>>2]|0;if(ja[c[(c[Tf>>2]|0)+44>>2]&31](Tf,n,m,f,k,h)|0){s=375;break}n=n+1|0;if(n>>>0>=(c[ua>>2]|0)>>>0)break t}switch(s|0){case 325:{c[sc>>2]=315297;eu(d,314399,sc);f=1;break s}case 327:{c[tc>>2]=(f|0)<0?315307:354708;c[tc+4>>2]=(f|0)>-1?f:0-f|0;eu(d,315309,tc);f=1;break s}case 329:{c[uc>>2]=315342;eu(d,312904,uc);f=1;break s}case 331:{c[vc>>2]=315342;c[vc+4>>2]=m;c[vc+8>>2]=i;eu(d,313443,vc);f=1;break s}case 339:{c[wc>>2]=315363;eu(d,314399,wc);f=1;break s}case 344:{if((f|0)<0)s=345;else{c[yc>>2]=354708;c[yc+4>>2]=f;eu(d,315383,yc);f=1;break s}break}case 350:{c[Ac>>2]=315421;eu(d,312904,Ac);f=1;break s}case 352:{c[Bc>>2]=315421;c[Bc+4>>2]=k;c[Bc+8>>2]=h;eu(d,313443,Bc);f=1;break s}case 355:{eu(d,315443,Cc);f=1;break s}case 363:{c[Dc>>2]=315471;eu(d,314399,Dc);f=1;break s}case 368:{if((f|0)<0)s=369;else{c[Fc>>2]=354708;c[Fc+4>>2]=f;eu(d,315492,Fc);f=1;break s}break}case 375:{eu(d,315531,Hc);f=1;break s}}if((s|0)==345){c[xc>>2]=315307;c[xc+4>>2]=0-f;eu(d,315383,xc);f=1;break s}else if((s|0)==369){c[Ec>>2]=315307;c[Ec+4>>2]=0-f;eu(d,315492,Ec);f=1;break s}}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+48>>2]&127](Tf)|0))f=0;else{eu(d,315554,Ic);f=1}}else{eu(d,315225,nc);f=1}while(0);e=f|(e|0)==1;s=763;break}case 2:{Tf=c[Y>>2]|0;w:do if(!(fa[c[(c[Tf>>2]|0)+52>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Kc>>2]=315620;eu(d,312904,Kc);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[ra>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[Lc>>2]=315620;c[Lc+4>>2]=f;c[Lc+8>>2]=h;eu(d,313443,Lc);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+56>>2]&511](Tf,f)|0){eu(d,315633,Mc);f=1;break}x:do if(c[ra>>2]|0){l=0;y:while(1){c[ya>>2]=0;c[Ia>>2]=0;if((gu(d,ya,315663)|0)==1){s=390;break}c[ba>>2]=0;c[Pa>>2]=0;if((gu(d,ba,315682)|0)==1)break;f=c[xa>>2]|0;j=f+1|0;h=c[d>>2]|0;if(j>>>0>h>>>0){s=393;break}i=c[W>>2]|0;Tf=a[i+f>>0]|0;c[xa>>2]=j;switch(Tf<<24>>24){case 0:{f=_l(i+j|0,i+h|0,Ra)|0;if(!f){s=396;break y}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;if(f>>>0>=(c[ua>>2]|0)>>>0){s=398;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;i=ya;h=c[i>>2]|0;i=c[i+4>>2]|0;k=R;c[k>>2]=h;c[k+4>>2]=i;k=ba;j=c[k>>2]|0;k=c[k+4>>2]|0;Rf=S;c[Rf>>2]=j;c[Rf+4>>2]=k;c[Sa>>2]=c[R>>2];c[Sa+4>>2]=c[R+4>>2];c[Ra>>2]=c[S>>2];c[Ra+4>>2]=c[S+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=400;break y}Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+64>>2]|0;Tf=T;c[Tf>>2]=h;c[Tf+4>>2]=i;Tf=V;c[Tf>>2]=j;c[Tf+4>>2]=k;Tf=c[Qa>>2]|0;c[Sa>>2]=c[T>>2];c[Sa+4>>2]=c[T+4>>2];c[Ra>>2]=c[V>>2];c[Ra+4>>2]=c[V+4>>2];if(ja[Rf&31](Sf,l,Sa,Ra,Tf,f)|0){s=402;break y}c[Qa>>2]=(c[Qa>>2]|0)+1;break}case 1:{c[_>>2]=0;c[_+4>>2]=0;c[_+8>>2]=0;c[_+12>>2]=0;b[_+16>>1]=0;if((iu(d,$,_)|0)==1){s=409;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;h=ya;f=c[h>>2]|0;h=c[h+4>>2]|0;j=B;c[j>>2]=f;c[j+4>>2]=h;j=ba;i=c[j>>2]|0;j=c[j+4>>2]|0;Rf=C;c[Rf>>2]=i;c[Rf+4>>2]=j;c[Sa>>2]=c[B>>2];c[Sa+4>>2]=c[B+4>>2];c[Ra>>2]=c[C>>2];c[Ra+4>>2]=c[C+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=406;break y}Rf=c[Y>>2]|0;Qf=c[(c[Rf>>2]|0)+68>>2]|0;Sf=D;c[Sf>>2]=f;c[Sf+4>>2]=h;Sf=E;c[Sf>>2]=i;c[Sf+4>>2]=j;Sf=c[va>>2]|0;Tf=c[$>>2]|0;c[Sa>>2]=c[D>>2];c[Sa+4>>2]=c[D+4>>2];c[Ra>>2]=c[E>>2];c[Ra+4>>2]=c[E+4>>2];if(ka[Qf&31](Rf,l,Sa,Ra,Sf,Tf,_)|0){s=408;break y}c[va>>2]=(c[va>>2]|0)+1;break}case 2:{c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;b[$+16>>1]=0;if((ju(d,$)|0)==1){s=416;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;h=ya;f=c[h>>2]|0;h=c[h+4>>2]|0;j=F;c[j>>2]=f;c[j+4>>2]=h;j=ba;i=c[j>>2]|0;j=c[j+4>>2]|0;Rf=G;c[Rf>>2]=i;c[Rf+4>>2]=j;c[Sa>>2]=c[F>>2];c[Sa+4>>2]=c[F+4>>2];c[Ra>>2]=c[G>>2];c[Ra+4>>2]=c[G+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=413;break y}Sf=c[Y>>2]|0;Rf=c[(c[Sf>>2]|0)+72>>2]|0;Tf=H;c[Tf>>2]=f;c[Tf+4>>2]=h;Tf=I;c[Tf>>2]=i;c[Tf+4>>2]=j;Tf=c[ta>>2]|0;c[Sa>>2]=c[H>>2];c[Sa+4>>2]=c[H+4>>2];c[Ra>>2]=c[I>>2];c[Ra+4>>2]=c[I+4>>2];if(ja[Rf&31](Sf,l,Sa,Ra,Tf,$)|0){s=415;break y}c[ta>>2]=(c[ta>>2]|0)+1;break}case 3:{if((ku(d,$,_)|0)==1){s=423;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;h=ya;f=c[h>>2]|0;h=c[h+4>>2]|0;j=J;c[j>>2]=f;c[j+4>>2]=h;j=ba;i=c[j>>2]|0;j=c[j+4>>2]|0;Rf=K;c[Rf>>2]=i;c[Rf+4>>2]=j;c[Sa>>2]=c[J>>2];c[Sa+4>>2]=c[J+4>>2];c[Ra>>2]=c[K>>2];c[Ra+4>>2]=c[K+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=420;break y}Qf=c[Y>>2]|0;r=c[(c[Qf>>2]|0)+76>>2]|0;Rf=L;c[Rf>>2]=f;c[Rf+4>>2]=h;Rf=M;c[Rf>>2]=i;c[Rf+4>>2]=j;Rf=c[pa>>2]|0;Sf=c[$>>2]|0;Tf=(a[_>>0]|0)!=0;c[Sa>>2]=c[L>>2];c[Sa+4>>2]=c[L+4>>2];c[Ra>>2]=c[M>>2];c[Ra+4>>2]=c[M+4>>2];if(ka[r&31](Qf,l,Sa,Ra,Rf,Sf,Tf)|0){s=422;break y}c[pa>>2]=(c[pa>>2]|0)+1;break}case 4:{if(!(a[c[za>>2]>>0]|0)){s=426;break y}if((lu(d,$)|0)==1){s=432;break y}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+60>>2]|0;h=ya;f=c[h>>2]|0;h=c[h+4>>2]|0;j=N;c[j>>2]=f;c[j+4>>2]=h;j=ba;i=c[j>>2]|0;j=c[j+4>>2]|0;Rf=O;c[Rf>>2]=i;c[Rf+4>>2]=j;c[Sa>>2]=c[N>>2];c[Sa+4>>2]=c[N+4>>2];c[Ra>>2]=c[O>>2];c[Ra+4>>2]=c[O+4>>2];if(ha[Sf&127](Tf,l,Sa,Ra)|0){s=429;break y}Rf=c[Y>>2]|0;Qf=c[(c[Rf>>2]|0)+80>>2]|0;Sf=P;c[Sf>>2]=f;c[Sf+4>>2]=h;Sf=Q;c[Sf>>2]=i;c[Sf+4>>2]=j;Sf=c[da>>2]|0;Tf=c[$>>2]|0;c[Sa>>2]=c[P>>2];c[Sa+4>>2]=c[P+4>>2];c[Ra>>2]=c[Q>>2];c[Ra+4>>2]=c[Q+4>>2];if(ja[Qf&31](Rf,l,Sa,Ra,Sf,Tf)|0){s=431;break y}c[da>>2]=(c[da>>2]|0)+1;break}default:{}}l=l+1|0;if(l>>>0>=(c[ra>>2]|0)>>>0)break x}switch(s|0){case 390:{f=1;break w}case 393:{s=0;c[Nc>>2]=315712;c[Nc+4>>2]=315700;eu(d,312701,Nc);break}case 396:{s=0;c[Pc>>2]=315720;eu(d,312904,Pc);break}case 398:{s=0;eu(d,315743,Qc);break}case 400:{s=0;eu(d,315774,Rc);break}case 402:{s=0;eu(d,315799,Sc);break}case 406:{eu(d,315774,Tc);s=409;break}case 408:{eu(d,315828,Uc);s=409;break}case 413:{eu(d,315774,Vc);s=416;break}case 415:{eu(d,315858,Wc);s=416;break}case 420:{eu(d,315774,Yc);s=423;break}case 422:{eu(d,315889,Zc);s=423;break}case 426:{s=0;eu(d,315920,_c);break}case 429:{eu(d,315774,$c);s=432;break}case 431:{eu(d,315970,ad);s=432;break}}f=1;break w}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+84>>2]&127](Tf)|0))f=0;else{eu(d,316e3,bd);f=1}}else{eu(d,315585,Jc);f=1}while(0);e=f|(e|0)==1;s=763;break}case 3:{Tf=c[Y>>2]|0;z:do if(!(fa[c[(c[Tf>>2]|0)+88>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[dd>>2]=316070;eu(d,312904,dd);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[oa>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[ed>>2]=316070;c[ed+4>>2]=f;c[ed+8>>2]=h;eu(d,313443,ed);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+92>>2]&511](Tf,f)|0){eu(d,316095,gd);f=1;break}A:do if(c[oa>>2]|0){i=0;while(1){h=(c[Qa>>2]|0)+i|0;f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=451;break}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;if(f>>>0>=(c[ua>>2]|0)>>>0){s=453;break}Tf=c[Y>>2]|0;i=i+1|0;if(ga[c[(c[Tf>>2]|0)+96>>2]&127](Tf,h,f)|0){s=455;break}if(i>>>0>=(c[oa>>2]|0)>>>0)break A}if((s|0)==451){c[hd>>2]=316127;eu(d,312904,hd);f=1;break z}else if((s|0)==453){c[id>>2]=f;eu(d,316152,id);f=1;break z}else if((s|0)==455){eu(d,316189,kd);f=1;break z}}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+100>>2]&127](Tf)|0))f=0;else{eu(d,316216,ld);f=1}}else{eu(d,316033,cd);f=1}while(0);e=f|(e|0)==1;s=763;break}case 4:{Tf=c[Y>>2]|0;B:do if(!(fa[c[(c[Tf>>2]|0)+104>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[nd>>2]=316285;eu(d,312904,nd);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[wa>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[od>>2]=316285;c[od+4>>2]=f;c[od+8>>2]=h;eu(d,313443,od);f=1;break}if(!(f>>>0<2?1:(a[(c[za>>2]|0)+9>>0]|0)!=0)){c[pd>>2]=f;eu(d,316297,pd);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+108>>2]&511](Tf,f)|0){eu(d,316329,qd);f=1;break}C:do if(c[wa>>2]|0){h=0;while(1){f=c[va>>2]|0;c[Sa>>2]=0;c[Sa+4>>2]=0;c[Sa+8>>2]=0;c[Sa+12>>2]=0;b[Sa+16>>1]=0;if((iu(d,Ra,Sa)|0)==1)break;Tf=c[Y>>2]|0;if(ha[c[(c[Tf>>2]|0)+112>>2]&127](Tf,f+h|0,c[Ra>>2]|0,Sa)|0){s=473;break}h=h+1|0;if(h>>>0>=(c[wa>>2]|0)>>>0)break C}if((s|0)==473)eu(d,316358,rd);f=1;break B}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+116>>2]&127](Tf)|0))f=0;else{eu(d,316382,td);f=1}}else{eu(d,316251,md);f=1}while(0);e=f|(e|0)==1;s=763;break}case 5:{Tf=c[Y>>2]|0;D:do if(!(fa[c[(c[Tf>>2]|0)+120>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[vd>>2]=316449;eu(d,312904,vd);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[sa>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[wd>>2]=316449;c[wd+4>>2]=f;c[wd+8>>2]=h;eu(d,313443,wd);f=1;break}if(f>>>0>=2){eu(d,316462,xd);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+124>>2]&511](Tf,f)|0){eu(d,316490,yd);f=1;break}E:do if(c[sa>>2]|0){h=0;while(1){f=c[ta>>2]|0;c[Ra>>2]=0;c[Ra+4>>2]=0;c[Ra+8>>2]=0;c[Ra+12>>2]=0;b[Ra+16>>1]=0;if((ju(d,Ra)|0)==1)break;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+128>>2]&127](Tf,f+h|0,Ra)|0){s=493;break}h=h+1|0;if(h>>>0>=(c[sa>>2]|0)>>>0)break E}if((s|0)==493)eu(d,316520,zd);f=1;break D}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+132>>2]&127](Tf)|0))f=0;else{eu(d,316545,Ad);f=1}}else{eu(d,316414,ud);f=1}while(0);e=f|(e|0)==1;s=763;break}case 6:{Tf=c[Y>>2]|0;F:do if(!(fa[c[(c[Tf>>2]|0)+136>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Cd>>2]=316613;eu(d,312904,Cd);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[qa>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[Dd>>2]=316613;c[Dd+4>>2]=f;c[Dd+8>>2]=h;eu(d,313443,Dd);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+140>>2]&511](Tf,f)|0){eu(d,316626,Ed);f=1;break}G:do if(c[qa>>2]|0){h=0;while(1){f=(c[pa>>2]|0)+h|0;if((ku(d,Ra,Sa)|0)==1)break;Tf=c[Y>>2]|0;if(ha[c[(c[Tf>>2]|0)+144>>2]&127](Tf,f,c[Ra>>2]|0,(a[Sa>>0]|0)!=0)|0){s=511;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+148>>2]&511](Tf,f)|0){s=513;break}if((mu(d,f,0)|0)==1)break;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+152>>2]&511](Tf,f)|0){s=516;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+156>>2]&511](Tf,f)|0){s=518;break}h=h+1|0;if(h>>>0>=(c[qa>>2]|0)>>>0)break G}if((s|0)==511)eu(d,316656,Fd);else if((s|0)==513)eu(d,316684,Gd);else if((s|0)==516)eu(d,316720,Hd);else if((s|0)==518)eu(d,316754,Id);f=1;break F}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+160>>2]&127](Tf)|0))f=0;else{eu(d,316780,Jd);f=1}}else{eu(d,316578,Bd);f=1}while(0);e=f|(e|0)==1;s=763;break}case 7:{Tf=c[Y>>2]|0;H:do if(!(fa[c[(c[Tf>>2]|0)+164>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Ld>>2]=316848;eu(d,312904,Ld);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[ma>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[Md>>2]=316848;c[Md+4>>2]=f;c[Md+8>>2]=h;eu(d,313443,Md);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+168>>2]&511](Tf,f)|0){eu(d,316861,Od);f=1;break}I:do if(c[ma>>2]|0){l=0;J:while(1){c[Sa>>2]=0;c[Ja>>2]=0;if((gu(d,Sa,316891)|0)==1)break;f=c[xa>>2]|0;j=f+1|0;h=c[d>>2]|0;if(j>>>0>h>>>0){s=536;break}i=c[W>>2]|0;k=a[i+f>>0]|0;c[xa>>2]=j;if((k&255)>=5){s=538;break}f=_l(i+j|0,i+h|0,Ra)|0;if(!f){s=540;break}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;switch(k<<24>>24){case 0:{if(f>>>0>=((c[oa>>2]|0)+(c[Qa>>2]|0)|0)>>>0){s=543;break J}break}case 1:{if(f>>>0>=((c[wa>>2]|0)+(c[va>>2]|0)|0)>>>0){s=545;break J}break}case 2:{if(f>>>0>=((c[sa>>2]|0)+(c[ta>>2]|0)|0)>>>0){s=547;break J}break}case 3:{if(f>>>0>=((c[qa>>2]|0)+(c[pa>>2]|0)|0)>>>0){s=549;break J}break}case 4:{if(!(a[c[za>>2]>>0]|0)){s=551;break J}if(f>>>0>=((c[la>>2]|0)+(c[da>>2]|0)|0)>>>0){s=553;break J}break}default:{}}Tf=c[Y>>2]|0;Sf=c[(c[Tf>>2]|0)+172>>2]|0;r=Sa;Qf=c[r+4>>2]|0;Rf=ya;c[Rf>>2]=c[r>>2];c[Rf+4>>2]=Qf;c[Ra>>2]=c[ya>>2];c[Ra+4>>2]=c[ya+4>>2];if(ia[Sf&31](Tf,l,k&255,f,Ra)|0){s=555;break}l=l+1|0;if(l>>>0>=(c[ma>>2]|0)>>>0)break I}switch(s|0){case 536:{c[Pd>>2]=315712;c[Pd+4>>2]=316908;eu(d,312701,Pd);break}case 538:{c[Qd>>2]=k&255;eu(d,316920,Qd);break}case 540:{c[Rd>>2]=316953;eu(d,312904,Rd);break}case 543:{c[Sd>>2]=f;eu(d,316971,Sd);break}case 545:{c[Td>>2]=f;eu(d,317001,Td);break}case 547:{c[Vd>>2]=f;eu(d,317032,Vd);break}case 549:{c[Wd>>2]=f;eu(d,317064,Wd);break}case 551:{eu(d,317096,Xd);break}case 553:{c[Yd>>2]=f;eu(d,317146,Yd);break}case 555:{eu(d,317177,Zd);break}}f=1;break H}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+176>>2]&127](Tf)|0))f=0;else{eu(d,317202,_d);f=1}}else{eu(d,316813,Kd);f=1}while(0);e=f|(e|0)==1;s=763;break}case 8:{Tf=c[Y>>2]|0;do if(!(fa[c[(c[Tf>>2]|0)+180>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[ae>>2]=317269;eu(d,312904,ae);f=1;break}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;if(f>>>0>=((c[oa>>2]|0)+(c[Qa>>2]|0)|0)>>>0){c[be>>2]=f;eu(d,317290,be);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+184>>2]&511](Tf,f)|0){eu(d,317323,ce);f=1;break}Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+188>>2]&127](Tf)|0))f=0;else{eu(d,317355,de);f=1}}else{eu(d,317235,$d);f=1}while(0);e=f|(e|0)==1;s=763;break}case 9:{Tf=c[Y>>2]|0;K:do if(!(fa[c[(c[Tf>>2]|0)+520>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[ge>>2]=317420;eu(d,312904,ge);f=1;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;l=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(l>>>0>f>>>0){c[he>>2]=317420;c[he+4>>2]=l;c[he+8>>2]=f;eu(d,313443,he);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+524>>2]&511](Tf,l)|0){eu(d,317439,ie);f=1;break}L:do if(l|0){if((c[wa>>2]|0)==(0-(c[va>>2]|0)|0)){eu(d,317474,je);f=1;break K}k=0;M:while(1){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;if(!f){s=585;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Sa>>2]|0;if(f>>>0>=3){s=587;break}switch((f&255)<<24>>24){case 2:{f=c[W>>2]|0;f=_l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=591;break M}c[xa>>2]=(c[xa>>2]|0)+f;j=0;f=-16;h=c[Ra>>2]|0;break}case 1:{c[Ra>>2]=0;f=c[W>>2]|0;f=$l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=593;break M}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;if((f+17|0)>>>0<2){j=1;h=0}else{s=595;break M}break}default:{j=0;f=-16;h=0}}Tf=c[Y>>2]|0;if(ia[c[(c[Tf>>2]|0)+528>>2]&31](Tf,k,h,j,f)|0){s=597;break}if(!j){Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+532>>2]&511](Tf,k)|0){s=600;break}if((mu(d,k,1)|0)==1)break;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+536>>2]&511](Tf,k)|0){s=603;break}}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=605;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;i=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(i>>>0>f>>>0){s=607;break}Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+540>>2]&127](Tf,k,i)|0){s=609;break}N:do if(i|0){if(!j){h=0;while(1){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=629;break M}c[xa>>2]=(c[xa>>2]|0)+f;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+548>>2]&127](Tf,k,c[Ra>>2]|0)|0){s=631;break M}h=h+1|0;if(h>>>0>=i>>>0)break N}}h=0;while(1){if((nu(d,ya,317812)|0)==1){s=628;break M}switch(c[ya>>2]|0){case 208:{Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+544>>2]&511](Tf,k)|0){s=625;break M}break}case 210:{f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=623;break M}c[xa>>2]=(c[xa>>2]|0)+f;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+548>>2]&127](Tf,k,c[Ra>>2]|0)|0){s=624;break M}break}default:eu(d,317850,we)}if((nu(d,ya,317907)|0)==1){s=628;break M}if((c[ya>>2]|0)!=11){s=626;break M}h=h+1|0;if(h>>>0>=i>>>0)break N}}while(0);Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+552>>2]&511](Tf,k)|0){s=634;break}k=k+1|0;if(k>>>0>=l>>>0)break L}switch(s|0){case 585:{s=0;c[ke>>2]=317509;eu(d,312904,ke);break}case 587:{s=0;eu(d,317528,le);break}case 591:{s=0;c[me>>2]=317555;eu(d,312904,me);break}case 593:{s=0;c[ne>>2]=317580;eu(d,314399,ne);break}case 595:{s=0;eu(d,317596,oe);break}case 597:{s=0;eu(d,317640,pe);break}case 600:{s=0;eu(d,317673,qe);break}case 603:{s=0;eu(d,317714,re);break}case 605:{s=0;c[te>>2]=317753;eu(d,312904,te);break}case 607:{s=0;c[ue>>2]=317753;c[ue+4>>2]=i;c[ue+8>>2]=f;eu(d,313443,ue);break}case 609:{s=0;eu(d,317769,ve);break}case 623:{c[xe>>2]=317829;eu(d,312904,xe);s=628;break}case 624:{eu(d,317914,ye);s=628;break}case 625:{eu(d,317960,ze);s=628;break}case 626:{eu(d,318006,Ae);s=628;break}case 629:{s=0;c[Be>>2]=317829;eu(d,312904,Be);break}case 631:{s=0;eu(d,317914,Ce);break}case 634:{s=0;eu(d,318051,De);break}}f=1;break K}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+556>>2]&127](Tf)|0))f=0;else{eu(d,318082,Ee);f=1}}else{eu(d,317387,ee);f=1}while(0);e=f|(e|0)==1;s=763;break}case 10:{Tf=c[Y>>2]|0;O:do if(!(fa[c[(c[Tf>>2]|0)+192>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[He>>2]=318146;eu(d,312904,He);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[na>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[Ie>>2]=318146;c[Ie+4>>2]=f;c[Ie+8>>2]=h;eu(d,313443,Ie);f=1;break}if((c[oa>>2]|0)!=(f|0)){eu(d,312817,Je);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+196>>2]&511](Tf,f)|0){eu(d,318166,Ke);f=1;break}P:do if(c[na>>2]|0){o=0;Q:while(1){n=(c[Qa>>2]|0)+o|0;f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;if(!f){s=653;break}m=(c[xa>>2]|0)+f|0;c[xa>>2]=m;Tf=c[Sa>>2]|0;m=Tf+m|0;Sf=c[Y>>2]|0;if(ga[c[(c[Sf>>2]|0)+200>>2]&127](Sf,n,Tf)|0){s=655;break}f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=657;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;l=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(l>>>0>f>>>0){s=659;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+204>>2]&511](Tf,l)|0){s=661;break}R:do if(l|0){i=0;j=0;k=0;while(1){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=666;break Q}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;h=c[Ra>>2]|0;i=iC(i|0,j|0,h|0,0)|0;j=z()|0;if(!(j>>>0<0|(j|0)==0&i>>>0<4294967295)){s=668;break Q}c[Ra>>2]=0;Tf=c[W>>2]|0;f=$l(Tf+f|0,Tf+(c[d>>2]|0)|0,Ra)|0;if(!f){s=670;break Q}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;switch(f|0){case -4:case -3:case -2:case -1:break;case -5:{if(!(a[(c[za>>2]|0)+4>>0]|0)){s=675;break Q}break}case -24:{if(!(a[c[za>>2]>>0]|0)){s=675;break Q}break}case -17:{if(!(a[(c[za>>2]|0)+9>>0]|0)){s=675;break Q}break}default:{s=675;break Q}}Tf=c[Y>>2]|0;if(ha[c[(c[Tf>>2]|0)+208>>2]&127](Tf,k,h,f)|0){s=677;break Q}k=k+1|0;if(k>>>0>=l>>>0)break R}}while(0);if((ou(d,m)|0)==1)break;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+500>>2]&511](Tf,n)|0){s=680;break}o=o+1|0;if(o>>>0>=(c[na>>2]|0)>>>0)break P}switch(s|0){case 653:{c[Le>>2]=318202;eu(d,312904,Le);break}case 655:{eu(d,318221,Me);break}case 657:{c[Ne>>2]=318255;eu(d,312904,Ne);break}case 659:{c[Oe>>2]=318255;c[Oe+4>>2]=l;c[Oe+8>>2]=f;eu(d,313443,Oe);break}case 661:{eu(d,318279,Pe);break}case 666:{c[Re>>2]=318312;eu(d,312904,Re);break}case 668:{eu(d,318329,Se);break}case 670:{c[Te>>2]=318362;eu(d,314399,Te);break}case 675:{eu(d,318373,Ue);break}case 677:{eu(d,318399,Ve);break}case 680:{eu(d,318427,We);break}}f=1;break O}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+504>>2]&127](Tf)|0))f=0;else{eu(d,318459,Xe);f=1}}else{eu(d,318113,Ge);f=1}while(0);e=f|(e|0)==1;s=763;break}case 11:{Tf=c[Y>>2]|0;S:do if(!(fa[c[(c[Tf>>2]|0)+560>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Ze>>2]=318523;eu(d,312904,Ze);f=1;break}f=(c[xa>>2]|0)+f|0;c[xa>>2]=f;k=c[Ra>>2]|0;f=(c[d>>2]|0)-f|0;if(k>>>0>f>>>0){c[$e>>2]=318523;c[$e+4>>2]=k;c[$e+8>>2]=f;eu(d,313443,$e);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+564>>2]&511](Tf,k)|0){eu(d,318542,af);f=1;break}f=(k|0)==0;if(!f?(c[sa>>2]|0)==(0-(c[ta>>2]|0)|0):0){eu(d,318577,bf);f=1;break}Tf=c[X>>2]|0;if(!((Tf|0)==-1|(Tf|0)==(k|0))){eu(d,318613,cf);f=1;break}T:do if(!f){j=0;while(1){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Sa)|0;if(!f){s=702;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Sa>>2]|0;if(f>>>0>=3){s=704;break}i=f&255;if(i<<24>>24==2){f=c[W>>2]|0;f=_l(f+h|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=708;break}c[xa>>2]=(c[xa>>2]|0)+f;h=c[Ra>>2]|0}else h=0;Tf=c[Y>>2]|0;f=i<<24>>24==1;if(ha[c[(c[Tf>>2]|0)+568>>2]&127](Tf,j,h,f)|0){s=710;break}if(!f){Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+572>>2]&511](Tf,j)|0){s=713;break}if((mu(d,j,1)|0)==1)break;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+576>>2]&511](Tf,j)|0){s=716;break}}c[Ra>>2]=0;f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){s=718;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;i=f+h|0;if(i>>>0>(c[d>>2]|0)>>>0){s=720;break}Tf=(c[W>>2]|0)+h|0;c[xa>>2]=i;Sf=c[Y>>2]|0;if(ha[c[(c[Sf>>2]|0)+580>>2]&127](Sf,j,Tf,f)|0){s=723;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+584>>2]&511](Tf,j)|0){s=725;break}j=j+1|0;if(j>>>0>=k>>>0)break T}switch(s|0){case 702:{s=0;c[df>>2]=318674;eu(d,312904,df);break}case 704:{s=0;eu(d,318693,ef);break}case 708:{s=0;c[ff>>2]=318720;eu(d,312904,ff);break}case 710:{s=0;eu(d,318746,hf);break}case 713:{s=0;eu(d,318779,jf);break}case 716:{s=0;eu(d,318820,kf);break}case 718:{c[lf>>2]=318877;eu(d,312904,lf);s=721;break}case 720:{c[mf>>2]=318859;eu(d,318887,mf);s=721;break}case 723:{s=0;eu(d,318911,nf);break}case 725:{s=0;eu(d,318945,of);break}}f=1;break S}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+588>>2]&127](Tf)|0))f=0;else{eu(d,318976,pf);f=1}}else{eu(d,318490,Ye);f=1}while(0);e=f|(e|0)==1;s=763;break}case 13:{if(!(a[f>>0]|0)){s=732;break a}Tf=c[Y>>2]|0;U:do if(!(fa[c[(c[Tf>>2]|0)+748>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[sf>>2]=319041;eu(d,312904,sf);f=1;break}h=(c[xa>>2]|0)+f|0;c[xa>>2]=h;f=c[Ra>>2]|0;c[la>>2]=f;h=(c[d>>2]|0)-h|0;if(f>>>0>h>>>0){c[tf>>2]=319041;c[tf+4>>2]=f;c[tf+8>>2]=h;eu(d,313443,tf);f=1;break}Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+752>>2]&511](Tf,f)|0){eu(d,319053,vf);f=1;break}V:do if(c[la>>2]|0){h=0;while(1){f=c[da>>2]|0;if((lu(d,Ra)|0)==1)break;Tf=c[Y>>2]|0;if(ga[c[(c[Tf>>2]|0)+756>>2]&127](Tf,f+h|0,c[Ra>>2]|0)|0){s=745;break}h=h+1|0;if(h>>>0>=(c[la>>2]|0)>>>0)break V}if((s|0)==745)eu(d,319082,wf);f=1;break U}while(0);Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+760>>2]&127](Tf)|0))f=0;else{eu(d,319110,xf);f=1}}else{eu(d,319007,rf);f=1}while(0);e=f|(e|0)==1;s=763;break}case 12:{if(!(a[f+8>>0]|0)){s=752;break a}Tf=c[Y>>2]|0;do if(!(fa[c[(c[Tf>>2]|0)+592>>2]&511](Tf,i)|0)){f=c[W>>2]|0;f=_l(f+(c[xa>>2]|0)|0,f+(c[d>>2]|0)|0,Ra)|0;if(!f){c[Af>>2]=319180;eu(d,312904,Af);f=1;break}c[xa>>2]=(c[xa>>2]|0)+f;f=c[Ra>>2]|0;Tf=c[Y>>2]|0;if(fa[c[(c[Tf>>2]|0)+596>>2]&511](Tf,f)|0){eu(d,319191,Bf);f=1;break}Tf=c[Y>>2]|0;if(!(ea[c[(c[Tf>>2]|0)+600>>2]&127](Tf)|0)){c[X>>2]=f;f=0;break}else{eu(d,319219,Cf);f=1;break}}else{eu(d,319142,zf);f=1}while(0);e=f|(e|0)==1;s=763;break}default:if(g){s=771;break a}else s=765}while(0);if((s|0)==763){s=0;if((f|0)==1)if(g){s=771;break}else s=765}if((s|0)==765){s=0;c[xa>>2]=c[d>>2]}g=c[xa>>2]|0;f=c[d>>2]|0;if((g|0)!=(f|0)){s=767;break}if(!t)c[ca>>2]=u;c[d>>2]=v;if(g>>>0>=(c[Ea>>2]|0)>>>0){s=773;break}else w=w+1|0}switch(s|0){case 4:{c[Ta>>2]=312891;eu(d,312904,Ta);s=770;break}case 6:{c[Ua>>2]=312934;eu(d,312904,Ua);s=770;break}case 8:{c[jd>>2]=u;eu(d,312947,jd);s=771;break}case 10:{eu(d,312972,Ef);s=771;break}case 13:{Tf=cu(u)|0;c[Lf>>2]=Tf;eu(d,313011,Lf);s=771;break}case 15:{Tf=cu(u)|0;c[bb>>2]=Tf;eu(d,313035,bb);s=771;break}case 17:{eu(d,313079,nb);s=771;break}case 220:{U();break}case 732:{c[qf>>2]=13;eu(d,312947,qf);s=771;break}case 752:{c[yf>>2]=12;eu(d,312947,yf);s=771;break}case 767:{c[Df>>2]=f;eu(d,319255,Df);s=771;break}case 773:{aa=Pf;return e|0}}if((s|0)==770){Tf=1;aa=Pf;return Tf|0}else if((s|0)==771){c[d>>2]=v;Tf=1;aa=Pf;return Tf|0}return 0}function gu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=aa;aa=aa+32|0;k=l+16|0;j=l+8|0;f=l;g=l+20|0;c[g>>2]=0;h=a+4|0;e=c[h>>2]|0;i=a+12|0;e=_l(e+(c[i>>2]|0)|0,e+(c[a>>2]|0)|0,g)|0;if(!e){c[f>>2]=324027;eu(a,312904,f);k=1;aa=l;return k|0}f=(c[i>>2]|0)+e|0;c[i>>2]=f;e=c[g>>2]|0;if((e+f|0)>>>0>(c[a>>2]|0)>>>0){c[j>>2]=d;eu(a,324041,j);k=1;aa=l;return k|0}j=(c[h>>2]|0)+f|0;c[b>>2]=j;c[b+4>>2]=e;c[i>>2]=(c[i>>2]|0)+e;if(Lz(j,e)|0){k=0;aa=l;return k|0}c[k>>2]=d;eu(a,324067,k);k=1;aa=l;return k|0}function hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;k=a+8|0;e=c[k>>2]|0;j=a+4|0;d=c[j>>2]|0;if(e-d>>2>>>0>=b>>>0){uC(d|0,0,b<<2|0)|0;c[j>>2]=d+(b<<2);return}i=c[a>>2]|0;g=d-i|0;f=g>>2;d=f+b|0;if(d>>>0>1073741823)HB();m=e-i|0;e=m>>1;e=m>>2>>>0<536870911?(e>>>0<d>>>0?d:e):1073741823;do if(e)if(e>>>0>1073741823)U();else{l=_A(e<<2)|0;h=l;break}else{h=0;l=0}while(0);d=l+(f<<2)|0;uC(d|0,0,b<<2|0)|0;if((g|0)>0)sC(h|0,i|0,g|0)|0;c[a>>2]=l;c[j>>2]=d+(b<<2);c[k>>2]=l+(e<<2);if(!i)return;$A(i);return}function iu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=aa;aa=aa+64|0;q=r+48|0;o=r+40|0;l=r+32|0;i=r+24|0;h=r+16|0;g=r;j=r+60|0;m=r+56|0;p=r+52|0;c[j>>2]=0;k=b+4|0;f=c[k>>2]|0;n=b+12|0;f=$l(f+(c[n>>2]|0)|0,f+(c[b>>2]|0)|0,j)|0;if(!f){c[g>>2]=317580;eu(b,314399,g);e=1;aa=r;return e|0}f=(c[n>>2]|0)+f|0;c[n>>2]=f;g=c[j>>2]|0;c[d>>2]=g;if((g+17|0)>>>0>=2){eu(b,323851,r+8|0);e=1;aa=r;return e|0}c[p>>2]=0;d=c[k>>2]|0;f=_l(d+f|0,d+(c[b>>2]|0)|0,j)|0;do if(!f){c[h>>2]=323893;eu(b,312904,h);f=1}else{h=(c[n>>2]|0)+f|0;c[n>>2]=h;f=c[k>>2]|0;f=_l(f+h|0,f+(c[b>>2]|0)|0,m)|0;if(!f){c[i>>2]=323905;eu(b,312904,i);f=1;break}g=(c[n>>2]|0)+f|0;c[n>>2]=g;j=c[j>>2]|0;f=j&1;d=f&255;if(j&2|0){eu(b,323930,l);f=1;break}if(f){f=c[k>>2]|0;f=_l(f+g|0,f+(c[b>>2]|0)|0,p)|0;if(!f){c[o>>2]=323955;eu(b,312904,o);f=1;break}c[n>>2]=(c[n>>2]|0)+f;g=c[m>>2]|0;f=c[p>>2]|0;if(g>>>0>f>>>0){eu(b,323976,q);f=1;break}}else{g=c[m>>2]|0;f=0}a[e+16>>0]=d;q=e;c[q>>2]=g;c[q+4>>2]=0;e=e+8|0;c[e>>2]=f;c[e+4>>2]=0;f=0}while(0);e=f;aa=r;return e|0}function ju(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+64|0;p=q+48|0;o=q+40|0;n=q+32|0;g=q+8|0;f=q;i=q+60|0;h=q+56|0;l=q+52|0;c[l>>2]=0;k=b+4|0;e=c[k>>2]|0;m=b+12|0;e=_l(e+(c[m>>2]|0)|0,e+(c[b>>2]|0)|0,i)|0;if(!e){c[f>>2]=323663;eu(b,312904,f);d=1;aa=q;return d|0}j=(c[m>>2]|0)+e|0;c[m>>2]=j;e=c[k>>2]|0;e=_l(e+j|0,e+(c[b>>2]|0)|0,h)|0;if(!e){c[g>>2]=323676;eu(b,312904,g);d=1;aa=q;return d|0}f=(c[m>>2]|0)+e|0;c[m>>2]=f;j=c[h>>2]|0;if(j>>>0>=65537){eu(b,323702,q+16|0);d=1;aa=q;return d|0}i=c[i>>2]|0;e=i&1;h=e&255;g=i>>>1&1;if((i&3|0)==2){eu(b,323730,q+24|0);d=1;aa=q;return d|0}if(e){e=c[k>>2]|0;e=_l(e+f|0,e+(c[b>>2]|0)|0,l)|0;if(!e){c[n>>2]=323765;eu(b,312904,n);d=1;aa=q;return d|0}c[m>>2]=(c[m>>2]|0)+e;e=c[l>>2]|0;if(e>>>0>=65537){eu(b,323787,o);d=1;aa=q;return d|0}if(j>>>0>e>>>0){eu(b,323811,p);d=1;aa=q;return d|0}}else e=0;a[d+16>>0]=h;a[d+17>>0]=g;p=d;c[p>>2]=j;c[p+4>>2]=0;d=d+8|0;c[d>>2]=e;c[d+4>>2]=0;d=0;aa=q;return d|0}function ku(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+32|0;n=o+24|0;l=o+16|0;i=o+8|0;g=o;h=o+28|0;c[h>>2]=0;k=b+4|0;f=c[k>>2]|0;m=b+12|0;f=$l(f+(c[m>>2]|0)|0,f+(c[b>>2]|0)|0,h)|0;if(!f){c[g>>2]=323575;eu(b,314399,g);n=1;aa=o;return n|0}f=(c[m>>2]|0)+f|0;c[m>>2]=f;h=c[h>>2]|0;switch(h|0){case -4:case -3:case -2:case -1:break;case -5:{if(!(a[(c[b+76>>2]|0)+4>>0]|0))j=7;break}case -24:{if(!(a[c[b+76>>2]>>0]|0))j=7;break}case -17:{if(!(a[(c[b+76>>2]|0)+9>>0]|0))j=7;break}default:j=7}if((j|0)==7){c[i>>2]=h;eu(b,323587,i);n=1;aa=o;return n|0}g=f+1|0;if(g>>>0>(c[b>>2]|0)>>>0){c[l>>2]=315712;c[l+4>>2]=323612;eu(b,312701,l);n=1;aa=o;return n|0}f=a[(c[k>>2]|0)+f>>0]|0;c[m>>2]=g;if((f&255)<2){c[d>>2]=h;a[e>>0]=f<<24>>24!=0&1;n=0;aa=o;return n|0}else{eu(b,323630,n);n=1;aa=o;return n|0}return 0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=aa;aa=aa+48|0;j=k+16|0;e=k;i=k+32|0;f=k+28|0;g=a+4|0;d=c[g>>2]|0;h=a+12|0;d=_l(d+(c[h>>2]|0)|0,d+(c[a>>2]|0)|0,f)|0;if(!d){c[e>>2]=323481;eu(a,312904,e);j=1;aa=k;return j|0}d=(c[h>>2]|0)+d|0;c[h>>2]=d;if(c[f>>2]|0){eu(a,323497,k+8|0);j=1;aa=k;return j|0}g=c[g>>2]|0;d=_l(g+d|0,g+(c[a>>2]|0)|0,i)|0;if(!d){c[j>>2]=323523;eu(a,312904,j);j=1;aa=k;return j|0}c[h>>2]=(c[h>>2]|0)+d;j=c[i>>2]|0;c[b>>2]=j;if(j>>>0<(c[a+88>>2]|0)>>>0){j=0;aa=k;return j|0}eu(a,323545,k+24|0);j=1;aa=k;return j|0}function mu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=aa;aa=aa+160|0;q=v+112|0;u=v+104|0;t=v+96|0;k=v+88|0;j=v+80|0;p=v+72|0;h=v+64|0;m=v+48|0;n=v+32|0;l=v+16|0;i=v;r=v+144|0;o=v+128|0;if((nu(b,r,317907)|0)==1){u=1;aa=v;return u|0}s=c[r>>2]|0;if(!(Dm(s,c[b+76>>2]|0)|0)){pu(b,s,0);u=1;aa=v;return u|0}a:do switch(s|0){case 52:{c[q>>2]=0;g=c[b+4>>2]|0;h=b+12|0;g=$l(g+(c[h>>2]|0)|0,g+(c[b>>2]|0)|0,q)|0;if(!g){c[i>>2]=322989;eu(b,314399,i);u=1;aa=v;return u|0}c[h>>2]=(c[h>>2]|0)+g;p=c[b+36>>2]|0;if(!(ga[c[(c[p>>2]|0)+780>>2]&127](p,e,c[q>>2]|0)|0))break a;eu(b,323015,v+8|0);u=1;aa=v;return u|0}case 53:{g=q;c[g>>2]=0;c[g+4>>2]=0;g=c[b+4>>2]|0;h=b+12|0;g=am(g+(c[h>>2]|0)|0,g+(c[b>>2]|0)|0,q)|0;if(!g){c[l>>2]=323054;eu(b,320083,l);u=1;aa=v;return u|0}c[h>>2]=(c[h>>2]|0)+g;p=c[b+36>>2]|0;if(!(ha[c[(c[p>>2]|0)+784>>2]&127](p,e,c[q>>2]|0,c[q+4>>2]|0)|0))break a;eu(b,323080,v+24|0);u=1;aa=v;return u|0}case 54:{i=b+12|0;g=c[i>>2]|0;h=g+4|0;if(h>>>0>(c[b>>2]|0)>>>0){c[n>>2]=320191;c[n+4>>2]=323119;eu(b,312701,n);u=1;aa=v;return u|0}q=(c[b+4>>2]|0)+g|0;q=d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24;c[i>>2]=h;p=c[b+36>>2]|0;if(ga[c[(c[p>>2]|0)+764>>2]&127](p,e,q)|0){eu(b,323145,v+40|0);u=1;aa=v;return u|0}break}case 55:{i=b+12|0;g=c[i>>2]|0;h=g+8|0;if(h>>>0>(c[b>>2]|0)>>>0){c[m>>2]=320272;c[m+4>>2]=323184;eu(b,312701,m);u=1;aa=v;return u|0}q=(c[b+4>>2]|0)+g|0;p=q;p=d[p>>0]|d[p+1>>0]<<8|d[p+2>>0]<<16|d[p+3>>0]<<24;q=q+4|0;q=d[q>>0]|d[q+1>>0]<<8|d[q+2>>0]<<16|d[q+3>>0]<<24;c[i>>2]=h;o=c[b+36>>2]|0;if(ha[c[(c[o>>2]|0)+768>>2]&127](o,e,p,q)|0){eu(b,323210,v+56|0);u=1;aa=v;return u|0}break}case 213:{c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;k=b+12|0;g=c[k>>2]|0;j=g+16|0;if(j>>>0>(c[b>>2]|0)>>>0){c[h>>2]=330963;c[h+4>>2]=323249;eu(b,312701,h);u=1;aa=v;return u|0}i=o;g=(c[b+4>>2]|0)+g|0;h=i+16|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(h|0));c[k>>2]=j;n=c[b+36>>2]|0;m=c[(c[n>>2]|0)+772>>2]|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];if(!(ga[m&127](n,e,q)|0))break a;eu(b,323276,p);u=1;aa=v;return u|0}case 25:{g=c[b+4>>2]|0;h=b+12|0;g=_l(g+(c[h>>2]|0)|0,g+(c[b>>2]|0)|0,q)|0;if(!g){c[j>>2]=323316;eu(b,312904,j);u=1;aa=v;return u|0}c[h>>2]=(c[h>>2]|0)+g;p=c[b+36>>2]|0;if(ga[c[(c[p>>2]|0)+776>>2]&127](p,e,c[q>>2]|0)|0){eu(b,323343,k);u=1;aa=v;return u|0}break}case 11:{u=0;aa=v;return u|0}default:{pu(b,s,323383);u=1;aa=v;return u|0}}while(0);b:do if(f){switch(s|0){case 25:case 52:break b;default:{}}eu(b,323409,t);u=1;aa=v;return u|0}while(0);if((nu(b,r,317907)|0)==1){u=1;aa=v;return u|0}if((c[r>>2]|0)==11){u=0;aa=v;return u|0}eu(b,323432,u);u=1;aa=v;return u|0}function nu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=aa;aa=aa+16|0;n=o+8|0;g=o;l=o+12|0;m=b+12|0;h=c[m>>2]|0;k=h+1|0;i=c[b>>2]|0;if(k>>>0>i>>>0){c[g>>2]=315712;c[g+4>>2]=e;eu(b,312701,g);d=1;aa=o;return d|0}g=c[b+4>>2]|0;j=a[g+h>>0]|0;c[m>>2]=k;if((j+4&255)>=3){n=j&255;b=c[17248+(n<<2)>>2]|0;c[d>>2]=j<<24>>24==0|(b|0)!=0?b:0-n|0;d=0;aa=o;return d|0}g=_l(g+k|0,g+i|0,l)|0;if(!g){c[n>>2]=e;eu(b,312904,n);d=1;aa=o;return d|0}c[m>>2]=(c[m>>2]|0)+g;h=c[l>>2]|0;g=(h>>>0<255?h:255)|(j&255)<<8;if(!(g>>>0<65536?(f=c[17248+(g<<2)>>2]|0,(h|0)==0|(f|0)!=0):0))f=0-g|0;c[d>>2]=f;d=0;aa=o;return d|0} +function HA(a,b){a=+a;b=b|0;var d=0,e=0;if((b|0)<=1023){if((b|0)<-1022){a=a*2.2250738585072014e-308;d=(b|0)<-2044;e=b+2044|0;b=d?((e|0)>-1022?e:-1022):b+1022|0;a=d?a*2.2250738585072014e-308:a}}else{a=a*8988465674311579538646525.0e283;e=(b|0)>2046;d=b+-2046|0;b=e?((d|0)<1023?d:1023):b+-1023|0;a=e?a*8988465674311579538646525.0e283:a}d=pC(b+1023|0,0,52)|0;e=z()|0;c[h>>2]=d;c[h+4>>2]=e;return +(a*+g[h>>3])}function IA(a,b){a=+a;b=+b;return +(+NA(a,b))}function JA(a,b){a=+a;b=+b;return +(+LA(a,b))}function KA(a,b){a=+a;b=b|0;return +(+HA(a,b))}function LA(a,b){a=+a;b=+b;var d=0,e=0,f=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g[h>>3]=a;k=c[h>>2]|0;l=c[h+4>>2]|0;g[h>>3]=b;n=c[h>>2]|0;o=c[h+4>>2]|0;e=oC(k|0,l|0,52)|0;z()|0;e=e&2047;m=oC(n|0,o|0,52)|0;z()|0;m=m&2047;p=l&-2147483648;j=pC(n|0,o|0,1)|0;i=z()|0;a:do if(!((j|0)==0&(i|0)==0)?(f=MA(b)|0,d=(z()|0)&2147483647,!((e|0)==2047|(d>>>0>2146435072|(d|0)==2146435072&f>>>0>0))):0){d=pC(k|0,l|0,1)|0;f=z()|0;if(!(f>>>0>i>>>0|(f|0)==(i|0)&d>>>0>j>>>0))return +((d|0)==(j|0)&(f|0)==(i|0)?a*0.0:a);if(!e){d=pC(k|0,l|0,12)|0;e=z()|0;if((e|0)>-1|(e|0)==-1&d>>>0>4294967295){f=e;e=0;do{e=e+-1|0;d=pC(d|0,f|0,1)|0;f=z()|0}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else e=0;k=pC(k|0,l|0,1-e|0)|0;j=z()|0}else j=l&1048575|1048576;if(!m){d=pC(n|0,o|0,12)|0;f=z()|0;if((f|0)>-1|(f|0)==-1&d>>>0>4294967295){i=0;do{i=i+-1|0;d=pC(d|0,f|0,1)|0;f=z()|0}while((f|0)>-1|(f|0)==-1&d>>>0>4294967295)}else i=0;n=pC(n|0,o|0,1-i|0)|0;l=z()|0;m=i}else l=o&1048575|1048576;d=jC(k|0,j|0,n|0,l|0)|0;f=z()|0;i=(f|0)>-1|(f|0)==-1&d>>>0>4294967295;b:do if((e|0)>(m|0)){while(1){if(i){if((d|0)==0&(f|0)==0)break}else{d=k;f=j}k=pC(d|0,f|0,1)|0;j=z()|0;e=e+-1|0;d=jC(k|0,j|0,n|0,l|0)|0;f=z()|0;i=(f|0)>-1|(f|0)==-1&d>>>0>4294967295;if((e|0)<=(m|0))break b}b=a*0.0;break a}while(0);if(i){if((d|0)==0&(f|0)==0){b=a*0.0;break}}else{f=j;d=k}if(f>>>0<1048576|(f|0)==1048576&d>>>0<0)do{d=pC(d|0,f|0,1)|0;f=z()|0;e=e+-1|0}while(f>>>0<1048576|(f|0)==1048576&d>>>0<0);if((e|0)>0){o=iC(d|0,f|0,0,-1048576)|0;d=z()|0;e=pC(e|0,0,52)|0;d=d|(z()|0);e=o|e}else{e=oC(d|0,f|0,1-e|0)|0;d=z()|0}c[h>>2]=e;c[h+4>>2]=d|p;b=+g[h>>3]}else q=3;while(0);if((q|0)==3){b=a*b;b=b/b}return +b}function MA(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;y(c[h+4>>2]|0);return b|0}function NA(a,b){a=+a;b=+b;var d=0,e=0;g[h>>3]=a;e=c[h>>2]|0;d=c[h+4>>2]|0;g[h>>3]=b;d=c[h+4>>2]&-2147483648|d&2147483647;c[h>>2]=e;c[h+4>>2]=d;return +(+g[h>>3])}function OA(a){a=a|0;return c[a+60>>2]|0}function PA(b){b=b|0;var c=0,d=0,e=0,f=0,g=0;while(1){c=a[b>>0]|0;e=c<<24>>24;d=b+1|0;if(!(vA(e)|0))break;else b=d}switch(e|0){case 45:{b=1;f=5;break}case 43:{b=0;f=5;break}default:{g=0;d=b}}if((f|0)==5){e=a[d>>0]|0;c=e;e=e<<24>>24;g=b}if(!(Zz(e)|0))b=0;else{b=0;do{d=d+1|0;b=(b*10|0)+48-(c<<24>>24)|0;c=a[d>>0]|0}while((Zz(c<<24>>24)|0)!=0)}return ((g|0)==0?0-b|0:b)|0}function QA(a,b){a=a|0;b=b|0;return +(+RA(a,b,0))}function RA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,g=0,h=0,i=0;i=aa;aa=aa+128|0;h=i;f=h;g=f+124|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));f=h+4|0;c[f>>2]=a;g=h+8|0;c[g>>2]=-1;c[h+44>>2]=a;c[h+76>>2]=-1;zA(h);e=+DA(h,d);d=(c[f>>2]|0)-(c[g>>2]|0)+(c[h+108>>2]|0)|0;if(b|0)c[b>>2]=(d|0)==0?a:a+d|0;aa=i;return +e}function SA(a,b){a=a|0;b=b|0;return +(+RA(a,b,1))}function TA(a){a=a|0;var b=0,d=0;b=aa;aa=aa+32|0;d=b;c[d>>2]=a;c[d+4>>2]=21523;c[d+8>>2]=b+16;a=(Oz(S(54,d|0)|0)|0)==0&1;aa=b;return a|0}function UA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=aa;aa=aa+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=c[88551]|0;d=m>>>a;if(d&3|0){e=(d&1^1)+a|0;f=354244+(e<<1<<2)|0;b=f+8|0;a=c[b>>2]|0;g=a+8|0;d=c[g>>2]|0;if((d|0)==(f|0))c[88551]=m&~(1<<e);else{c[d+12>>2]=f;c[b>>2]=d}v=e<<3;c[a+4>>2]=v|3;v=a+v+4|0;c[v>>2]=c[v>>2]|1;v=g;aa=w;return v|0}l=c[88553]|0;if(k>>>0>l>>>0){if(d|0){i=2<<a;d=d<<a&(i|0-i);d=(d&0-d)+-1|0;i=d>>>12&16;d=d>>>i;a=d>>>5&8;d=d>>>a;g=d>>>2&4;d=d>>>g;b=d>>>1&2;d=d>>>b;e=d>>>1&1;e=(a|i|g|b|e)+(d>>>e)|0;d=354244+(e<<1<<2)|0;b=d+8|0;g=c[b>>2]|0;i=g+8|0;a=c[i>>2]|0;if((a|0)==(d|0)){a=m&~(1<<e);c[88551]=a}else{c[a+12>>2]=d;c[b>>2]=a;a=m}v=e<<3;h=v-k|0;c[g+4>>2]=k|3;f=g+k|0;c[f+4>>2]=h|1;c[g+v>>2]=h;if(l|0){e=c[88556]|0;b=l>>>3;d=354244+(b<<1<<2)|0;b=1<<b;if(!(a&b)){c[88551]=a|b;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=e;c[a+12>>2]=e;c[e+8>>2]=a;c[e+12>>2]=d}c[88553]=h;c[88556]=f;v=i;aa=w;return v|0}g=c[88552]|0;if(g){i=(g&0-g)+-1|0;f=i>>>12&16;i=i>>>f;e=i>>>5&8;i=i>>>e;h=i>>>2&4;i=i>>>h;d=i>>>1&2;i=i>>>d;j=i>>>1&1;j=c[354508+((e|f|h|d|j)+(i>>>j)<<2)>>2]|0;i=(c[j+4>>2]&-8)-k|0;d=j;while(1){a=c[d+16>>2]|0;if(!a){a=c[d+20>>2]|0;if(!a)break}d=(c[a+4>>2]&-8)-k|0;h=d>>>0<i>>>0;i=h?d:i;d=a;j=h?a:j}h=j+k|0;if(h>>>0>j>>>0){f=c[j+24>>2]|0;b=c[j+12>>2]|0;do if((b|0)==(j|0)){a=j+20|0;b=c[a>>2]|0;if(!b){a=j+16|0;b=c[a>>2]|0;if(!b){d=0;break}}while(1){e=b+20|0;d=c[e>>2]|0;if(!d){e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;a=e}}else{b=d;a=e}}c[a>>2]=0;d=b}else{d=c[j+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[j+28>>2]|0;a=354508+(b<<2)|0;if((j|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[88552]=g&~(1<<b);break}}else{v=f+16|0;c[((c[v>>2]|0)==(j|0)?v:f+20|0)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[j+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[j+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(i>>>0<16){v=i+k|0;c[j+4>>2]=v|3;v=j+v+4|0;c[v>>2]=c[v>>2]|1}else{c[j+4>>2]=k|3;c[h+4>>2]=i|1;c[h+i>>2]=i;if(l|0){e=c[88556]|0;b=l>>>3;d=354244+(b<<1<<2)|0;b=1<<b;if(!(b&m)){c[88551]=b|m;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=e;c[a+12>>2]=e;c[e+8>>2]=a;c[e+12>>2]=d}c[88553]=i;c[88556]=h}v=j+8|0;aa=w;return v|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;e=c[88552]|0;if(e){d=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;r=a<<m;i=(r+520192|0)>>>16&4;r=r<<i;j=(r+245760|0)>>>16&2;j=14-(i|m|j)+(r<<j>>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;a=c[354508+(j<<2)>>2]|0;a:do if(!a){f=0;a=0;r=61}else{f=0;h=k<<((j|0)==31?0:25-(j>>>1)|0);i=a;a=0;while(1){g=(c[i+4>>2]&-8)-k|0;if(g>>>0<d>>>0)if(!g){d=0;f=i;a=i;r=65;break a}else{d=g;a=i}r=c[i+20>>2]|0;i=c[i+16+(h>>>31<<2)>>2]|0;f=(r|0)==0|(r|0)==(i|0)?f:r;if(!i){r=61;break}else h=h<<1}}while(0);if((r|0)==61){if((f|0)==0&(a|0)==0){a=2<<j;a=(a|0-a)&e;if(!a){m=k;break}a=(a&0-a)+-1|0;i=a>>>12&16;a=a>>>i;h=a>>>5&8;a=a>>>h;j=a>>>2&4;a=a>>>j;m=a>>>1&2;a=a>>>m;f=a>>>1&1;f=c[354508+((h|i|j|m|f)+(a>>>f)<<2)>>2]|0;a=0}if(!f){i=d;g=a}else r=65}if((r|0)==65)while(1){m=(c[f+4>>2]&-8)-k|0;g=m>>>0<d>>>0;d=g?m:d;g=g?f:a;a=c[f+16>>2]|0;if(!a)a=c[f+20>>2]|0;if(!a){i=d;break}else{f=a;a=g}}if(((g|0)!=0?i>>>0<((c[88553]|0)-k|0)>>>0:0)?(l=g+k|0,l>>>0>g>>>0):0){h=c[g+24>>2]|0;b=c[g+12>>2]|0;do if((b|0)==(g|0)){a=g+20|0;b=c[a>>2]|0;if(!b){a=g+16|0;b=c[a>>2]|0;if(!b){b=0;break}}while(1){f=b+20|0;d=c[f>>2]|0;if(!d){f=b+16|0;d=c[f>>2]|0;if(!d)break;else{b=d;a=f}}else{b=d;a=f}}c[a>>2]=0}else{v=c[g+8>>2]|0;c[v+12>>2]=b;c[b+8>>2]=v}while(0);do if(h){a=c[g+28>>2]|0;d=354508+(a<<2)|0;if((g|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=e&~(1<<a);c[88552]=e;break}}else{v=h+16|0;c[((c[v>>2]|0)==(g|0)?v:h+20|0)>>2]=b;if(!b)break}c[b+24>>2]=h;a=c[g+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[g+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);b:do if(i>>>0<16){v=i+k|0;c[g+4>>2]=v|3;v=g+v+4|0;c[v>>2]=c[v>>2]|1}else{c[g+4>>2]=k|3;c[l+4>>2]=i|1;c[l+i>>2]=i;b=i>>>3;if(i>>>0<256){d=354244+(b<<1<<2)|0;a=c[88551]|0;b=1<<b;if(!(a&b)){c[88551]=a|b;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=l;c[a+12>>2]=l;c[l+8>>2]=a;c[l+12>>2]=d;break}b=i>>>8;if(b)if(i>>>0>16777215)d=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;d=(v+245760|0)>>>16&2;d=14-(t|u|d)+(v<<d>>>15)|0;d=i>>>(d+7|0)&1|d<<1}else d=0;b=354508+(d<<2)|0;c[l+28>>2]=d;a=l+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<<d;if(!(e&a)){c[88552]=e|a;c[b>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break}b=c[b>>2]|0;c:do if((c[b+4>>2]&-8|0)!=(i|0)){e=i<<((d|0)==31?0:25-(d>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(i|0)){b=a;break c}else{e=e<<1;b=a}}c[d>>2]=l;c[l+24>>2]=b;c[l+12>>2]=l;c[l+8>>2]=l;break b}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=l;c[u>>2]=l;c[l+8>>2]=v;c[l+12>>2]=b;c[l+24>>2]=0}while(0);v=g+8|0;aa=w;return v|0}else m=k}else m=k}else m=-1;while(0);d=c[88553]|0;if(d>>>0>=m>>>0){a=d-m|0;b=c[88556]|0;if(a>>>0>15){v=b+m|0;c[88556]=v;c[88553]=a;c[v+4>>2]=a|1;c[b+d>>2]=a;c[b+4>>2]=m|3}else{c[88553]=0;c[88556]=0;c[b+4>>2]=d|3;v=b+d+4|0;c[v>>2]=c[v>>2]|1}v=b+8|0;aa=w;return v|0}h=c[88554]|0;if(h>>>0>m>>>0){t=h-m|0;c[88554]=t;v=c[88557]|0;u=v+m|0;c[88557]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;aa=w;return v|0}if(!(c[88669]|0)){c[88671]=4096;c[88670]=4096;c[88672]=-1;c[88673]=-1;c[88674]=0;c[88662]=0;c[88669]=n&-16^1431655768;a=4096}else a=c[88671]|0;i=m+48|0;j=m+47|0;g=a+j|0;e=0-a|0;k=g&e;if(k>>>0<=m>>>0){v=0;aa=w;return v|0}a=c[88661]|0;if(a|0?(l=c[88659]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){v=0;aa=w;return v|0}d:do if(!(c[88662]&4)){d=c[88557]|0;e:do if(d){f=354652;while(1){a=c[f>>2]|0;if(a>>>0<=d>>>0?(q=f+4|0,(a+(c[q>>2]|0)|0)>>>0>d>>>0):0)break;a=c[f+8>>2]|0;if(!a){r=128;break e}else f=a}b=g-h&e;if(b>>>0<2147483647){a=vC(b|0)|0;if((a|0)==((c[f>>2]|0)+(c[q>>2]|0)|0)){if((a|0)!=(-1|0)){h=a;g=b;r=145;break d}}else{e=a;r=136}}else b=0}else r=128;while(0);do if((r|0)==128){d=vC(0)|0;if((d|0)!=(-1|0)?(b=d,o=c[88670]|0,p=o+-1|0,b=((p&b|0)==0?0:(p+b&0-o)-b|0)+k|0,o=c[88659]|0,p=b+o|0,b>>>0>m>>>0&b>>>0<2147483647):0){q=c[88661]|0;if(q|0?p>>>0<=o>>>0|p>>>0>q>>>0:0){b=0;break}a=vC(b|0)|0;if((a|0)==(d|0)){h=d;g=b;r=145;break d}else{e=a;r=136}}else b=0}while(0);do if((r|0)==136){d=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){b=0;break}else{h=e;g=b;r=145;break d}a=c[88671]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=e;g=b;r=145;break d}if((vC(a|0)|0)==(-1|0)){vC(d|0)|0;b=0;break}else{h=e;g=a+b|0;r=145;break d}}while(0);c[88662]=c[88662]|4;r=143}else{b=0;r=143}while(0);if(((r|0)==143?k>>>0<2147483647:0)?(s=vC(k|0)|0,q=vC(0)|0,u=q-s|0,t=u>>>0>(m+40|0)>>>0,!((s|0)==(-1|0)|t^1|s>>>0<q>>>0&((s|0)!=(-1|0)&(q|0)!=(-1|0))^1)):0){h=s;g=t?u:b;r=145}if((r|0)==145){b=(c[88659]|0)+g|0;c[88659]=b;if(b>>>0>(c[88660]|0)>>>0)c[88660]=b;j=c[88557]|0;f:do if(j){f=354652;while(1){b=c[f>>2]|0;e=f+4|0;a=c[e>>2]|0;if((h|0)==(b+a|0)){r=154;break}d=c[f+8>>2]|0;if(!d)break;else f=d}if(((r|0)==154?(c[f+12>>2]&8|0)==0:0)?h>>>0>j>>>0&b>>>0<=j>>>0:0){c[e>>2]=a+g;v=(c[88554]|0)+g|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;u=j+t|0;t=v-t|0;c[88557]=u;c[88554]=t;c[u+4>>2]=t|1;c[j+v+4>>2]=40;c[88558]=c[88673];break}if(h>>>0<(c[88555]|0)>>>0)c[88555]=h;d=h+g|0;a=354652;while(1){if((c[a>>2]|0)==(d|0)){r=162;break}b=c[a+8>>2]|0;if(!b)break;else a=b}if((r|0)==162?(c[a+12>>2]&8|0)==0:0){c[a>>2]=h;l=a+4|0;c[l>>2]=(c[l>>2]|0)+g;l=h+8|0;l=h+((l&7|0)==0?0:0-l&7)|0;b=d+8|0;b=d+((b&7|0)==0?0:0-b&7)|0;k=l+m|0;i=b-l-m|0;c[l+4>>2]=m|3;g:do if((j|0)==(b|0)){v=(c[88554]|0)+i|0;c[88554]=v;c[88557]=k;c[k+4>>2]=v|1}else{if((c[88556]|0)==(b|0)){v=(c[88553]|0)+i|0;c[88553]=v;c[88556]=k;c[k+4>>2]=v|1;c[k+v>>2]=v;break}a=c[b+4>>2]|0;if((a&3|0)==1){h=a&-8;e=a>>>3;h:do if(a>>>0<256){a=c[b+8>>2]|0;d=c[b+12>>2]|0;if((d|0)==(a|0)){c[88551]=c[88551]&~(1<<e);break}else{c[a+12>>2]=d;c[d+8>>2]=a;break}}else{g=c[b+24>>2]|0;a=c[b+12>>2]|0;do if((a|0)==(b|0)){e=b+16|0;d=e+4|0;a=c[d>>2]|0;if(!a){a=c[e>>2]|0;if(!a){a=0;break}else d=e}while(1){f=a+20|0;e=c[f>>2]|0;if(!e){f=a+16|0;e=c[f>>2]|0;if(!e)break;else{a=e;d=f}}else{a=e;d=f}}c[d>>2]=0}else{v=c[b+8>>2]|0;c[v+12>>2]=a;c[a+8>>2]=v}while(0);if(!g)break;d=c[b+28>>2]|0;e=354508+(d<<2)|0;do if((c[e>>2]|0)!=(b|0)){v=g+16|0;c[((c[v>>2]|0)==(b|0)?v:g+20|0)>>2]=a;if(!a)break h}else{c[e>>2]=a;if(a|0)break;c[88552]=c[88552]&~(1<<d);break h}while(0);c[a+24>>2]=g;e=b+16|0;d=c[e>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}d=c[e+4>>2]|0;if(!d)break;c[a+20>>2]=d;c[d+24>>2]=a}while(0);b=b+h|0;f=h+i|0}else f=i;b=b+4|0;c[b>>2]=c[b>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;b=f>>>3;if(f>>>0<256){d=354244+(b<<1<<2)|0;a=c[88551]|0;b=1<<b;if(!(a&b)){c[88551]=a|b;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=k;c[a+12>>2]=k;c[k+8>>2]=a;c[k+12>>2]=d;break}b=f>>>8;do if(!b)e=0;else{if(f>>>0>16777215){e=31;break}u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);a=354508+(e<<2)|0;c[k+28>>2]=e;b=k+16|0;c[b+4>>2]=0;c[b>>2]=0;b=c[88552]|0;d=1<<e;if(!(b&d)){c[88552]=b|d;c[a>>2]=k;c[k+24>>2]=a;c[k+12>>2]=k;c[k+8>>2]=k;break}b=c[a>>2]|0;i:do if((c[b+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(f|0)){b=a;break i}else{e=e<<1;b=a}}c[d>>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break g}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=k;c[u>>2]=k;c[k+8>>2]=v;c[k+12>>2]=b;c[k+24>>2]=0}while(0);v=l+8|0;aa=w;return v|0}a=354652;while(1){b=c[a>>2]|0;if(b>>>0<=j>>>0?(v=b+(c[a+4>>2]|0)|0,v>>>0>j>>>0):0)break;a=c[a+8>>2]|0}f=v+-47|0;a=f+8|0;a=f+((a&7|0)==0?0:0-a&7)|0;f=j+16|0;a=a>>>0<f>>>0?j:a;b=a+8|0;d=g+-40|0;t=h+8|0;t=(t&7|0)==0?0:0-t&7;u=h+t|0;t=d-t|0;c[88557]=u;c[88554]=t;c[u+4>>2]=t|1;c[h+d+4>>2]=40;c[88558]=c[88673];d=a+4|0;c[d>>2]=27;c[b>>2]=c[88663];c[b+4>>2]=c[88664];c[b+8>>2]=c[88665];c[b+12>>2]=c[88666];c[88663]=h;c[88664]=g;c[88666]=0;c[88665]=b;b=a+24|0;do{u=b;b=b+4|0;c[b>>2]=7}while((u+8|0)>>>0<v>>>0);if((a|0)!=(j|0)){g=a-j|0;c[d>>2]=c[d>>2]&-2;c[j+4>>2]=g|1;c[a>>2]=g;b=g>>>3;if(g>>>0<256){d=354244+(b<<1<<2)|0;a=c[88551]|0;b=1<<b;if(!(a&b)){c[88551]=a|b;b=d+8|0;a=d}else{a=d+8|0;b=a;a=c[a>>2]|0}c[b>>2]=j;c[a+12>>2]=j;c[j+8>>2]=a;c[j+12>>2]=d;break}b=g>>>8;if(b)if(g>>>0>16777215)e=31;else{u=(b+1048320|0)>>>16&8;v=b<<u;t=(v+520192|0)>>>16&4;v=v<<t;e=(v+245760|0)>>>16&2;e=14-(t|u|e)+(v<<e>>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=354508+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[f>>2]=0;b=c[88552]|0;a=1<<e;if(!(b&a)){c[88552]=b|a;c[d>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}b=c[d>>2]|0;j:do if((c[b+4>>2]&-8|0)!=(g|0)){e=g<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=b+16+(e>>>31<<2)|0;a=c[d>>2]|0;if(!a)break;if((c[a+4>>2]&-8|0)==(g|0)){b=a;break j}else{e=e<<1;b=a}}c[d>>2]=j;c[j+24>>2]=b;c[j+12>>2]=j;c[j+8>>2]=j;break f}while(0);u=b+8|0;v=c[u>>2]|0;c[v+12>>2]=j;c[u>>2]=j;c[j+8>>2]=v;c[j+12>>2]=b;c[j+24>>2]=0}}else{v=c[88555]|0;if((v|0)==0|h>>>0<v>>>0)c[88555]=h;c[88663]=h;c[88664]=g;c[88666]=0;c[88560]=c[88669];c[88559]=-1;c[88564]=354244;c[88563]=354244;c[88566]=354252;c[88565]=354252;c[88568]=354260;c[88567]=354260;c[88570]=354268;c[88569]=354268;c[88572]=354276;c[88571]=354276;c[88574]=354284;c[88573]=354284;c[88576]=354292;c[88575]=354292;c[88578]=354300;c[88577]=354300;c[88580]=354308;c[88579]=354308;c[88582]=354316;c[88581]=354316;c[88584]=354324;c[88583]=354324;c[88586]=354332;c[88585]=354332;c[88588]=354340;c[88587]=354340;c[88590]=354348;c[88589]=354348;c[88592]=354356;c[88591]=354356;c[88594]=354364;c[88593]=354364;c[88596]=354372;c[88595]=354372;c[88598]=354380;c[88597]=354380;c[88600]=354388;c[88599]=354388;c[88602]=354396;c[88601]=354396;c[88604]=354404;c[88603]=354404;c[88606]=354412;c[88605]=354412;c[88608]=354420;c[88607]=354420;c[88610]=354428;c[88609]=354428;c[88612]=354436;c[88611]=354436;c[88614]=354444;c[88613]=354444;c[88616]=354452;c[88615]=354452;c[88618]=354460;c[88617]=354460;c[88620]=354468;c[88619]=354468;c[88622]=354476;c[88621]=354476;c[88624]=354484;c[88623]=354484;c[88626]=354492;c[88625]=354492;v=g+-40|0;t=h+8|0;t=(t&7|0)==0?0:0-t&7;u=h+t|0;t=v-t|0;c[88557]=u;c[88554]=t;c[u+4>>2]=t|1;c[h+v+4>>2]=40;c[88558]=c[88673]}while(0);b=c[88554]|0;if(b>>>0>m>>>0){t=b-m|0;c[88554]=t;v=c[88557]|0;u=v+m|0;c[88557]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;aa=w;return v|0}}c[88534]=12;v=0;aa=w;return v|0}function VA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!a)return;d=a+-8|0;e=c[88555]|0;a=c[a+-4>>2]|0;b=a&-8;k=d+b|0;do if(!(a&1)){f=c[d>>2]|0;if(!(a&3))return;g=d+(0-f)|0;h=f+b|0;if(g>>>0<e>>>0)return;if((c[88556]|0)==(g|0)){b=k+4|0;a=c[b>>2]|0;if((a&3|0)!=3){i=g;j=g;b=h;break}c[88553]=h;c[b>>2]=a&-2;c[g+4>>2]=h|1;c[g+h>>2]=h;return}d=f>>>3;if(f>>>0<256){a=c[g+8>>2]|0;b=c[g+12>>2]|0;if((b|0)==(a|0)){c[88551]=c[88551]&~(1<<d);i=g;j=g;b=h;break}else{c[a+12>>2]=b;c[b+8>>2]=a;i=g;j=g;b=h;break}}f=c[g+24>>2]|0;a=c[g+12>>2]|0;do if((a|0)==(g|0)){d=g+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0;d=a}else{d=c[g+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(f){a=c[g+28>>2]|0;b=354508+(a<<2)|0;if((c[b>>2]|0)==(g|0)){c[b>>2]=d;if(!d){c[88552]=c[88552]&~(1<<a);i=g;j=g;b=h;break}}else{j=f+16|0;c[((c[j>>2]|0)==(g|0)?j:f+20|0)>>2]=d;if(!d){i=g;j=g;b=h;break}}c[d+24>>2]=f;b=g+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}a=c[b+4>>2]|0;if(a){c[d+20>>2]=a;c[a+24>>2]=d;i=g;j=g;b=h}else{i=g;j=g;b=h}}else{i=g;j=g;b=h}}else{i=d;j=d}while(0);if(i>>>0>=k>>>0)return;a=k+4|0;d=c[a>>2]|0;if(!(d&1))return;if(!(d&2)){if((c[88557]|0)==(k|0)){k=(c[88554]|0)+b|0;c[88554]=k;c[88557]=j;c[j+4>>2]=k|1;if((j|0)!=(c[88556]|0))return;c[88556]=0;c[88553]=0;return}if((c[88556]|0)==(k|0)){k=(c[88553]|0)+b|0;c[88553]=k;c[88556]=i;c[j+4>>2]=k|1;c[i+k>>2]=k;return}f=(d&-8)+b|0;e=d>>>3;do if(d>>>0<256){b=c[k+8>>2]|0;a=c[k+12>>2]|0;if((a|0)==(b|0)){c[88551]=c[88551]&~(1<<e);break}else{c[b+12>>2]=a;c[a+8>>2]=b;break}}else{g=c[k+24>>2]|0;a=c[k+12>>2]|0;do if((a|0)==(k|0)){d=k+16|0;b=d+4|0;a=c[b>>2]|0;if(!a){a=c[d>>2]|0;if(!a){d=0;break}else b=d}while(1){e=a+20|0;d=c[e>>2]|0;if(!d){e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}else{a=d;b=e}}c[b>>2]=0;d=a}else{d=c[k+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[k+28>>2]|0;b=354508+(a<<2)|0;if((c[b>>2]|0)==(k|0)){c[b>>2]=d;if(!d){c[88552]=c[88552]&~(1<<a);break}}else{h=g+16|0;c[((c[h>>2]|0)==(k|0)?h:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;b=k+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}a=c[b+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[j+4>>2]=f|1;c[i+f>>2]=f;if((j|0)==(c[88556]|0)){c[88553]=f;return}}else{c[a>>2]=d&-2;c[j+4>>2]=b|1;c[i+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=354244+(a<<1<<2)|0;b=c[88551]|0;a=1<<a;if(!(b&a)){c[88551]=b|a;a=d+8|0;b=d}else{b=d+8|0;a=b;b=c[b>>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)e=31;else{i=(a+1048320|0)>>>16&8;k=a<<i;h=(k+520192|0)>>>16&4;k=k<<h;e=(k+245760|0)>>>16&2;e=14-(h|i|e)+(k<<e>>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;b=354508+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[j+16>>2]=0;a=c[88552]|0;d=1<<e;a:do if(!(a&d)){c[88552]=a|d;c[b>>2]=j;c[j+24>>2]=b;c[j+12>>2]=j;c[j+8>>2]=j}else{a=c[b>>2]|0;b:do if((c[a+4>>2]&-8|0)!=(f|0)){e=f<<((e|0)==31?0:25-(e>>>1)|0);while(1){d=a+16+(e>>>31<<2)|0;b=c[d>>2]|0;if(!b)break;if((c[b+4>>2]&-8|0)==(f|0)){a=b;break b}else{e=e<<1;a=b}}c[d>>2]=j;c[j+24>>2]=a;c[j+12>>2]=j;c[j+8>>2]=j;break a}while(0);i=a+8|0;k=c[i>>2]|0;c[k+12>>2]=j;c[i>>2]=j;c[j+8>>2]=k;c[j+12>>2]=a;c[j+24>>2]=0}while(0);k=(c[88559]|0)+-1|0;c[88559]=k;if(k|0)return;a=354660;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[88559]=-1;return}function WA(){O(354700);return}function XA(){return 354700}function YA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;a:do if(a>>>0<212){a=ZA(283312,283504,a)|0;a=c[a>>2]|0}else{i=(a>>>0)/210|0;h=i*210|0;b=h;f=0;h=(ZA(283504,283696,a-h|0)|0)-283504>>2;while(1){a=(c[283504+(h<<2)>>2]|0)+b|0;e=5;while(1){if(e>>>0>=47){j=6;break}b=c[283312+(e<<2)>>2]|0;d=(a>>>0)/(b>>>0)|0;if(d>>>0<b>>>0)break a;if((a|0)==(v(d,b)|0)){a=f;break}else e=e+1|0}b:do if((j|0)==6){j=0;g=211;d=f;c:while(1){b=(a>>>0)/(g>>>0)|0;do if(b>>>0>=g>>>0)if((a|0)!=(v(b,g)|0)){e=g+10|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+12|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+16|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+18|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+22|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)!=(v(b,e)|0)){e=g+28|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0>=e>>>0)if((a|0)==(v(b,e)|0)){f=9;b=e}else{e=g+30|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+36|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+40|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+42|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+46|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+52|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+58|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+60|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+66|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+70|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+72|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+78|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+82|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+88|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+96|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+100|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+102|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+106|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+108|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+112|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+120|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+126|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+130|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+136|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+138|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+142|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+148|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+150|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+156|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+162|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+166|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+168|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+172|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+178|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+180|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+186|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+190|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+192|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+196|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}e=g+198|0;b=(a>>>0)/(e>>>0)|0;if(b>>>0<e>>>0){f=1;b=e;d=a;break}if((a|0)==(v(b,e)|0)){f=9;b=e;break}b=g+208|0;k=(a>>>0)/(b>>>0)|0;e=k>>>0<b>>>0;k=(a|0)==(v(k,b)|0);f=e?1:k?9:0;b=e|k?b:g+210|0;d=e?a:d}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=e}else{f=1;b=e;d=a}}else{f=9;b=g}else{f=1;b=g;d=a}while(0);switch(f&15){case 9:{a=d;break b}case 0:{g=b;break}default:break c}}if(!f)a=d;else{a=d;break a}}while(0);k=h+1|0;g=(k|0)==48;b=i+(g&1)|0;i=b;b=b*210|0;f=a;h=g?0:k}}while(0);return a|0}function ZA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a;a=b-a>>2;while(1){if(!a)break;b=(a|0)/2|0;g=e+(b<<2)|0;f=(c[g>>2]|0)>>>0<d>>>0;e=f?g+4|0:e;a=f?a+-1-b|0:b}return e|0}function _A(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=UA(b)|0;if(a|0)break;a=fC()|0;if(!a){a=0;break}la[a&15]()}return a|0}function $A(a){a=a|0;VA(a);return}function aB(){U()}function bB(){U()}function cB(b,d){b=b|0;d=d|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;if((a[d+11>>0]|0)<0)dB(b,c[d>>2]|0,c[d+4>>2]|0);else{c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2]}return}function dB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if(e>>>0>4294967279)aB();if(e>>>0<11)a[b+11>>0]=e;else{g=e+16&-16;f=_A(g)|0;c[b>>2]=f;c[b+8>>2]=g|-2147483648;c[b+4>>2]=e;b=f}eB(b,d,e)|0;fB(b+e|0,0);return}function eB(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)sC(a|0,b|0,c|0)|0;return a|0}function fB(b,c){b=b|0;c=c|0;a[b>>0]=c;return}function gB(a){a=a|0;return Uz(a)|0}function hB(a,b,c){a=a|0;b=b|0;c=c|0;if(b|0)uC(a|0,(iB(c)|0)&255|0,b|0)|0;return a|0}function iB(a){a=a|0;return a&255|0}function jB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;g=a[d+11>>0]|0;h=g<<24>>24<0;g=h?c[d+4>>2]|0:g&255;if(g>>>0<e>>>0)bB();else{g=g-e|0;dB(b,(h?c[d>>2]|0:d)+e|0,g>>>0<f>>>0?g:f);return}}function kB(b){b=b|0;if((a[b+11>>0]|0)<0)$A(c[b>>2]|0);return}function lB(b,d){b=b|0;d=d|0;var e=0,f=0;if((b|0)!=(d|0)){e=a[d+11>>0]|0;f=e<<24>>24<0;mB(b,f?c[d>>2]|0:d,f?c[d+4>>2]|0:e&255)|0}return b|0}function mB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+11|0;f=a[h>>0]|0;g=f<<24>>24<0;if(g)i=(c[b+8>>2]&2147483647)+-1|0;else i=10;do if(i>>>0>=e>>>0){if(g)f=c[b>>2]|0;else f=b;nB(f,d,e)|0;fB(f+e|0,0);if((a[h>>0]|0)<0){c[b+4>>2]=e;break}else{a[h>>0]=e;break}}else{if(g)f=c[b+4>>2]|0;else f=f&255;oB(b,i,e-i|0,f,0,f,e,d)}while(0);return b|0}function nB(a,b,c){a=a|0;b=b|0;c=c|0;if(c|0)tC(a|0,b|0,c|0)|0;return a|0}function oB(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0;if((-18-d|0)>>>0<e>>>0)aB();if((a[b+11>>0]|0)<0)m=c[b>>2]|0;else m=b;if(d>>>0<2147483623){l=e+d|0;k=d<<1;l=l>>>0<k>>>0?k:l;l=l>>>0<11?11:l+16&-16}else l=-17;k=_A(l)|0;if(g|0)eB(k,m,g)|0;if(i|0)eB(k+g|0,j,i)|0;e=f-h|0;f=e-g|0;if(f|0)eB(k+g+i|0,m+g+h|0,f)|0;if((d|0)!=10)$A(m);c[b>>2]=k;c[b+8>>2]=l|-2147483648;m=e+i|0;c[b+4>>2]=m;fB(k+m|0,0);return}function pB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=b+11|0;f=a[i>>0]|0;g=f<<24>>24<0;if(g){k=c[b+4>>2]|0;e=(c[b+8>>2]&2147483647)+-1|0}else{k=f&255;e=10}d=k>>>0<11;j=d?10:(k+16&-16)+-1|0;do if((j|0)!=(e|0)){do if(d){d=c[b>>2]|0;if(g){f=b;g=0;h=11}else{eB(b,d,(f&255)+1|0)|0;$A(d);h=14}}else{d=j+1|0;e=_A(d)|0;if(g){f=e;g=1;d=c[b>>2]|0;h=11;break}else{eB(e,b,(f&255)+1|0)|0;f=e;e=b+4|0;h=13;break}}while(0);if((h|0)==11){e=b+4|0;eB(f,d,(c[e>>2]|0)+1|0)|0;$A(d);if(g){d=j+1|0;h=13}else h=14}if((h|0)==13){c[b+8>>2]=d|-2147483648;c[e>>2]=k;c[b>>2]=f;break}else if((h|0)==14){a[i>>0]=k;break}}while(0);return}function qB(a,b){a=a|0;b=b|0;return mB(a,b,gB(b)|0)|0}function rB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=b+11|0;e=a[f>>0]|0;g=e<<24>>24<0;if(g)e=c[b+4>>2]|0;else e=e&255;do if(e>>>0>=d>>>0)if(g){fB((c[b>>2]|0)+d|0,0);c[b+4>>2]=d;break}else{fB(b+d|0,0);a[f>>0]=d;break}else sB(b,d-e|0,0)|0;while(0);return}function sB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(d|0){i=b+11|0;f=a[i>>0]|0;if(f<<24>>24<0){h=c[b+4>>2]|0;g=(c[b+8>>2]&2147483647)+-1|0}else{h=f&255;g=10}if((g-h|0)>>>0<d>>>0){tB(b,g,h+d-g|0,h,h,0);f=a[i>>0]|0}if(f<<24>>24<0)g=c[b>>2]|0;else g=b;hB(g+h|0,d,e)|0;f=h+d|0;if((a[i>>0]|0)<0)c[b+4>>2]=f;else a[i>>0]=f;fB(g+f|0,0)}return b|0}function tB(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;if((-17-d|0)>>>0<e>>>0)aB();if((a[b+11>>0]|0)<0)k=c[b>>2]|0;else k=b;if(d>>>0<2147483623){j=e+d|0;i=d<<1;j=j>>>0<i>>>0?i:j;j=j>>>0<11?11:j+16&-16}else j=-17;i=_A(j)|0;if(g|0)eB(i,k,g)|0;e=f-g|0;if(e|0)eB(i+g+h|0,k+g|0,e)|0;if((d|0)!=10)$A(k);c[b>>2]=i;c[b+8>>2]=j|-2147483648;return}function uB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=b+11|0;f=a[i>>0]|0;g=f<<24>>24<0;if(g){h=c[b+4>>2]|0;f=(c[b+8>>2]&2147483647)+-1|0}else{h=f&255;f=10}if((f-h|0)>>>0>=e>>>0){if(e|0){if(g)g=c[b>>2]|0;else g=b;eB(g+h|0,d,e)|0;f=h+e|0;if((a[i>>0]|0)<0)c[b+4>>2]=f;else a[i>>0]=f;fB(g+f|0,0)}}else oB(b,f,h+e-f|0,h,h,0,e,d);return b|0}function vB(a,b){a=a|0;b=b|0;return uB(a,b,gB(b)|0)|0}function wB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=b+11|0;e=a[h>>0]|0;g=e<<24>>24<0;if(g){f=(c[b+8>>2]&2147483647)+-1|0;i=c[b+4>>2]|0}else{f=10;i=e&255}if((i|0)==(f|0)){tB(b,f,1,f,f,0);if((a[h>>0]|0)<0)e=8;else e=7}else if(g)e=8;else e=7;if((e|0)==7)a[h>>0]=i+1;else if((e|0)==8){h=c[b>>2]|0;c[b+4>>2]=i+1;b=h}i=b+i|0;fB(i,d);fB(i+1|0,0);return}function xB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b+11|0;e=a[j>>0]|0;h=e<<24>>24<0;if(h){f=c[b>>2]|0;g=(c[b+8>>2]&2147483647)+-1|0;i=c[b+4>>2]|0}else{f=b;g=10;i=e&255}d=d-f|0;if((g|0)!=(i|0)){if(h)f=c[b>>2]|0;else f=b;e=i-d|0;if(e){h=f+d|0;nB(h+1|0,h,e)|0}}else{tB(b,i,1,i,d,1);f=c[b>>2]|0}fB(f+d|0,95);e=i+1|0;fB(f+e|0,0);if((a[j>>0]|0)<0)c[b+4>>2]=e;else a[j>>0]=e;return}function yB(a,b){a=a|0;b=b|0;var c=0,d=0;c=aa;aa=aa+16|0;d=c;zB(d);AB(a,d,b);kB(d);aa=c;return}function zB(b){b=b|0;var d=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0}if((a[b+11>>0]|0)<0)d=(c[b+8>>2]&2147483647)+-1|0;else d=10;rB(b,d);return}function AB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;h=d+11|0;f=a[h>>0]|0;if(f<<24>>24<0)g=c[d+4>>2]|0;else g=f&255;while(1){if(f<<24>>24<0)f=c[d>>2]|0;else f=d;c[i>>2]=e;f=Sz(f,g+1|0,331593,i)|0;if((f|0)>-1)if(f>>>0>g>>>0)g=f;else break;else g=g<<1|1;rB(d,g);f=a[h>>0]|0}rB(d,f);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];f=0;while(1){if((f|0)==3)break;c[d+(f<<2)>>2]=0;f=f+1|0}aa=j;return}function BB(a,b){a=a|0;b=b|0;var c=0,d=0;c=aa;aa=aa+16|0;d=c;CB(d);DB(a,d,b);kB(d);aa=c;return}function CB(b){b=b|0;var d=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0}if((a[b+11>>0]|0)<0)d=(c[b+8>>2]&2147483647)+-1|0;else d=10;rB(b,d);return}function DB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;h=d+11|0;f=a[h>>0]|0;if(f<<24>>24<0)g=c[d+4>>2]|0;else g=f&255;while(1){if(f<<24>>24<0)f=c[d>>2]|0;else f=d;c[i>>2]=e;f=Sz(f,g+1|0,331596,i)|0;if((f|0)>-1)if(f>>>0>g>>>0)g=f;else break;else g=g<<1|1;rB(d,g);f=a[h>>0]|0}rB(d,f);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];f=0;while(1){if((f|0)==3)break;c[d+(f<<2)>>2]=0;f=f+1|0}aa=j;return}function EB(a,b){a=a|0;b=b|0;var c=0,d=0;c=aa;aa=aa+16|0;d=c;FB(d);GB(a,d,b);kB(d);aa=c;return}function FB(b){b=b|0;var d=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;d=0;while(1){if((d|0)==3)break;c[b+(d<<2)>>2]=0;d=d+1|0}if((a[b+11>>0]|0)<0)d=(c[b+8>>2]&2147483647)+-1|0;else d=10;rB(b,d);return}function GB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=aa;aa=aa+16|0;i=j;h=d+11|0;f=a[h>>0]|0;if(f<<24>>24<0)g=c[d+4>>2]|0;else g=f&255;while(1){if(f<<24>>24<0)f=c[d>>2]|0;else f=d;c[i>>2]=e;f=Sz(f,g+1|0,331599,i)|0;if((f|0)>-1)if(f>>>0>g>>>0)g=f;else break;else g=g<<1|1;rB(d,g);f=a[h>>0]|0}rB(d,f);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];f=0;while(1){if((f|0)==3)break;c[d+(f<<2)>>2]=0;f=f+1|0}aa=j;return}function HB(){U()}function IB(a){a=a|0;return}function JB(a){a=a|0;$A(a);return}function KB(a){a=a|0;return}function LB(a){a=a|0;return}function MB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=aa;aa=aa+64|0;g=h;if(!(QB(a,b)|0))if((b|0)!=0?(f=UB(b)|0,(f|0)!=0):0){b=g+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[g>>2]=f;c[g+8>>2]=a;c[g+12>>2]=-1;c[g+48>>2]=1;pa[c[(c[f>>2]|0)+28>>2]&15](f,g,c[d>>2]|0,1);if((c[g+24>>2]|0)==1){c[d>>2]=c[g+16>>2];b=1}else b=0}else b=0;else b=1;aa=h;return b|0}function NB(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(QB(a,c[b+8>>2]|0)|0)TB(b,d,e,f);return}function OB(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(QB(b,c[d+8>>2]|0)|0)){if(QB(b,c[d>>2]|0)|0){if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;g=d+40|0;c[g>>2]=(c[g>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else SB(d,e,f);while(0);return}function PB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(QB(a,c[b+8>>2]|0)|0)RB(b,d,e);return}function QB(a,b){a=a|0;b=b|0;return (a|0)==(b|0)|0}function RB(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;g=b+16|0;f=c[g>>2]|0;do if(f){if((f|0)!=(d|0)){e=b+36|0;c[e>>2]=(c[e>>2]|0)+1;c[b+24>>2]=2;a[b+54>>0]=1;break}f=b+24|0;if((c[f>>2]|0)==2)c[f>>2]=e}else{c[g>>2]=d;c[b+24>>2]=e;c[b+36>>2]=1}while(0);return}function SB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((c[a+4>>2]|0)==(b|0)?(e=a+28|0,(c[e>>2]|0)!=1):0)c[e>>2]=d;return}function TB(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;a[b+53>>0]=1;do if((c[b+4>>2]|0)==(e|0)){a[b+52>>0]=1;g=b+16|0;e=c[g>>2]|0;if(!e){c[g>>2]=d;c[b+24>>2]=f;c[b+36>>2]=1;if(!((f|0)==1?(c[b+48>>2]|0)==1:0))break;a[b+54>>0]=1;break}if((e|0)!=(d|0)){f=b+36|0;c[f>>2]=(c[f>>2]|0)+1;a[b+54>>0]=1;break}g=b+24|0;e=c[g>>2]|0;if((e|0)==2){c[g>>2]=f;e=f}if((e|0)==1?(c[b+48>>2]|0)==1:0)a[b+54>>0]=1}while(0);return}function UB(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=aa;aa=aa+64|0;p=q;n=c[d>>2]|0;o=d+(c[n+-8>>2]|0)|0;n=c[n+-4>>2]|0;c[p>>2]=286776;c[p+4>>2]=d;c[p+8>>2]=286792;k=p+12|0;e=p+16|0;f=p+20|0;h=p+24|0;j=p+28|0;i=p+32|0;g=p+40|0;d=QB(n,286776)|0;l=k;m=l+40|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));b[k+40>>1]=0;a[k+42>>0]=0;a:do if(d){c[p+48>>2]=1;ra[c[(c[n>>2]|0)+20>>2]&15](n,p,o,o,1,0);d=(c[h>>2]|0)==1?o:0}else{qa[c[(c[n>>2]|0)+24>>2]&15](n,p,o,1,0);switch(c[p+36>>2]|0){case 0:{d=(c[g>>2]|0)==1&(c[j>>2]|0)==1&(c[i>>2]|0)==1?c[f>>2]|0:0;break a}case 1:break;default:{d=0;break a}}if((c[h>>2]|0)!=1?!((c[g>>2]|0)==0&(c[j>>2]|0)==1&(c[i>>2]|0)==1):0){d=0;break}d=c[e>>2]|0}while(0);aa=q;return d|0}function VB(a){a=a|0;$A(a);return}function WB(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(QB(a,c[b+8>>2]|0)|0)TB(b,d,e,f);else{a=c[a+8>>2]|0;ra[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e,f,g)}return}function XB(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;do if(!(QB(b,c[d+8>>2]|0)|0)){if(!(QB(b,c[d>>2]|0)|0)){i=c[b+8>>2]|0;qa[c[(c[i>>2]|0)+24>>2]&15](i,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;i=d+44|0;if((c[i>>2]|0)==4)break;f=d+52|0;a[f>>0]=0;j=d+53|0;a[j>>0]=0;b=c[b+8>>2]|0;ra[c[(c[b>>2]|0)+20>>2]&15](b,d,e,e,1,g);if(a[j>>0]|0)if(!(a[f>>0]|0)){f=1;b=11}else b=15;else{f=0;b=11}do if((b|0)==11){c[h>>2]=e;j=d+40|0;c[j>>2]=(c[j>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(f){b=15;break}else{f=4;break}}if(f)b=15;else f=4}while(0);if((b|0)==15)f=3;c[i>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else SB(d,e,f);while(0);return}function YB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(QB(a,c[b+8>>2]|0)|0)RB(b,d,e);else{a=c[a+8>>2]|0;pa[c[(c[a>>2]|0)+28>>2]&15](a,b,d,e)}return}function ZB(a){a=a|0;$A(a);return}function _B(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(QB(b,c[d+8>>2]|0)|0)TB(d,e,f,g);else{n=d+52|0;i=a[n>>0]|0;m=d+53|0;j=a[m>>0]|0;p=c[b+12>>2]|0;l=b+16+(p<<3)|0;a[n>>0]=0;a[m>>0]=0;cC(b+16|0,d,e,f,g,h);a:do if((p|0)>1){o=d+24|0;k=b+8|0;p=d+54|0;b=b+24|0;do{if(a[p>>0]|0)break a;if(!(a[n>>0]|0)){if(a[m>>0]|0?(c[k>>2]&1|0)==0:0)break a}else{if((c[o>>2]|0)==1)break a;if(!(c[k>>2]&2))break a}a[n>>0]=0;a[m>>0]=0;cC(b,d,e,f,g,h);b=b+8|0}while(b>>>0<l>>>0)}while(0);a[n>>0]=i;a[m>>0]=j}return}function $B(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;a:do if(!(QB(b,c[d+8>>2]|0)|0)){if(!(QB(b,c[d>>2]|0)|0)){q=c[b+12>>2]|0;k=b+16+(q<<3)|0;dC(b+16|0,d,e,f,g);h=b+24|0;if((q|0)<=1)break;b=c[b+8>>2]|0;if((b&2|0)==0?(j=d+36|0,(c[j>>2]|0)!=1):0){if(!(b&1)){b=d+54|0;while(1){if(a[b>>0]|0)break a;if((c[j>>2]|0)==1)break a;dC(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+24|0;i=d+54|0;while(1){if(a[i>>0]|0)break a;if((c[j>>2]|0)==1?(c[b>>2]|0)==1:0)break a;dC(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}b=d+54|0;while(1){if(a[b>>0]|0)break a;dC(h,d,e,f,g);h=h+8|0;if(h>>>0>=k>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(q=d+20|0,(c[q>>2]|0)!=(e|0)):0){c[d+32>>2]=f;p=d+44|0;if((c[p>>2]|0)==4)break;k=b+16+(c[b+12>>2]<<3)|0;l=d+52|0;f=d+53|0;o=d+54|0;j=b+8|0;n=d+24|0;m=0;h=0;i=b+16|0;b:while(1){if(i>>>0>=k>>>0){b=18;break}a[l>>0]=0;a[f>>0]=0;cC(i,d,e,e,1,g);if(a[o>>0]|0){b=18;break}do if(a[f>>0]|0){if(!(a[l>>0]|0))if(!(c[j>>2]&1)){h=1;b=18;break b}else{b=m;h=1;break}if((c[n>>2]|0)==1){b=23;break b}if(!(c[j>>2]&2)){b=23;break b}else{b=1;h=1}}else b=m;while(0);m=b;i=i+8|0}do if((b|0)==18){if((!m?(c[q>>2]=e,e=d+40|0,c[e>>2]=(c[e>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[n>>2]|0)==2:0){a[o>>0]=1;if(h){b=23;break}else{h=4;break}}if(h)b=23;else h=4}while(0);if((b|0)==23)h=3;c[p>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else SB(d,e,f);while(0);return}function aC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(QB(b,c[d+8>>2]|0)|0)){h=c[b+12>>2]|0;g=b+16+(h<<3)|0;bC(b+16|0,d,e,f);if((h|0)>1){h=d+54|0;b=b+24|0;do{bC(b,d,e,f);if(a[h>>0]|0)break a;b=b+8|0}while(b>>>0<g>>>0)}}else RB(d,e,f);while(0);return}function bC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=c[a+4>>2]|0;f=g>>8;if(g&1)f=c[(c[d>>2]|0)+f>>2]|0;a=c[a>>2]|0;pa[c[(c[a>>2]|0)+28>>2]&15](a,b,d+f|0,(g&2|0)==0?2:e);return}function cC(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;i=c[a+4>>2]|0;h=i>>8;if(i&1)h=c[(c[e>>2]|0)+h>>2]|0;a=c[a>>2]|0;ra[c[(c[a>>2]|0)+20>>2]&15](a,b,d,e+h|0,(i&2|0)==0?2:f,g);return}function dC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=c[a+4>>2]|0;g=h>>8;if(h&1)g=c[(c[d>>2]|0)+g>>2]|0;a=c[a>>2]|0;qa[c[(c[a>>2]|0)+24>>2]&15](a,b,d+g|0,(h&2|0)==0?2:e,f);return}function eC(){var b=0;if((a[354128]|0)==1)b=0;else{a[354128]=1;b=1}return b|0}function fC(){var a=0;a=c[88676]|0;c[88676]=a+0;return a|0}function gC(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=v(e,f)|0;d=a>>>16;a=(c>>>16)+(v(e,d)|0)|0;e=b>>>16;b=v(e,f)|0;return (y((a>>>16)+(v(e,d)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|c&65535|0)|0}function hC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;c=gC(e,f)|0;a=z()|0;return (y((v(b,f)|0)+(v(d,e)|0)+a|a&0|0),c|0|0)|0}function iC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (y(b+d+(c>>>0<a>>>0|0)>>>0|0),c|0)|0}function jC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (y(d|0),a-c>>>0|0)|0}function kC(a){a=a|0;return (a?31-(w(a^a-1)|0)|0:32)|0}function lC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=d;n=e;i=n;if(!k){g=(f|0)!=0;if(!i){if(g){c[f>>2]=(l>>>0)%(h>>>0);c[f+4>>2]=0}n=0;f=(l>>>0)/(h>>>0)>>>0;return (y(n|0),f)|0}else{if(!g){n=0;f=0;return (y(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (y(n|0),f)|0}}g=(i|0)==0;do if(h){if(!g){g=(w(i|0)|0)-(w(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<<i;b=k>>>(m>>>0)&b;g=0;i=l<<i;break}if(!f){n=0;f=0;return (y(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (y(n|0),f)|0}g=h-1|0;if(g&h|0){i=(w(h|0)|0)+33-(w(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<<m|l>>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<<p&j;i=(k<<p|l>>>(o>>>0))&j|l<<m&i-33>>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (y(o|0),p)|0}else{p=kC(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (y(o|0),p)|0}}else{if(g){if(f|0){c[f>>2]=(k>>>0)%(h>>>0);c[f+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (y(o|0),p)|0}if(!l){if(f|0){c[f>>2]=0;c[f+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (y(o|0),p)|0}g=i-1|0;if(!(g&i)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=g&k|b&0}o=0;p=k>>>((kC(i|0)|0)>>>0);return (y(o|0),p)|0}g=(w(i|0)|0)-(w(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<<i|l>>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<<i;break}if(!f){o=0;p=0;return (y(o|0),p)|0}c[f>>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (y(o|0),p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=iC(m|0,l|0,-1,-1)|0;d=z()|0;j=i;i=0;do{e=j;j=g>>>31|j<<1;g=i|g<<1;e=a<<1|e>>>31|0;n=a>>>31|b<<1|0;jC(k|0,d|0,e|0,n|0)|0;p=z()|0;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=jC(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=z()|0;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(f|0){c[f>>2]=a;c[f+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (y(o|0),p)|0}function mC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return lC(a,b,c,d,0)|0}function nC(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y(b>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}y(((b|0)<0?-1:0)|0);return b>>c-32|0}function oC(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y(b>>>c|0);return a>>>c|(b&(1<<c)-1)<<32-c}y(0);return b>>>c-32|0}function pC(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){y(b<<c|(a&(1<<c)-1<<32-c)>>>32-c|0);return a<<c}y(a<<c-32|0);return 0}function qC(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function rC(a,b,c){a=a|0;b=b|0;c=c|0;b=w(b)|0;if((b|0)==32)b=b+(w(a)|0)|0;y(0);return b|0}function sC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){W(b|0,d|0,e|0)|0;return b|0}h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function tC(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else sC(b,c,d)|0;return b|0}function uC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}f=h&-4|0;i=d|d<<8|d<<16|d<<24;g=f-64|0;while((b|0)<=(g|0)){c[b>>2]=i;c[b+4>>2]=i;c[b+8>>2]=i;c[b+12>>2]=i;c[b+16>>2]=i;c[b+20>>2]=i;c[b+24>>2]=i;c[b+28>>2]=i;c[b+32>>2]=i;c[b+36>>2]=i;c[b+40>>2]=i;c[b+44>>2]=i;c[b+48>>2]=i;c[b+52>>2]=i;c[b+56>>2]=i;c[b+60>>2]=i;b=b+64|0}while((b|0)<(f|0)){c[b>>2]=i;b=b+4|0}}while((b|0)<(h|0)){a[b>>0]=d;b=b+1|0}return h-e|0}function vC(a){a=a|0;var b=0,d=0;d=c[i>>2]|0;b=d+a|0;if((a|0)>0&(b|0)<(d|0)|(b|0)<0){Z(b|0)|0;P(12);return -1}if((b|0)>(V()|0)){if(!(X(b|0)|0)){P(12);return -1}}else c[i>>2]=b;return d|0}function wC(a,b){a=a|0;b=b|0;return ea[a&127](b|0)|0}function xC(a){a=a|0;return A(0,a|0)|0}function yC(a){a=a|0;return A(1,a|0)|0}function zC(a){a=a|0;return A(2,a|0)|0}function AC(a){a=a|0;return A(3,a|0)|0}function BC(a){a=a|0;return A(4,a|0)|0}function CC(a){a=a|0;return A(5,a|0)|0}function DC(a){a=a|0;return A(6,a|0)|0}function EC(a){a=a|0;return A(7,a|0)|0}function FC(a){a=a|0;return A(8,a|0)|0}function GC(a){a=a|0;return A(9,a|0)|0}function HC(a,b,c){a=a|0;b=b|0;c=c|0;return fa[a&511](b|0,c|0)|0}function IC(a,b){a=a|0;b=b|0;return B(0,a|0,b|0)|0}function JC(a,b){a=a|0;b=b|0;return B(1,a|0,b|0)|0}function KC(a,b){a=a|0;b=b|0;return B(2,a|0,b|0)|0}function LC(a,b){a=a|0;b=b|0;return B(3,a|0,b|0)|0}function MC(a,b){a=a|0;b=b|0;return B(4,a|0,b|0)|0}function NC(a,b){a=a|0;b=b|0;return B(5,a|0,b|0)|0}function OC(a,b){a=a|0;b=b|0;return B(6,a|0,b|0)|0}function PC(a,b){a=a|0;b=b|0;return B(7,a|0,b|0)|0}function QC(a,b){a=a|0;b=b|0;return B(8,a|0,b|0)|0}function RC(a,b){a=a|0;b=b|0;return B(9,a|0,b|0)|0}function SC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ga[a&127](b|0,c|0,d|0)|0}function TC(a,b,c){a=a|0;b=b|0;c=c|0;return C(0,a|0,b|0,c|0)|0}function UC(a,b,c){a=a|0;b=b|0;c=c|0;return C(1,a|0,b|0,c|0)|0}function VC(a,b,c){a=a|0;b=b|0;c=c|0;return C(2,a|0,b|0,c|0)|0}function WC(a,b,c){a=a|0;b=b|0;c=c|0;return C(3,a|0,b|0,c|0)|0}function XC(a,b,c){a=a|0;b=b|0;c=c|0;return C(4,a|0,b|0,c|0)|0}function YC(a,b,c){a=a|0;b=b|0;c=c|0;return C(5,a|0,b|0,c|0)|0}function ZC(a,b,c){a=a|0;b=b|0;c=c|0;return C(6,a|0,b|0,c|0)|0}function _C(a,b,c){a=a|0;b=b|0;c=c|0;return C(7,a|0,b|0,c|0)|0}function $C(a,b,c){a=a|0;b=b|0;c=c|0;return C(8,a|0,b|0,c|0)|0}function aD(a,b,c){a=a|0;b=b|0;c=c|0;return C(9,a|0,b|0,c|0)|0}function bD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return ha[a&127](b|0,c|0,d|0,e|0)|0}function cD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(0,a|0,b|0,c|0,d|0)|0}function dD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(1,a|0,b|0,c|0,d|0)|0}function eD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(2,a|0,b|0,c|0,d|0)|0}function fD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(3,a|0,b|0,c|0,d|0)|0}function gD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(4,a|0,b|0,c|0,d|0)|0}function hD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(5,a|0,b|0,c|0,d|0)|0}function iD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(6,a|0,b|0,c|0,d|0)|0}function jD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(7,a|0,b|0,c|0,d|0)|0}function kD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(8,a|0,b|0,c|0,d|0)|0}function lD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return D(9,a|0,b|0,c|0,d|0)|0}function mD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return ia[a&31](b|0,c|0,d|0,e|0,f|0)|0}function nD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(0,a|0,b|0,c|0,d|0,e|0)|0}function oD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(1,a|0,b|0,c|0,d|0,e|0)|0}function pD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(2,a|0,b|0,c|0,d|0,e|0)|0}function qD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(3,a|0,b|0,c|0,d|0,e|0)|0}function rD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(4,a|0,b|0,c|0,d|0,e|0)|0}function sD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(5,a|0,b|0,c|0,d|0,e|0)|0}function tD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(6,a|0,b|0,c|0,d|0,e|0)|0}function uD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(7,a|0,b|0,c|0,d|0,e|0)|0}function vD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(8,a|0,b|0,c|0,d|0,e|0)|0}function wD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return E(9,a|0,b|0,c|0,d|0,e|0)|0}function xD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return ja[a&31](b|0,c|0,d|0,e|0,f|0,g|0)|0}function yD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(0,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(1,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(2,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(3,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(4,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(5,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ED(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(6,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(7,a|0,b|0,c|0,d|0,e|0,f|0)|0}function GD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(8,a|0,b|0,c|0,d|0,e|0,f|0)|0}function HD(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return F(9,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ID(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return ka[a&31](b|0,c|0,d|0,e|0,f|0,g|0,h|0)|0}function JD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function KD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(1,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function LD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(2,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function MD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(3,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function ND(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(4,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function OD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(5,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function PD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(6,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function QD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(7,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function RD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(8,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function SD(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return G(9,a|0,b|0,c|0,d|0,e|0,f|0,g|0)|0}function TD(a){a=a|0;la[a&15]()}function UD(){H(0)}function VD(){H(1)}function WD(){H(2)}function XD(){H(3)}function YD(){H(4)}function ZD(){H(5)}function _D(){H(6)}function $D(){H(7)}function aE(){H(8)}function bE(){H(9)}function cE(a,b){a=a|0;b=b|0;ma[a&255](b|0)}function dE(a){a=a|0;I(0,a|0)}function eE(a){a=a|0;I(1,a|0)}function fE(a){a=a|0;I(2,a|0)}function gE(a){a=a|0;I(3,a|0)}function hE(a){a=a|0;I(4,a|0)}function iE(a){a=a|0;I(5,a|0)}function jE(a){a=a|0;I(6,a|0)}function kE(a){a=a|0;I(7,a|0)}function lE(a){a=a|0;I(8,a|0)}function mE(a){a=a|0;I(9,a|0)}function nE(a,b,c){a=a|0;b=b|0;c=c|0;na[a&31](b|0,c|0)}function oE(a,b){a=a|0;b=b|0;J(0,a|0,b|0)}function pE(a,b){a=a|0;b=b|0;J(1,a|0,b|0)}function qE(a,b){a=a|0;b=b|0;J(2,a|0,b|0)}function rE(a,b){a=a|0;b=b|0;J(3,a|0,b|0)}function sE(a,b){a=a|0;b=b|0;J(4,a|0,b|0)}function tE(a,b){a=a|0;b=b|0;J(5,a|0,b|0)}function uE(a,b){a=a|0;b=b|0;J(6,a|0,b|0)}function vE(a,b){a=a|0;b=b|0;J(7,a|0,b|0)}function wE(a,b){a=a|0;b=b|0;J(8,a|0,b|0)}function xE(a,b){a=a|0;b=b|0;J(9,a|0,b|0)}function yE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;oa[a&15](b|0,c|0,d|0)}function zE(a,b,c){a=a|0;b=b|0;c=c|0;K(0,a|0,b|0,c|0)}function AE(a,b,c){a=a|0;b=b|0;c=c|0;K(1,a|0,b|0,c|0)}function BE(a,b,c){a=a|0;b=b|0;c=c|0;K(2,a|0,b|0,c|0)}function CE(a,b,c){a=a|0;b=b|0;c=c|0;K(3,a|0,b|0,c|0)}function DE(a,b,c){a=a|0;b=b|0;c=c|0;K(4,a|0,b|0,c|0)}function EE(a,b,c){a=a|0;b=b|0;c=c|0;K(5,a|0,b|0,c|0)}function FE(a,b,c){a=a|0;b=b|0;c=c|0;K(6,a|0,b|0,c|0)}function GE(a,b,c){a=a|0;b=b|0;c=c|0;K(7,a|0,b|0,c|0)}function HE(a,b,c){a=a|0;b=b|0;c=c|0;K(8,a|0,b|0,c|0)}function IE(a,b,c){a=a|0;b=b|0;c=c|0;K(9,a|0,b|0,c|0)}function JE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;pa[a&15](b|0,c|0,d|0,e|0)}function KE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(0,a|0,b|0,c|0,d|0)}function LE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(1,a|0,b|0,c|0,d|0)}function ME(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(2,a|0,b|0,c|0,d|0)}function NE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(3,a|0,b|0,c|0,d|0)}function OE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(4,a|0,b|0,c|0,d|0)}function PE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(5,a|0,b|0,c|0,d|0)}function QE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(6,a|0,b|0,c|0,d|0)}function RE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(7,a|0,b|0,c|0,d|0)}function SE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(8,a|0,b|0,c|0,d|0)}function TE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;L(9,a|0,b|0,c|0,d|0)}function UE(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;qa[a&15](b|0,c|0,d|0,e|0,f|0)}function VE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(0,a|0,b|0,c|0,d|0,e|0)}function WE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(1,a|0,b|0,c|0,d|0,e|0)}function XE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(2,a|0,b|0,c|0,d|0,e|0)}function YE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(3,a|0,b|0,c|0,d|0,e|0)}function ZE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(4,a|0,b|0,c|0,d|0,e|0)}function _E(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(5,a|0,b|0,c|0,d|0,e|0)}function $E(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(6,a|0,b|0,c|0,d|0,e|0)}function aF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(7,a|0,b|0,c|0,d|0,e|0)}function bF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(8,a|0,b|0,c|0,d|0,e|0)}function cF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;M(9,a|0,b|0,c|0,d|0,e|0)}function dF(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;ra[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function eF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(0,a|0,b|0,c|0,d|0,e|0,f|0)}function fF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(1,a|0,b|0,c|0,d|0,e|0,f|0)}function gF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(2,a|0,b|0,c|0,d|0,e|0,f|0)}function hF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(3,a|0,b|0,c|0,d|0,e|0,f|0)}function iF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(4,a|0,b|0,c|0,d|0,e|0,f|0)}function jF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(5,a|0,b|0,c|0,d|0,e|0,f|0)}function kF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(6,a|0,b|0,c|0,d|0,e|0,f|0)}function lF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(7,a|0,b|0,c|0,d|0,e|0,f|0)}function mF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(8,a|0,b|0,c|0,d|0,e|0,f|0)}function nF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;N(9,a|0,b|0,c|0,d|0,e|0,f|0)}function oF(a){a=a|0;x(0);return 0}function pF(a,b){a=a|0;b=b|0;x(1);return 0}function qF(a,b,c){a=a|0;b=b|0;c=c|0;x(2);return 0}function rF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;x(3);return 0}function sF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;x(4);return 0}function tF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x(5);return 0}function uF(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;x(6);return 0}function vF(){x(7)}function wF(a){a=a|0;x(8)}function xF(a,b){a=a|0;b=b|0;x(9)}function yF(a,b,c){a=a|0;b=b|0;c=c|0;x(10)}function zF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;x(11)}function AF(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;x(12)}function BF(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;x(13)} + +// EMSCRIPTEN_END_FUNCS +var ea=[oF,xC,yC,zC,AC,BC,CC,DC,EC,FC,GC,Uc,Xc,$c,id,md,qd,ud,Bd,Fd,Id,Pd,le,oe,pe,qe,re,Fe,He,Ie,Ke,Le,Se,Te,Ue,Ve,We,Ze,df,ff,tf,Bf,Ef,Pf,Tf,Yf,mg,qg,xj,Dj,Vm,$m,Mm,Sm,wo,Co,no,to,Br,yr,vr,wu,zu,Du,Mu,Qu,Uu,Yu,dv,hv,kv,rv,Pv,Sv,Tv,Uv,Vv,hw,jw,kw,mw,nw,uw,vw,ww,xw,yw,Bw,Hw,Jw,Ww,cx,fx,qx,ux,zx,Px,Tx,Mz,zq,tq,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF,oF];var fa=[pF,IC,JC,KC,LC,MC,NC,OC,PC,QC,RC,Db,Eb,Fb,Gb,Hb,Ib,Jb,Kb,Lb,Mb,Nb,Ob,Pb,Qb,Rb,Sb,Tb,Ub,Vb,Wb,Xb,Yb,Zb,_b,$b,ac,bc,cc,dc,ec,fc,gc,hc,ic,jc,kc,lc,mc,nc,oc,pc,qc,rc,sc,tc,uc,vc,wc,xc,yc,zc,Ac,Bc,Cc,Dc,Ec,Fc,Gc,Hc,Ic,Jc,Kc,Rc,Tc,Yc,Zc,ad,bd,jd,kd,nd,od,rd,sd,vd,wd,yd,zd,Ad,Cd,Dd,Gd,Hd,Jd,Kd,Md,Od,Qd,Rd,Vd,Xd,Yd,de,ee,fe,ge,je,me,ne,se,ue,ve,we,xe,ze,Be,Ce,De,Ee,Ge,Je,Me,Ne,Oe,Pe,Qe,Re,Xe,$e,af,bf,cf,ef,kf,lf,nf,of,qf,sf,uf,vf,xf,yf,Af,Cf,Df,Ff,Hf,Jf,Mf,Qf,Uf,Wf,Xf,Zf,_f,fg,hg,jg,ng,og,Bj,Cj,_j,$j,ak,bk,ck,dk,ek,fk,gk,hk,ik,jk,kk,lk,mk,nk,ok,pk,qk,rk,sk,tk,uk,vk,wk,xk,yk,zk,Ak,Bk,cn,dn,en,fn,gn,hn,jn,kn,ln,mn,nn,on,pn,qn,rn,sn,tn,un,vn,wn,xn,yn,zn,An,Bn,Cn,Dn,En,Fn,Gn,_m,Rm,Fo,Go,Ho,Io,Jo,Ko,Lo,Mo,No,Oo,Po,Qo,Ro,So,To,Uo,Vo,Wo,Xo,Yo,Zo,_o,$o,ap,bp,cp,dp,ep,fp,gp,hp,ip,jp,kp,lp,mp,np,op,pp,qp,rp,sp,tp,up,vp,wp,xp,yp,zp,Ap,Bp,Cp,Dp,Ep,Fp,Gp,Hp,Ip,Jp,Kp,Lp,Mp,Bo,so,Vq,Wq,Xq,Yq,Zq,_q,Ps,Qs,Rs,Ss,Ts,Us,Vs,Ws,Xs,Ys,Zs,_s,$s,at,bt,ct,dt,et,ft,gt,ht,it,jt,kt,lt,mt,nt,ot,pt,qt,rt,st,tt,ut,vt,wt,xt,yt,zt,At,Bt,Ct,Dt,Et,Ft,Gt,Ht,It,Jt,Kt,Lt,Mt,Nt,Ot,Pt,Qt,Rt,St,Tt,Ut,Vt,Wt,tu,vu,Au,Bu,Eu,Fu,Nu,Ou,Ru,Su,Vu,Wu,Zu,_u,av,bv,cv,ev,fv,iv,jv,lv,mv,ov,qv,sv,tv,xv,zv,Av,Hv,Iv,Jv,Kv,Nv,Qv,Rv,Wv,Yv,Zv,_v,$v,bw,dw,ew,fw,gw,iw,lw,ow,pw,qw,rw,sw,tw,zw,Dw,Ew,Fw,Gw,Iw,Nw,Ow,Qw,Rw,Tw,Vw,Xw,Yw,_w,$w,bx,dx,ex,gx,ix,kx,nx,rx,vx,xx,yx,Ax,Bx,Ix,Kx,Mx,Qx,Rx,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF,pF];var ga=[qF,TC,UC,VC,WC,XC,YC,ZC,_C,$C,aD,Wc,ld,td,Ld,Sd,Td,Ud,Wd,he,ke,te,ye,Ye,hf,pf,rf,Kf,Nf,Rf,ig,lg,pg,rg,tg,ug,vg,yu,Pu,Xu,nv,uv,vv,wv,yv,Lv,Ov,Xv,aw,Aw,Lw,Sw,Uw,lx,ox,sx,Lx,Ox,Sx,Ux,Wx,Xx,Yx,Rz,Nz,uA,MB,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF,qF];var ha=[rF,cD,dD,eD,fD,gD,hD,iD,jD,kD,lD,Vc,cd,pd,xd,Nd,Zd,_d,$d,ae,be,ce,ie,Ae,_e,gf,jf,wf,zf,Gf,If,Lf,Of,$f,dg,kg,sg,wg,Kn,Ln,xu,Gu,Tu,$u,pv,Bv,Cv,Dv,Ev,Fv,Gv,Mv,cw,Cw,Kw,Mw,Zw,ax,hx,jx,mx,px,Cx,Gx,Nx,Vx,Zx,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF,rF];var ia=[sF,nD,oD,pD,qD,rD,sD,tD,uD,vD,wD,Ed,mf,Sf,Vf,bg,cg,eg,gg,gv,Pw,tx,wx,Ex,Fx,Hx,Jx,sF,sF,sF,sF,sF];var ja=[tF,yD,zD,AD,BD,CD,DD,ED,FD,GD,HD,_c,dd,fd,hd,Cu,Hu,Ju,Lu,tF,tF,tF,tF,tF,tF,tF,tF,tF,tF,tF,tF,tF];var ka=[uF,JD,KD,LD,MD,ND,OD,PD,QD,RD,SD,ed,gd,ag,Iu,Ku,Dx,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF,uF];var la=[vF,UD,VD,WD,XD,YD,ZD,_D,$D,aE,bE,vF,vF,vF,vF,vF];var ma=[wF,dE,eE,fE,gE,hE,iE,jE,kE,lE,mE,Bb,Cb,Pc,Qc,xg,yg,zg,Ag,Cg,Dg,Pg,Qg,Ug,Vg,Wg,Xg,Yg,Zg,_g,$g,ch,dh,eh,fh,gh,hh,ih,jh,kh,lh,mh,nh,oh,ph,qh,rh,sh,th,uh,vh,wh,xh,yh,zh,Ah,Bh,Ch,Dh,Eh,Fh,Gh,Hh,Ih,Jh,Kh,Lh,Mh,Nh,Oh,Ph,Qh,Rh,Sh,Th,Uh,Vh,Wh,Xh,Yh,Zh,_h,$h,ai,bi,ci,di,fi,gi,hi,ii,ji,ki,li,mi,ni,oi,pi,qi,ri,si,ti,ui,vi,xi,yi,zi,Ai,Bi,Ci,Di,Ei,Fi,Gi,Hi,Ii,Mi,Ni,Ki,Li,Oi,Pi,Qi,Ri,Si,Ti,Ui,Vi,Wi,Xi,Yi,Zi,vj,wj,zj,Aj,Yj,Zj,an,bn,Km,Um,Xm,Ym,Lm,Om,Pm,In,Jn,Do,Eo,uo,vo,yo,zo,mo,po,qo,Qp,Uq,rr,sr,zr,Ar,wr,xr,tr,ur,_r,$r,Rr,Sr,Ur,Zr,Xr,Yr,Vr,as,bs,es,fs,cs,ds,gs,hs,is,js,ks,ls,ms,ns,os,ps,qs,rs,Os,ru,su,IB,JB,KB,LB,VB,ZB,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF,wF];var na=[xF,oE,pE,qE,rE,sE,tE,uE,vE,wE,xE,Sc,yj,Wm,Nm,xo,Ao,oo,uu,xF,xF,xF,xF,xF,xF,xF,xF,xF,xF,xF,xF,xF];var oa=[yF,zE,AE,BE,CE,DE,EE,FE,GE,HE,IE,Zm,Qm,ro,yF,yF];var pa=[zF,KE,LE,ME,NE,OE,PE,QE,RE,SE,TE,PB,YB,aC,zF,zF];var qa=[AF,VE,WE,XE,YE,ZE,_E,$E,aF,bF,cF,OB,XB,$B,AF,AF];var ra=[BF,eF,fF,gF,hF,iF,jF,kF,lF,mF,nF,NB,WB,_B,BF,BF];return{___emscripten_environ_constructor:WA,___errno_location:Pz,___muldi3:hC,___udivdi3:mC,__get_environ:XA,_bitshift64Ashr:nC,_bitshift64Lshr:oC,_bitshift64Shl:pC,_dummy_workaround_for_emscripten_issue_7073:yb,_emscripten_replace_memory:da,_free:VA,_i64Add:iC,_i64Subtract:jC,_llvm_bswap_i32:qC,_llvm_ctlz_i64:rC,_malloc:UA,_memcpy:sC,_memmove:tC,_memset:uC,_sbrk:vC,_wabt_apply_names_module:_a,_wabt_bulk_memory_enabled:Oa,_wabt_destroy_errors:ib,_wabt_destroy_features:xa,_wabt_destroy_module:cb,_wabt_destroy_output_buffer:xb,_wabt_destroy_parse_wat_result:lb,_wabt_destroy_read_binary_result:qb,_wabt_destroy_wast_lexer:eb,_wabt_destroy_write_module_result:ub,_wabt_exceptions_enabled:ya,_wabt_format_binary_errors:hb,_wabt_format_text_errors:gb,_wabt_generate_names_module:$a,_wabt_multi_value_enabled:Ka,_wabt_mutable_globals_enabled:Aa,_wabt_new_errors:fb,_wabt_new_features:wa,_wabt_new_wast_buffer_lexer:Sa,_wabt_output_buffer_get_data:vb,_wabt_output_buffer_get_size:wb,_wabt_parse_wast:Ua,_wabt_parse_wast_result_get_result:mb,_wabt_parse_wast_result_release_module:nb,_wabt_parse_wat:Ta,_wabt_parse_wat_result_get_result:jb,_wabt_parse_wat_result_release_module:kb,_wabt_read_binary:Va,_wabt_read_binary_result_get_result:ob,_wabt_read_binary_result_release_module:pb,_wabt_reference_types_enabled:Qa,_wabt_resolve_names_module:Wa,_wabt_sat_float_to_int_enabled:Ca,_wabt_set_bulk_memory_enabled:Pa,_wabt_set_exceptions_enabled:za,_wabt_set_multi_value_enabled:La,_wabt_set_mutable_globals_enabled:Ba,_wabt_set_reference_types_enabled:Ra,_wabt_set_sat_float_to_int_enabled:Da,_wabt_set_sign_extension_enabled:Fa,_wabt_set_simd_enabled:Ha,_wabt_set_tail_call_enabled:Na,_wabt_set_threads_enabled:Ja,_wabt_sign_extension_enabled:Ea,_wabt_simd_enabled:Ga,_wabt_tail_call_enabled:Ma,_wabt_threads_enabled:Ia,_wabt_validate_module:Xa,_wabt_validate_script:Ya,_wabt_write_binary_module:ab,_wabt_write_binary_spec_script:Za,_wabt_write_module_result_get_result:rb,_wabt_write_module_result_release_log_output_buffer:tb,_wabt_write_module_result_release_output_buffer:sb,_wabt_write_text_module:bb,dynCall_ii:wC,dynCall_iii:HC,dynCall_iiii:SC,dynCall_iiiii:bD,dynCall_iiiiii:mD,dynCall_iiiiiii:xD,dynCall_iiiiiiii:ID,dynCall_v:TD,dynCall_vi:cE,dynCall_vii:nE,dynCall_viii:yE,dynCall_viiii:JE,dynCall_viiiii:UE,dynCall_viiiiii:dF,establishStackSpace:va,stackAlloc:sa,stackRestore:ua,stackSave:ta}}) + + +// EMSCRIPTEN_END_ASM +(asmGlobalArg,asmLibraryArg,buffer);var ___emscripten_environ_constructor=Module["___emscripten_environ_constructor"]=asm["___emscripten_environ_constructor"];var ___errno_location=Module["___errno_location"]=asm["___errno_location"];var ___muldi3=Module["___muldi3"]=asm["___muldi3"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var __get_environ=Module["__get_environ"]=asm["__get_environ"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _dummy_workaround_for_emscripten_issue_7073=Module["_dummy_workaround_for_emscripten_issue_7073"]=asm["_dummy_workaround_for_emscripten_issue_7073"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var _free=Module["_free"]=asm["_free"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var _llvm_ctlz_i64=Module["_llvm_ctlz_i64"]=asm["_llvm_ctlz_i64"];var _malloc=Module["_malloc"]=asm["_malloc"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _memmove=Module["_memmove"]=asm["_memmove"];var _memset=Module["_memset"]=asm["_memset"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _wabt_apply_names_module=Module["_wabt_apply_names_module"]=asm["_wabt_apply_names_module"];var _wabt_bulk_memory_enabled=Module["_wabt_bulk_memory_enabled"]=asm["_wabt_bulk_memory_enabled"];var _wabt_destroy_errors=Module["_wabt_destroy_errors"]=asm["_wabt_destroy_errors"];var _wabt_destroy_features=Module["_wabt_destroy_features"]=asm["_wabt_destroy_features"];var _wabt_destroy_module=Module["_wabt_destroy_module"]=asm["_wabt_destroy_module"];var _wabt_destroy_output_buffer=Module["_wabt_destroy_output_buffer"]=asm["_wabt_destroy_output_buffer"];var _wabt_destroy_parse_wat_result=Module["_wabt_destroy_parse_wat_result"]=asm["_wabt_destroy_parse_wat_result"];var _wabt_destroy_read_binary_result=Module["_wabt_destroy_read_binary_result"]=asm["_wabt_destroy_read_binary_result"];var _wabt_destroy_wast_lexer=Module["_wabt_destroy_wast_lexer"]=asm["_wabt_destroy_wast_lexer"];var _wabt_destroy_write_module_result=Module["_wabt_destroy_write_module_result"]=asm["_wabt_destroy_write_module_result"];var _wabt_exceptions_enabled=Module["_wabt_exceptions_enabled"]=asm["_wabt_exceptions_enabled"];var _wabt_format_binary_errors=Module["_wabt_format_binary_errors"]=asm["_wabt_format_binary_errors"];var _wabt_format_text_errors=Module["_wabt_format_text_errors"]=asm["_wabt_format_text_errors"];var _wabt_generate_names_module=Module["_wabt_generate_names_module"]=asm["_wabt_generate_names_module"];var _wabt_multi_value_enabled=Module["_wabt_multi_value_enabled"]=asm["_wabt_multi_value_enabled"];var _wabt_mutable_globals_enabled=Module["_wabt_mutable_globals_enabled"]=asm["_wabt_mutable_globals_enabled"];var _wabt_new_errors=Module["_wabt_new_errors"]=asm["_wabt_new_errors"];var _wabt_new_features=Module["_wabt_new_features"]=asm["_wabt_new_features"];var _wabt_new_wast_buffer_lexer=Module["_wabt_new_wast_buffer_lexer"]=asm["_wabt_new_wast_buffer_lexer"];var _wabt_output_buffer_get_data=Module["_wabt_output_buffer_get_data"]=asm["_wabt_output_buffer_get_data"];var _wabt_output_buffer_get_size=Module["_wabt_output_buffer_get_size"]=asm["_wabt_output_buffer_get_size"];var _wabt_parse_wast=Module["_wabt_parse_wast"]=asm["_wabt_parse_wast"];var _wabt_parse_wast_result_get_result=Module["_wabt_parse_wast_result_get_result"]=asm["_wabt_parse_wast_result_get_result"];var _wabt_parse_wast_result_release_module=Module["_wabt_parse_wast_result_release_module"]=asm["_wabt_parse_wast_result_release_module"];var _wabt_parse_wat=Module["_wabt_parse_wat"]=asm["_wabt_parse_wat"];var _wabt_parse_wat_result_get_result=Module["_wabt_parse_wat_result_get_result"]=asm["_wabt_parse_wat_result_get_result"];var _wabt_parse_wat_result_release_module=Module["_wabt_parse_wat_result_release_module"]=asm["_wabt_parse_wat_result_release_module"];var _wabt_read_binary=Module["_wabt_read_binary"]=asm["_wabt_read_binary"];var _wabt_read_binary_result_get_result=Module["_wabt_read_binary_result_get_result"]=asm["_wabt_read_binary_result_get_result"];var _wabt_read_binary_result_release_module=Module["_wabt_read_binary_result_release_module"]=asm["_wabt_read_binary_result_release_module"];var _wabt_reference_types_enabled=Module["_wabt_reference_types_enabled"]=asm["_wabt_reference_types_enabled"];var _wabt_resolve_names_module=Module["_wabt_resolve_names_module"]=asm["_wabt_resolve_names_module"];var _wabt_sat_float_to_int_enabled=Module["_wabt_sat_float_to_int_enabled"]=asm["_wabt_sat_float_to_int_enabled"];var _wabt_set_bulk_memory_enabled=Module["_wabt_set_bulk_memory_enabled"]=asm["_wabt_set_bulk_memory_enabled"];var _wabt_set_exceptions_enabled=Module["_wabt_set_exceptions_enabled"]=asm["_wabt_set_exceptions_enabled"];var _wabt_set_multi_value_enabled=Module["_wabt_set_multi_value_enabled"]=asm["_wabt_set_multi_value_enabled"];var _wabt_set_mutable_globals_enabled=Module["_wabt_set_mutable_globals_enabled"]=asm["_wabt_set_mutable_globals_enabled"];var _wabt_set_reference_types_enabled=Module["_wabt_set_reference_types_enabled"]=asm["_wabt_set_reference_types_enabled"];var _wabt_set_sat_float_to_int_enabled=Module["_wabt_set_sat_float_to_int_enabled"]=asm["_wabt_set_sat_float_to_int_enabled"];var _wabt_set_sign_extension_enabled=Module["_wabt_set_sign_extension_enabled"]=asm["_wabt_set_sign_extension_enabled"];var _wabt_set_simd_enabled=Module["_wabt_set_simd_enabled"]=asm["_wabt_set_simd_enabled"];var _wabt_set_tail_call_enabled=Module["_wabt_set_tail_call_enabled"]=asm["_wabt_set_tail_call_enabled"];var _wabt_set_threads_enabled=Module["_wabt_set_threads_enabled"]=asm["_wabt_set_threads_enabled"];var _wabt_sign_extension_enabled=Module["_wabt_sign_extension_enabled"]=asm["_wabt_sign_extension_enabled"];var _wabt_simd_enabled=Module["_wabt_simd_enabled"]=asm["_wabt_simd_enabled"];var _wabt_tail_call_enabled=Module["_wabt_tail_call_enabled"]=asm["_wabt_tail_call_enabled"];var _wabt_threads_enabled=Module["_wabt_threads_enabled"]=asm["_wabt_threads_enabled"];var _wabt_validate_module=Module["_wabt_validate_module"]=asm["_wabt_validate_module"];var _wabt_validate_script=Module["_wabt_validate_script"]=asm["_wabt_validate_script"];var _wabt_write_binary_module=Module["_wabt_write_binary_module"]=asm["_wabt_write_binary_module"];var _wabt_write_binary_spec_script=Module["_wabt_write_binary_spec_script"]=asm["_wabt_write_binary_spec_script"];var _wabt_write_module_result_get_result=Module["_wabt_write_module_result_get_result"]=asm["_wabt_write_module_result_get_result"];var _wabt_write_module_result_release_log_output_buffer=Module["_wabt_write_module_result_release_log_output_buffer"]=asm["_wabt_write_module_result_release_log_output_buffer"];var _wabt_write_module_result_release_output_buffer=Module["_wabt_write_module_result_release_output_buffer"]=asm["_wabt_write_module_result_release_output_buffer"];var _wabt_write_text_module=Module["_wabt_write_text_module"]=asm["_wabt_write_text_module"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var stackSave=Module["stackSave"]=asm["stackSave"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_iiiii=Module["dynCall_iiiii"]=asm["dynCall_iiiii"];var dynCall_iiiiii=Module["dynCall_iiiiii"]=asm["dynCall_iiiiii"];var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=asm["dynCall_iiiiiii"];var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=asm["dynCall_iiiiiiii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];Module["asm"]=asm;if(memoryInitializer){if(!isDataURI(memoryInitializer)){memoryInitializer=locateFile(memoryInitializer)}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,GLOBAL_BASE)}else{addRunDependency("memory initializer");var applyMemoryInitializer=function(data){if(data.byteLength)data=new Uint8Array(data);HEAPU8.set(data,GLOBAL_BASE);if(Module["memoryInitializerRequest"])delete Module["memoryInitializerRequest"].response;removeRunDependency("memory initializer")};var doBrowserLoad=function(){Module["readAsync"](memoryInitializer,applyMemoryInitializer,function(){throw"could not load memory initializer "+memoryInitializer})};var memoryInitializerBytes=tryParseAsDataURI(memoryInitializer);if(memoryInitializerBytes){applyMemoryInitializer(memoryInitializerBytes.buffer)}else if(Module["memoryInitializerRequest"]){var useRequest=function(){var request=Module["memoryInitializerRequest"];var response=request.response;if(request.status!==200&&request.status!==0){var data=tryParseAsDataURI(Module["memoryInitializerRequestURL"]);if(data){response=data.buffer}else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+request.status+", retrying "+memoryInitializer);doBrowserLoad();return}}applyMemoryInitializer(response)};if(Module["memoryInitializerRequest"].response){setTimeout(useRequest,0)}else{Module["memoryInitializerRequest"].addEventListener("load",useRequest)}}else{doBrowserLoad()}}}Module["then"]=function(func){if(Module["calledRun"]){func(Module)}else{var old=Module["onRuntimeInitialized"];Module["onRuntimeInitialized"]=function(){if(old)old();func(Module)}}return Module};function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};function run(args){args=args||Module["arguments"];if(runDependencies>0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;throw"abort("+what+"). Build with -s ASSERTIONS=1 for more info."}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run();var WABT_OK=0;var FEATURES=["exceptions","mutable_globals","sat_float_to_int","sign_extension","simd","threads","multi_value","tail_call","bulk_memory","reference_types"];function maybeDefault(value,default_){if(value===undefined){return default_}return value}function booleanOrDefault(value,default_){return!!maybeDefault(value,default_)}function malloc(size){var addr=Module._malloc(size);if(addr==0){throw new Error("out of memory")}return addr}function allocateBuffer(buf){var addr;var size;if(buf instanceof ArrayBuffer){size=buf.byteLength;addr=malloc(size);new Uint8Array(HEAP8.buffer,addr,size).set(new Uint8Array(buf))}else if(ArrayBuffer.isView(buf)){size=buf.buffer.byteLength;addr=malloc(size);new Uint8Array(HEAP8.buffer,addr,size).set(buf)}else if(typeof buf=="string"){size=buf.length;addr=malloc(size);writeAsciiToMemory(buf,addr,true)}else{throw new Error("unknown buffer type: "+buf)}return{addr:addr,size:size}}function allocateCString(s){var size=s.length;var addr=malloc(size);writeAsciiToMemory(s,addr);return{addr:addr,size:size}}function Features(obj){this.addr=Module._wabt_new_features();for(var i=0;i<FEATURES.length;++i){var feature=FEATURES[i];this[feature]=obj[feature]|0}}Features.prototype=Object.create(Object.prototype);Features.prototype.destroy=function(){Module._wabt_destroy_features(this.addr)};FEATURES.forEach(function(feature){Object.defineProperty(Features.prototype,feature,{enumerable:true,get:function(){return Module["_wabt_"+feature+"_enabled"](this.addr)},set:function(newValue){Module["_wabt_set_"+feature+"_enabled"](this.addr,newValue|0)}})});function Lexer(filename,buffer){this.filenameObj=allocateCString(filename);this.bufferObj=allocateBuffer(buffer);this.addr=Module._wabt_new_wast_buffer_lexer(this.filenameObj.addr,this.bufferObj.addr,this.bufferObj.size)}Lexer.prototype=Object.create(Object.prototype);Lexer.prototype.destroy=function(){Module._wabt_destroy_wast_lexer(this.addr);Module._free(this.bufferObj.addr);Module._free(this.filenameObj.addr)};function OutputBuffer(addr){this.addr=addr}OutputBuffer.prototype=Object.create(Object.prototype);OutputBuffer.prototype.toTypedArray=function(){if(!this.addr){return null}var addr=Module._wabt_output_buffer_get_data(this.addr);var size=Module._wabt_output_buffer_get_size(this.addr);var buffer=new Uint8Array(size);buffer.set(new Uint8Array(HEAPU8.buffer,addr,size));return buffer};OutputBuffer.prototype.toString=function(){if(!this.addr){return""}var addr=Module._wabt_output_buffer_get_data(this.addr);var size=Module._wabt_output_buffer_get_size(this.addr);return UTF8ToString(addr,size)};OutputBuffer.prototype.destroy=function(){Module._wabt_destroy_output_buffer(this.addr)};function Errors(kind,lexer){this.kind=kind;this.addr=Module._wabt_new_errors();this.lexer=lexer}Errors.prototype=Object.create(Object.prototype);Errors.prototype.format=function(){var buffer;switch(this.kind){case"text":buffer=new OutputBuffer(Module._wabt_format_text_errors(this.addr,this.lexer.addr));break;case"binary":buffer=new OutputBuffer(Module._wabt_format_binary_errors(this.addr));break;default:throw new Error("Invalid Errors kind: "+this.kind)}var message=buffer.toString();buffer.destroy();return message};Errors.prototype.destroy=function(){Module._wabt_destroy_errors(this.addr);if(this.lexer){this.lexer.destroy()}};function parseWat(filename,buffer,options){var lexer=new Lexer(filename,buffer);var errors=new Errors("text",lexer);var features=new Features(options||{});try{var parseResult_addr=Module._wabt_parse_wat(lexer.addr,features.addr,errors.addr);var result=Module._wabt_parse_wat_result_get_result(parseResult_addr);if(result!==WABT_OK){throw new Error("parseWat failed:\n"+errors.format())}var module_addr=Module._wabt_parse_wat_result_release_module(parseResult_addr);var result=new WasmModule(module_addr,errors);errors=null;return result}finally{Module._wabt_destroy_parse_wat_result(parseResult_addr);features.destroy();if(errors){errors.destroy()}}}function readWasm(buffer,options){var bufferObj=allocateBuffer(buffer);var errors=new Errors("binary");var readDebugNames=booleanOrDefault(options.readDebugNames,false);var features=new Features(options);try{var readBinaryResult_addr=Module._wabt_read_binary(bufferObj.addr,bufferObj.size,readDebugNames,features.addr,errors.addr);var result=Module._wabt_read_binary_result_get_result(readBinaryResult_addr);if(result!==WABT_OK){throw new Error("readWasm failed:\n"+errors.format())}var module_addr=Module._wabt_read_binary_result_release_module(readBinaryResult_addr);var result=new WasmModule(module_addr,errors);errors=null;return result}finally{Module._wabt_destroy_read_binary_result(readBinaryResult_addr);features.destroy();if(errors){errors.destroy()}Module._free(bufferObj.addr)}}function WasmModule(module_addr,errors){this.module_addr=module_addr;this.errors=errors}WasmModule.prototype=Object.create(Object.prototype);WasmModule.prototype.validate=function(options){var features=new Features(options||{});try{var result=Module._wabt_validate_module(this.module_addr,features.addr,this.errors.addr);if(result!==WABT_OK){throw new Error("validate failed:\n"+this.errors.format())}}finally{features.destroy()}};WasmModule.prototype.resolveNames=function(){var result=Module._wabt_resolve_names_module(this.module_addr,this.errors.addr);if(result!==WABT_OK){throw new Error("resolveNames failed:\n"+this.errors.format())}};WasmModule.prototype.generateNames=function(){var result=Module._wabt_generate_names_module(this.module_addr);if(result!==WABT_OK){throw new Error("generateNames failed.")}};WasmModule.prototype.applyNames=function(){var result=Module._wabt_apply_names_module(this.module_addr);if(result!==WABT_OK){throw new Error("applyNames failed.")}};WasmModule.prototype.toText=function(options){var foldExprs=booleanOrDefault(options.foldExprs,false);var inlineExport=booleanOrDefault(options.inlineExport,false);var writeModuleResult_addr=Module._wabt_write_text_module(this.module_addr,foldExprs,inlineExport);var result=Module._wabt_write_module_result_get_result(writeModuleResult_addr);try{if(result!==WABT_OK){throw new Error("toText failed.")}var outputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_output_buffer(writeModuleResult_addr));return outputBuffer.toString()}finally{if(outputBuffer){outputBuffer.destroy()}Module._wabt_destroy_write_module_result(writeModuleResult_addr)}};WasmModule.prototype.toBinary=function(options){var log=booleanOrDefault(options.log,false);var canonicalize_lebs=booleanOrDefault(options.canonicalize_lebs,true);var relocatable=booleanOrDefault(options.relocatable,false);var write_debug_names=booleanOrDefault(options.write_debug_names,false);var writeModuleResult_addr=Module._wabt_write_binary_module(this.module_addr,log,canonicalize_lebs,relocatable,write_debug_names);var result=Module._wabt_write_module_result_get_result(writeModuleResult_addr);try{if(result!==WABT_OK){throw new Error("toBinary failed.")}var binaryOutputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_output_buffer(writeModuleResult_addr));var logOutputBuffer=new OutputBuffer(Module._wabt_write_module_result_release_log_output_buffer(writeModuleResult_addr));return{buffer:binaryOutputBuffer.toTypedArray(),log:logOutputBuffer.toString()}}finally{if(binaryOutputBuffer){binaryOutputBuffer.destroy()}if(logOutputBuffer){logOutputBuffer.destroy()}Module._wabt_destroy_write_module_result(writeModuleResult_addr)}};WasmModule.prototype.destroy=function(){Module._wabt_destroy_module(this.module_addr);if(this.errors){this.errors.destroy()}};Module["parseWat"]=parseWat;Module["readWasm"]=readWasm; + + + + return WabtModule; +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = WabtModule; + else if (typeof define === 'function' && define['amd']) + define([], function() { return WabtModule; }); + else if (typeof exports === 'object') + exports["WabtModule"] = WabtModule; +
\ No newline at end of file diff --git a/docs/demo/third_party/codemirror/LICENSE b/docs/demo/third_party/codemirror/LICENSE new file mode 100644 index 00000000..ff7db4b9 --- /dev/null +++ b/docs/demo/third_party/codemirror/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/docs/demo/third_party/codemirror/codemirror.css b/docs/demo/third_party/codemirror/codemirror.css new file mode 100644 index 00000000..b962b383 --- /dev/null +++ b/docs/demo/third_party/codemirror/codemirror.css @@ -0,0 +1,340 @@ +/* BASICS */ + +.CodeMirror { + /* Set height, width, borders, and global font properties here */ + font-family: monospace; + height: 300px; + color: black; +} + +/* PADDING */ + +.CodeMirror-lines { + padding: 4px 0; /* Vertical padding around content */ +} +.CodeMirror pre { + padding: 0 4px; /* Horizontal padding of content */ +} + +.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + background-color: white; /* The little square between H and V scrollbars */ +} + +/* GUTTER */ + +.CodeMirror-gutters { + border-right: 1px solid #ddd; + background-color: #f7f7f7; + white-space: nowrap; +} +.CodeMirror-linenumbers {} +.CodeMirror-linenumber { + padding: 0 3px 0 5px; + min-width: 20px; + text-align: right; + color: #999; + white-space: nowrap; +} + +.CodeMirror-guttermarker { color: black; } +.CodeMirror-guttermarker-subtle { color: #999; } + +/* CURSOR */ + +.CodeMirror-cursor { + border-left: 1px solid black; + border-right: none; + width: 0; +} +/* Shown when moving in bi-directional text */ +.CodeMirror div.CodeMirror-secondarycursor { + border-left: 1px solid silver; +} +.cm-fat-cursor .CodeMirror-cursor { + width: auto; + border: 0 !important; + background: #7e7; +} +.cm-fat-cursor div.CodeMirror-cursors { + z-index: 1; +} + +.cm-animate-fat-cursor { + width: auto; + border: 0; + -webkit-animation: blink 1.06s steps(1) infinite; + -moz-animation: blink 1.06s steps(1) infinite; + animation: blink 1.06s steps(1) infinite; + background-color: #7e7; +} +@-moz-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@-webkit-keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} +@keyframes blink { + 0% {} + 50% { background-color: transparent; } + 100% {} +} + +/* Can style cursor different in overwrite (non-insert) mode */ +.CodeMirror-overwrite .CodeMirror-cursor {} + +.cm-tab { display: inline-block; text-decoration: inherit; } + +.CodeMirror-rulers { + position: absolute; + left: 0; right: 0; top: -50px; bottom: -20px; + overflow: hidden; +} +.CodeMirror-ruler { + border-left: 1px solid #ccc; + top: 0; bottom: 0; + position: absolute; +} + +/* DEFAULT THEME */ + +.cm-s-default .cm-header {color: blue;} +.cm-s-default .cm-quote {color: #090;} +.cm-negative {color: #d44;} +.cm-positive {color: #292;} +.cm-header, .cm-strong {font-weight: bold;} +.cm-em {font-style: italic;} +.cm-link {text-decoration: underline;} +.cm-strikethrough {text-decoration: line-through;} + +.cm-s-default .cm-keyword {color: #708;} +.cm-s-default .cm-atom {color: #219;} +.cm-s-default .cm-number {color: #164;} +.cm-s-default .cm-def {color: #00f;} +.cm-s-default .cm-variable, +.cm-s-default .cm-punctuation, +.cm-s-default .cm-property, +.cm-s-default .cm-operator {} +.cm-s-default .cm-variable-2 {color: #05a;} +.cm-s-default .cm-variable-3 {color: #085;} +.cm-s-default .cm-comment {color: #a50;} +.cm-s-default .cm-string {color: #a11;} +.cm-s-default .cm-string-2 {color: #f50;} +.cm-s-default .cm-meta {color: #555;} +.cm-s-default .cm-qualifier {color: #555;} +.cm-s-default .cm-builtin {color: #30a;} +.cm-s-default .cm-bracket {color: #997;} +.cm-s-default .cm-tag {color: #170;} +.cm-s-default .cm-attribute {color: #00c;} +.cm-s-default .cm-hr {color: #999;} +.cm-s-default .cm-link {color: #00c;} + +.cm-s-default .cm-error {color: #f00;} +.cm-invalidchar {color: #f00;} + +.CodeMirror-composing { border-bottom: 2px solid; } + +/* Default styles for common addons */ + +div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} +div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} +.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } +.CodeMirror-activeline-background {background: #e8f2ff;} + +/* STOP */ + +/* The rest of this file contains styles related to the mechanics of + the editor. You probably shouldn't touch them. */ + +.CodeMirror { + position: relative; + overflow: hidden; + background: white; +} + +.CodeMirror-scroll { + overflow: scroll !important; /* Things will break if this is overridden */ + /* 30px is the magic margin used to hide the element's real scrollbars */ + /* See overflow: hidden in .CodeMirror */ + margin-bottom: -30px; margin-right: -30px; + padding-bottom: 30px; + height: 100%; + outline: none; /* Prevent dragging from highlighting the element */ + position: relative; +} +.CodeMirror-sizer { + position: relative; + border-right: 30px solid transparent; +} + +/* The fake, visible scrollbars. Used to force redraw during scrolling + before actual scrolling happens, thus preventing shaking and + flickering artifacts. */ +.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler { + position: absolute; + z-index: 6; + display: none; +} +.CodeMirror-vscrollbar { + right: 0; top: 0; + overflow-x: hidden; + overflow-y: scroll; +} +.CodeMirror-hscrollbar { + bottom: 0; left: 0; + overflow-y: hidden; + overflow-x: scroll; +} +.CodeMirror-scrollbar-filler { + right: 0; bottom: 0; +} +.CodeMirror-gutter-filler { + left: 0; bottom: 0; +} + +.CodeMirror-gutters { + position: absolute; left: 0; top: 0; + min-height: 100%; + z-index: 3; +} +.CodeMirror-gutter { + white-space: normal; + height: 100%; + display: inline-block; + vertical-align: top; + margin-bottom: -30px; +} +.CodeMirror-gutter-wrapper { + position: absolute; + z-index: 4; + background: none !important; + border: none !important; +} +.CodeMirror-gutter-background { + position: absolute; + top: 0; bottom: 0; + z-index: 4; +} +.CodeMirror-gutter-elt { + position: absolute; + cursor: default; + z-index: 4; +} +.CodeMirror-gutter-wrapper ::selection { background-color: transparent } +.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent } + +.CodeMirror-lines { + cursor: text; + min-height: 1px; /* prevents collapsing before first draw */ +} +.CodeMirror pre { + /* Reset some styles that the rest of the page might have set */ + -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; + border-width: 0; + background: transparent; + font-family: inherit; + font-size: inherit; + margin: 0; + white-space: pre; + word-wrap: normal; + line-height: inherit; + color: inherit; + z-index: 2; + position: relative; + overflow: visible; + -webkit-tap-highlight-color: transparent; + -webkit-font-variant-ligatures: contextual; + font-variant-ligatures: contextual; +} +.CodeMirror-wrap pre { + word-wrap: break-word; + white-space: pre-wrap; + word-break: normal; +} + +.CodeMirror-linebackground { + position: absolute; + left: 0; right: 0; top: 0; bottom: 0; + z-index: 0; +} + +.CodeMirror-linewidget { + position: relative; + z-index: 2; + overflow: auto; +} + +.CodeMirror-widget {} + +.CodeMirror-rtl pre { direction: rtl; } + +.CodeMirror-code { + outline: none; +} + +/* Force content-box sizing for the elements where we expect it */ +.CodeMirror-scroll, +.CodeMirror-sizer, +.CodeMirror-gutter, +.CodeMirror-gutters, +.CodeMirror-linenumber { + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.CodeMirror-measure { + position: absolute; + width: 100%; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.CodeMirror-cursor { + position: absolute; + pointer-events: none; +} +.CodeMirror-measure pre { position: static; } + +div.CodeMirror-cursors { + visibility: hidden; + position: relative; + z-index: 3; +} +div.CodeMirror-dragcursors { + visibility: visible; +} + +.CodeMirror-focused div.CodeMirror-cursors { + visibility: visible; +} + +.CodeMirror-selected { background: #d9d9d9; } +.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; } +.CodeMirror-crosshair { cursor: crosshair; } +.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; } +.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; } + +.cm-searching { + background: #ffa; + background: rgba(255, 255, 0, .4); +} + +/* Used to force a border model for a node */ +.cm-force-border { padding-right: .1px; } + +@media print { + /* Hide the cursor when printing */ + .CodeMirror div.CodeMirror-cursors { + visibility: hidden; + } +} + +/* See issue #2901 */ +.cm-tab-wrap-hack:after { content: ''; } + +/* Help users use markselection to safely style text background */ +span.CodeMirror-selectedtext { background: none; } diff --git a/docs/demo/third_party/codemirror/codemirror.js b/docs/demo/third_party/codemirror/codemirror.js new file mode 100644 index 00000000..8f2e33d5 --- /dev/null +++ b/docs/demo/third_party/codemirror/codemirror.js @@ -0,0 +1,9331 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +// This is CodeMirror (http://codemirror.net), a code editor +// implemented in JavaScript on top of the browser's DOM. +// +// You can find some technical background for some of the code below +// at http://marijnhaverbeke.nl/blog/#cm-internals . + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.CodeMirror = factory()); +}(this, (function () { 'use strict'; + +// Kludges for bugs and behavior differences that can't be feature +// detected are enabled based on userAgent etc sniffing. +var userAgent = navigator.userAgent +var platform = navigator.platform + +var gecko = /gecko\/\d/i.test(userAgent) +var ie_upto10 = /MSIE \d/.test(userAgent) +var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(userAgent) +var edge = /Edge\/(\d+)/.exec(userAgent) +var ie = ie_upto10 || ie_11up || edge +var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]) +var webkit = !edge && /WebKit\//.test(userAgent) +var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(userAgent) +var chrome = !edge && /Chrome\//.test(userAgent) +var presto = /Opera\//.test(userAgent) +var safari = /Apple Computer/.test(navigator.vendor) +var mac_geMountainLion = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(userAgent) +var phantom = /PhantomJS/.test(userAgent) + +var ios = !edge && /AppleWebKit/.test(userAgent) && /Mobile\/\w+/.test(userAgent) +var android = /Android/.test(userAgent) +// This is woefully incomplete. Suggestions for alternative methods welcome. +var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent) +var mac = ios || /Mac/.test(platform) +var chromeOS = /\bCrOS\b/.test(userAgent) +var windows = /win/i.test(platform) + +var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/) +if (presto_version) { presto_version = Number(presto_version[1]) } +if (presto_version && presto_version >= 15) { presto = false; webkit = true } +// Some browsers use the wrong event properties to signal cmd/ctrl on OS X +var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11)) +var captureRightClick = gecko || (ie && ie_version >= 9) + +function classTest(cls) { return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*") } + +var rmClass = function(node, cls) { + var current = node.className + var match = classTest(cls).exec(current) + if (match) { + var after = current.slice(match.index + match[0].length) + node.className = current.slice(0, match.index) + (after ? match[1] + after : "") + } +} + +function removeChildren(e) { + for (var count = e.childNodes.length; count > 0; --count) + { e.removeChild(e.firstChild) } + return e +} + +function removeChildrenAndAdd(parent, e) { + return removeChildren(parent).appendChild(e) +} + +function elt(tag, content, className, style) { + var e = document.createElement(tag) + if (className) { e.className = className } + if (style) { e.style.cssText = style } + if (typeof content == "string") { e.appendChild(document.createTextNode(content)) } + else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]) } } + return e +} +// wrapper for elt, which removes the elt from the accessibility tree +function eltP(tag, content, className, style) { + var e = elt(tag, content, className, style) + e.setAttribute("role", "presentation") + return e +} + +var range +if (document.createRange) { range = function(node, start, end, endNode) { + var r = document.createRange() + r.setEnd(endNode || node, end) + r.setStart(node, start) + return r +} } +else { range = function(node, start, end) { + var r = document.body.createTextRange() + try { r.moveToElementText(node.parentNode) } + catch(e) { return r } + r.collapse(true) + r.moveEnd("character", end) + r.moveStart("character", start) + return r +} } + +function contains(parent, child) { + if (child.nodeType == 3) // Android browser always returns false when child is a textnode + { child = child.parentNode } + if (parent.contains) + { return parent.contains(child) } + do { + if (child.nodeType == 11) { child = child.host } + if (child == parent) { return true } + } while (child = child.parentNode) +} + +function activeElt() { + // IE and Edge may throw an "Unspecified Error" when accessing document.activeElement. + // IE < 10 will throw when accessed while the page is loading or in an iframe. + // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable. + var activeElement + try { + activeElement = document.activeElement + } catch(e) { + activeElement = document.body || null + } + while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) + { activeElement = activeElement.shadowRoot.activeElement } + return activeElement +} + +function addClass(node, cls) { + var current = node.className + if (!classTest(cls).test(current)) { node.className += (current ? " " : "") + cls } +} +function joinClasses(a, b) { + var as = a.split(" ") + for (var i = 0; i < as.length; i++) + { if (as[i] && !classTest(as[i]).test(b)) { b += " " + as[i] } } + return b +} + +var selectInput = function(node) { node.select() } +if (ios) // Mobile Safari apparently has a bug where select() is broken. + { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length } } +else if (ie) // Suppress mysterious IE10 errors + { selectInput = function(node) { try { node.select() } catch(_e) {} } } + +function bind(f) { + var args = Array.prototype.slice.call(arguments, 1) + return function(){return f.apply(null, args)} +} + +function copyObj(obj, target, overwrite) { + if (!target) { target = {} } + for (var prop in obj) + { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) + { target[prop] = obj[prop] } } + return target +} + +// Counts the column offset in a string, taking tabs into account. +// Used mostly to find indentation. +function countColumn(string, end, tabSize, startIndex, startValue) { + if (end == null) { + end = string.search(/[^\s\u00a0]/) + if (end == -1) { end = string.length } + } + for (var i = startIndex || 0, n = startValue || 0;;) { + var nextTab = string.indexOf("\t", i) + if (nextTab < 0 || nextTab >= end) + { return n + (end - i) } + n += nextTab - i + n += tabSize - (n % tabSize) + i = nextTab + 1 + } +} + +var Delayed = function() {this.id = null}; +Delayed.prototype.set = function (ms, f) { + clearTimeout(this.id) + this.id = setTimeout(f, ms) +}; + +function indexOf(array, elt) { + for (var i = 0; i < array.length; ++i) + { if (array[i] == elt) { return i } } + return -1 +} + +// Number of pixels added to scroller and sizer to hide scrollbar +var scrollerGap = 30 + +// Returned or thrown by various protocols to signal 'I'm not +// handling this'. +var Pass = {toString: function(){return "CodeMirror.Pass"}} + +// Reused option objects for setSelection & friends +var sel_dontScroll = {scroll: false}; +var sel_mouse = {origin: "*mouse"}; +var sel_move = {origin: "+move"}; +// The inverse of countColumn -- find the offset that corresponds to +// a particular column. +function findColumn(string, goal, tabSize) { + for (var pos = 0, col = 0;;) { + var nextTab = string.indexOf("\t", pos) + if (nextTab == -1) { nextTab = string.length } + var skipped = nextTab - pos + if (nextTab == string.length || col + skipped >= goal) + { return pos + Math.min(skipped, goal - col) } + col += nextTab - pos + col += tabSize - (col % tabSize) + pos = nextTab + 1 + if (col >= goal) { return pos } + } +} + +var spaceStrs = [""] +function spaceStr(n) { + while (spaceStrs.length <= n) + { spaceStrs.push(lst(spaceStrs) + " ") } + return spaceStrs[n] +} + +function lst(arr) { return arr[arr.length-1] } + +function map(array, f) { + var out = [] + for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i) } + return out +} + +function insertSorted(array, value, score) { + var pos = 0, priority = score(value) + while (pos < array.length && score(array[pos]) <= priority) { pos++ } + array.splice(pos, 0, value) +} + +function nothing() {} + +function createObj(base, props) { + var inst + if (Object.create) { + inst = Object.create(base) + } else { + nothing.prototype = base + inst = new nothing() + } + if (props) { copyObj(props, inst) } + return inst +} + +var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/ +function isWordCharBasic(ch) { + return /\w/.test(ch) || ch > "\x80" && + (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch)) +} +function isWordChar(ch, helper) { + if (!helper) { return isWordCharBasic(ch) } + if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) { return true } + return helper.test(ch) +} + +function isEmpty(obj) { + for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } } + return true +} + +// Extending unicode characters. A series of a non-extending char + +// any number of extending chars is treated as a single unit as far +// as editing and measuring is concerned. This is not fully correct, +// since some scripts/fonts/browsers also treat other configurations +// of code points as a group. +var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/ +function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) } + +// Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range. +function skipExtendingChars(str, pos, dir) { + while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir } + return pos +} + +// Returns the value from the range [`from`; `to`] that satisfies +// `pred` and is closest to `from`. Assumes that at least `to` satisfies `pred`. +function findFirst(pred, from, to) { + for (;;) { + if (Math.abs(from - to) <= 1) { return pred(from) ? from : to } + var mid = Math.floor((from + to) / 2) + if (pred(mid)) { to = mid } + else { from = mid } + } +} + +// The display handles the DOM integration, both for input reading +// and content drawing. It holds references to DOM nodes and +// display-related state. + +function Display(place, doc, input) { + var d = this + this.input = input + + // Covers bottom-right square when both scrollbars are present. + d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler") + d.scrollbarFiller.setAttribute("cm-not-content", "true") + // Covers bottom of gutter when coverGutterNextToScrollbar is on + // and h scrollbar is present. + d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler") + d.gutterFiller.setAttribute("cm-not-content", "true") + // Will contain the actual code, positioned to cover the viewport. + d.lineDiv = eltP("div", null, "CodeMirror-code") + // Elements are added to these to represent selection and cursors. + d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1") + d.cursorDiv = elt("div", null, "CodeMirror-cursors") + // A visibility: hidden element used to find the size of things. + d.measure = elt("div", null, "CodeMirror-measure") + // When lines outside of the viewport are measured, they are drawn in this. + d.lineMeasure = elt("div", null, "CodeMirror-measure") + // Wraps everything that needs to exist inside the vertically-padded coordinate system + d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], + null, "position: relative; outline: none") + var lines = eltP("div", [d.lineSpace], "CodeMirror-lines") + // Moved around its parent to cover visible view. + d.mover = elt("div", [lines], null, "position: relative") + // Set to the height of the document, allowing scrolling. + d.sizer = elt("div", [d.mover], "CodeMirror-sizer") + d.sizerWidth = null + // Behavior of elts with overflow: auto and padding is + // inconsistent across browsers. This is used to ensure the + // scrollable area is big enough. + d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;") + // Will contain the gutters, if any. + d.gutters = elt("div", null, "CodeMirror-gutters") + d.lineGutter = null + // Actual scrollable element. + d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll") + d.scroller.setAttribute("tabIndex", "-1") + // The element in which the editor lives. + d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror") + + // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported) + if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0 } + if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true } + + if (place) { + if (place.appendChild) { place.appendChild(d.wrapper) } + else { place(d.wrapper) } + } + + // Current rendered range (may be bigger than the view window). + d.viewFrom = d.viewTo = doc.first + d.reportedViewFrom = d.reportedViewTo = doc.first + // Information about the rendered lines. + d.view = [] + d.renderedView = null + // Holds info about a single rendered line when it was rendered + // for measurement, while not in view. + d.externalMeasured = null + // Empty space (in pixels) above the view + d.viewOffset = 0 + d.lastWrapHeight = d.lastWrapWidth = 0 + d.updateLineNumbers = null + + d.nativeBarWidth = d.barHeight = d.barWidth = 0 + d.scrollbarsClipped = false + + // Used to only resize the line number gutter when necessary (when + // the amount of lines crosses a boundary that makes its width change) + d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null + // Set to true when a non-horizontal-scrolling line widget is + // added. As an optimization, line widget aligning is skipped when + // this is false. + d.alignWidgets = false + + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null + + // Tracks the maximum line length so that the horizontal scrollbar + // can be kept static when scrolling. + d.maxLine = null + d.maxLineLength = 0 + d.maxLineChanged = false + + // Used for measuring wheel scrolling granularity + d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null + + // True when shift is held down. + d.shift = false + + // Used to track whether anything happened since the context menu + // was opened. + d.selForContextMenu = null + + d.activeTouch = null + + input.init(d) +} + +// Find the line object corresponding to the given line number. +function getLine(doc, n) { + n -= doc.first + if (n < 0 || n >= doc.size) { throw new Error("There is no line " + (n + doc.first) + " in the document.") } + var chunk = doc + while (!chunk.lines) { + for (var i = 0;; ++i) { + var child = chunk.children[i], sz = child.chunkSize() + if (n < sz) { chunk = child; break } + n -= sz + } + } + return chunk.lines[n] +} + +// Get the part of a document between two positions, as an array of +// strings. +function getBetween(doc, start, end) { + var out = [], n = start.line + doc.iter(start.line, end.line + 1, function (line) { + var text = line.text + if (n == end.line) { text = text.slice(0, end.ch) } + if (n == start.line) { text = text.slice(start.ch) } + out.push(text) + ++n + }) + return out +} +// Get the lines between from and to, as array of strings. +function getLines(doc, from, to) { + var out = [] + doc.iter(from, to, function (line) { out.push(line.text) }) // iter aborts when callback returns truthy value + return out +} + +// Update the height of a line, propagating the height change +// upwards to parent nodes. +function updateLineHeight(line, height) { + var diff = height - line.height + if (diff) { for (var n = line; n; n = n.parent) { n.height += diff } } +} + +// Given a line object, find its line number by walking up through +// its parent links. +function lineNo(line) { + if (line.parent == null) { return null } + var cur = line.parent, no = indexOf(cur.lines, line) + for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) { + for (var i = 0;; ++i) { + if (chunk.children[i] == cur) { break } + no += chunk.children[i].chunkSize() + } + } + return no + cur.first +} + +// Find the line at the given vertical position, using the height +// information in the document tree. +function lineAtHeight(chunk, h) { + var n = chunk.first + outer: do { + for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) { + var child = chunk.children[i$1], ch = child.height + if (h < ch) { chunk = child; continue outer } + h -= ch + n += child.chunkSize() + } + return n + } while (!chunk.lines) + var i = 0 + for (; i < chunk.lines.length; ++i) { + var line = chunk.lines[i], lh = line.height + if (h < lh) { break } + h -= lh + } + return n + i +} + +function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size} + +function lineNumberFor(options, i) { + return String(options.lineNumberFormatter(i + options.firstLineNumber)) +} + +// A Pos instance represents a position within the text. +function Pos(line, ch, sticky) { + if ( sticky === void 0 ) sticky = null; + + if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) } + this.line = line + this.ch = ch + this.sticky = sticky +} + +// Compare two positions, return 0 if they are the same, a negative +// number when a is less, and a positive number otherwise. +function cmp(a, b) { return a.line - b.line || a.ch - b.ch } + +function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 } + +function copyPos(x) {return Pos(x.line, x.ch)} +function maxPos(a, b) { return cmp(a, b) < 0 ? b : a } +function minPos(a, b) { return cmp(a, b) < 0 ? a : b } + +// Most of the external API clips given positions to make sure they +// actually exist within the document. +function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))} +function clipPos(doc, pos) { + if (pos.line < doc.first) { return Pos(doc.first, 0) } + var last = doc.first + doc.size - 1 + if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) } + return clipToLen(pos, getLine(doc, pos.line).text.length) +} +function clipToLen(pos, linelen) { + var ch = pos.ch + if (ch == null || ch > linelen) { return Pos(pos.line, linelen) } + else if (ch < 0) { return Pos(pos.line, 0) } + else { return pos } +} +function clipPosArray(doc, array) { + var out = [] + for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]) } + return out +} + +// Optimize some code when these features are not used. +var sawReadOnlySpans = false; +var sawCollapsedSpans = false; +function seeReadOnlySpans() { + sawReadOnlySpans = true +} + +function seeCollapsedSpans() { + sawCollapsedSpans = true +} + +// TEXTMARKER SPANS + +function MarkedSpan(marker, from, to) { + this.marker = marker + this.from = from; this.to = to +} + +// Search an array of spans for a span matching the given marker. +function getMarkedSpanFor(spans, marker) { + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if (span.marker == marker) { return span } + } } +} +// Remove a span from an array, returning undefined if no spans are +// left (we don't store arrays for lines without spans). +function removeMarkedSpan(spans, span) { + var r + for (var i = 0; i < spans.length; ++i) + { if (spans[i] != span) { (r || (r = [])).push(spans[i]) } } + return r +} +// Add a span to a line. +function addMarkedSpan(line, span) { + line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span] + span.marker.attachLine(line) +} + +// Used for the algorithm that adjusts markers for a change in the +// document. These functions cut an array of spans at a given +// character position, returning an array of remaining chunks (or +// undefined if nothing remains). +function markedSpansBefore(old, startCh, isInsert) { + var nw + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh) + if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) { + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to)) + } + } } + return nw +} +function markedSpansAfter(old, endCh, isInsert) { + var nw + if (old) { for (var i = 0; i < old.length; ++i) { + var span = old[i], marker = span.marker + var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh) + if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) { + var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh) + ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, + span.to == null ? null : span.to - endCh)) + } + } } + return nw +} + +// Given a change object, compute the new set of marker spans that +// cover the line in which the change took place. Removes spans +// entirely within the change, reconnects spans belonging to the +// same marker that appear on both sides of the change, and cuts off +// spans partially within the change. Returns an array of span +// arrays with one element for each line in (after) the change. +function stretchSpansOverChange(doc, change) { + if (change.full) { return null } + var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans + var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans + if (!oldFirst && !oldLast) { return null } + + var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0 + // Get the spans that 'stick out' on both sides + var first = markedSpansBefore(oldFirst, startCh, isInsert) + var last = markedSpansAfter(oldLast, endCh, isInsert) + + // Next, merge those two ends + var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0) + if (first) { + // Fix up .to properties of first + for (var i = 0; i < first.length; ++i) { + var span = first[i] + if (span.to == null) { + var found = getMarkedSpanFor(last, span.marker) + if (!found) { span.to = startCh } + else if (sameLine) { span.to = found.to == null ? null : found.to + offset } + } + } + } + if (last) { + // Fix up .from in last (or move them into first in case of sameLine) + for (var i$1 = 0; i$1 < last.length; ++i$1) { + var span$1 = last[i$1] + if (span$1.to != null) { span$1.to += offset } + if (span$1.from == null) { + var found$1 = getMarkedSpanFor(first, span$1.marker) + if (!found$1) { + span$1.from = offset + if (sameLine) { (first || (first = [])).push(span$1) } + } + } else { + span$1.from += offset + if (sameLine) { (first || (first = [])).push(span$1) } + } + } + } + // Make sure we didn't create any zero-length spans + if (first) { first = clearEmptySpans(first) } + if (last && last != first) { last = clearEmptySpans(last) } + + var newMarkers = [first] + if (!sameLine) { + // Fill gap with whole-line-spans + var gap = change.text.length - 2, gapMarkers + if (gap > 0 && first) + { for (var i$2 = 0; i$2 < first.length; ++i$2) + { if (first[i$2].to == null) + { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)) } } } + for (var i$3 = 0; i$3 < gap; ++i$3) + { newMarkers.push(gapMarkers) } + newMarkers.push(last) + } + return newMarkers +} + +// Remove spans that are empty and don't have a clearWhenEmpty +// option of false. +function clearEmptySpans(spans) { + for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) + { spans.splice(i--, 1) } + } + if (!spans.length) { return null } + return spans +} + +// Used to 'clip' out readOnly ranges when making a change. +function removeReadOnlyRanges(doc, from, to) { + var markers = null + doc.iter(from.line, to.line + 1, function (line) { + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var mark = line.markedSpans[i].marker + if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) + { (markers || (markers = [])).push(mark) } + } } + }) + if (!markers) { return null } + var parts = [{from: from, to: to}] + for (var i = 0; i < markers.length; ++i) { + var mk = markers[i], m = mk.find(0) + for (var j = 0; j < parts.length; ++j) { + var p = parts[j] + if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue } + var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to) + if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) + { newParts.push({from: p.from, to: m.from}) } + if (dto > 0 || !mk.inclusiveRight && !dto) + { newParts.push({from: m.to, to: p.to}) } + parts.splice.apply(parts, newParts) + j += newParts.length - 3 + } + } + return parts +} + +// Connect or disconnect spans from a line. +function detachMarkedSpans(line) { + var spans = line.markedSpans + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.detachLine(line) } + line.markedSpans = null +} +function attachMarkedSpans(line, spans) { + if (!spans) { return } + for (var i = 0; i < spans.length; ++i) + { spans[i].marker.attachLine(line) } + line.markedSpans = spans +} + +// Helpers used when computing which overlapping collapsed span +// counts as the larger one. +function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 } +function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 } + +// Returns a number indicating which of two overlapping collapsed +// spans is larger (and thus includes the other). Falls back to +// comparing ids when the spans cover exactly the same range. +function compareCollapsedMarkers(a, b) { + var lenDiff = a.lines.length - b.lines.length + if (lenDiff != 0) { return lenDiff } + var aPos = a.find(), bPos = b.find() + var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b) + if (fromCmp) { return -fromCmp } + var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b) + if (toCmp) { return toCmp } + return b.id - a.id +} + +// Find out whether a line ends or starts in a collapsed span. If +// so, return the marker for that span. +function collapsedSpanAtSide(line, start) { + var sps = sawCollapsedSpans && line.markedSpans, found + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i] + if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && + (!found || compareCollapsedMarkers(found, sp.marker) < 0)) + { found = sp.marker } + } } + return found +} +function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) } +function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) } + +// Test whether there exists a collapsed span that partially +// overlaps (covers the start or end, but not both) of a new span. +// Such overlap is not allowed. +function conflictingCollapsedRange(doc, lineNo, from, to, marker) { + var line = getLine(doc, lineNo) + var sps = sawCollapsedSpans && line.markedSpans + if (sps) { for (var i = 0; i < sps.length; ++i) { + var sp = sps[i] + if (!sp.marker.collapsed) { continue } + var found = sp.marker.find(0) + var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker) + var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker) + if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue } + if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || + fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) + { return true } + } } +} + +// A visual line is a line as drawn on the screen. Folding, for +// example, can cause multiple logical lines to appear on the same +// visual line. This finds the start of the visual line that the +// given line is part of (usually that is the line itself). +function visualLine(line) { + var merged + while (merged = collapsedSpanAtStart(line)) + { line = merged.find(-1, true).line } + return line +} + +function visualLineEnd(line) { + var merged + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line } + return line +} + +// Returns an array of logical lines that continue the visual line +// started by the argument, or undefined if there are no such lines. +function visualLineContinued(line) { + var merged, lines + while (merged = collapsedSpanAtEnd(line)) { + line = merged.find(1, true).line + ;(lines || (lines = [])).push(line) + } + return lines +} + +// Get the line number of the start of the visual line that the +// given line number is part of. +function visualLineNo(doc, lineN) { + var line = getLine(doc, lineN), vis = visualLine(line) + if (line == vis) { return lineN } + return lineNo(vis) +} + +// Get the line number of the start of the next visual line after +// the given line. +function visualLineEndNo(doc, lineN) { + if (lineN > doc.lastLine()) { return lineN } + var line = getLine(doc, lineN), merged + if (!lineIsHidden(doc, line)) { return lineN } + while (merged = collapsedSpanAtEnd(line)) + { line = merged.find(1, true).line } + return lineNo(line) + 1 +} + +// Compute whether a line is hidden. Lines count as hidden when they +// are part of a visual line that starts with another line, or when +// they are entirely covered by collapsed, non-widget span. +function lineIsHidden(doc, line) { + var sps = sawCollapsedSpans && line.markedSpans + if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) { + sp = sps[i] + if (!sp.marker.collapsed) { continue } + if (sp.from == null) { return true } + if (sp.marker.widgetNode) { continue } + if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) + { return true } + } } +} +function lineIsHiddenInner(doc, line, span) { + if (span.to == null) { + var end = span.marker.find(1, true) + return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker)) + } + if (span.marker.inclusiveRight && span.to == line.text.length) + { return true } + for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) { + sp = line.markedSpans[i] + if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && + (sp.to == null || sp.to != span.from) && + (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && + lineIsHiddenInner(doc, line, sp)) { return true } + } +} + +// Find the height above the given line. +function heightAtLine(lineObj) { + lineObj = visualLine(lineObj) + + var h = 0, chunk = lineObj.parent + for (var i = 0; i < chunk.lines.length; ++i) { + var line = chunk.lines[i] + if (line == lineObj) { break } + else { h += line.height } + } + for (var p = chunk.parent; p; chunk = p, p = chunk.parent) { + for (var i$1 = 0; i$1 < p.children.length; ++i$1) { + var cur = p.children[i$1] + if (cur == chunk) { break } + else { h += cur.height } + } + } + return h +} + +// Compute the character length of a line, taking into account +// collapsed ranges (see markText) that might hide parts, and join +// other lines onto it. +function lineLength(line) { + if (line.height == 0) { return 0 } + var len = line.text.length, merged, cur = line + while (merged = collapsedSpanAtStart(cur)) { + var found = merged.find(0, true) + cur = found.from.line + len += found.from.ch - found.to.ch + } + cur = line + while (merged = collapsedSpanAtEnd(cur)) { + var found$1 = merged.find(0, true) + len -= cur.text.length - found$1.from.ch + cur = found$1.to.line + len += cur.text.length - found$1.to.ch + } + return len +} + +// Find the longest line in the document. +function findMaxLine(cm) { + var d = cm.display, doc = cm.doc + d.maxLine = getLine(doc, doc.first) + d.maxLineLength = lineLength(d.maxLine) + d.maxLineChanged = true + doc.iter(function (line) { + var len = lineLength(line) + if (len > d.maxLineLength) { + d.maxLineLength = len + d.maxLine = line + } + }) +} + +// BIDI HELPERS + +function iterateBidiSections(order, from, to, f) { + if (!order) { return f(from, to, "ltr") } + var found = false + for (var i = 0; i < order.length; ++i) { + var part = order[i] + if (part.from < to && part.to > from || from == to && part.to == from) { + f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr") + found = true + } + } + if (!found) { f(from, to, "ltr") } +} + +var bidiOther = null +function getBidiPartAt(order, ch, sticky) { + var found + bidiOther = null + for (var i = 0; i < order.length; ++i) { + var cur = order[i] + if (cur.from < ch && cur.to > ch) { return i } + if (cur.to == ch) { + if (cur.from != cur.to && sticky == "before") { found = i } + else { bidiOther = i } + } + if (cur.from == ch) { + if (cur.from != cur.to && sticky != "before") { found = i } + else { bidiOther = i } + } + } + return found != null ? found : bidiOther +} + +// Bidirectional ordering algorithm +// See http://unicode.org/reports/tr9/tr9-13.html for the algorithm +// that this (partially) implements. + +// One-char codes used for character types: +// L (L): Left-to-Right +// R (R): Right-to-Left +// r (AL): Right-to-Left Arabic +// 1 (EN): European Number +// + (ES): European Number Separator +// % (ET): European Number Terminator +// n (AN): Arabic Number +// , (CS): Common Number Separator +// m (NSM): Non-Spacing Mark +// b (BN): Boundary Neutral +// s (B): Paragraph Separator +// t (S): Segment Separator +// w (WS): Whitespace +// N (ON): Other Neutrals + +// Returns null if characters are ordered as they appear +// (left-to-right), or an array of sections ({from, to, level} +// objects) in the order in which they occur visually. +var bidiOrdering = (function() { + // Character types for codepoints 0 to 0xff + var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN" + // Character types for codepoints 0x600 to 0x6f9 + var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111" + function charType(code) { + if (code <= 0xf7) { return lowTypes.charAt(code) } + else if (0x590 <= code && code <= 0x5f4) { return "R" } + else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) } + else if (0x6ee <= code && code <= 0x8ac) { return "r" } + else if (0x2000 <= code && code <= 0x200b) { return "w" } + else if (code == 0x200c) { return "b" } + else { return "L" } + } + + var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/ + var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/ + + function BidiSpan(level, from, to) { + this.level = level + this.from = from; this.to = to + } + + return function(str, direction) { + var outerType = direction == "ltr" ? "L" : "R" + + if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) { return false } + var len = str.length, types = [] + for (var i = 0; i < len; ++i) + { types.push(charType(str.charCodeAt(i))) } + + // W1. Examine each non-spacing mark (NSM) in the level run, and + // change the type of the NSM to the type of the previous + // character. If the NSM is at the start of the level run, it will + // get the type of sor. + for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) { + var type = types[i$1] + if (type == "m") { types[i$1] = prev } + else { prev = type } + } + + // W2. Search backwards from each instance of a European number + // until the first strong type (R, L, AL, or sor) is found. If an + // AL is found, change the type of the European number to Arabic + // number. + // W3. Change all ALs to R. + for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) { + var type$1 = types[i$2] + if (type$1 == "1" && cur == "r") { types[i$2] = "n" } + else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == "r") { types[i$2] = "R" } } + } + + // W4. A single European separator between two European numbers + // changes to a European number. A single common separator between + // two numbers of the same type changes to that type. + for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) { + var type$2 = types[i$3] + if (type$2 == "+" && prev$1 == "1" && types[i$3+1] == "1") { types[i$3] = "1" } + else if (type$2 == "," && prev$1 == types[i$3+1] && + (prev$1 == "1" || prev$1 == "n")) { types[i$3] = prev$1 } + prev$1 = type$2 + } + + // W5. A sequence of European terminators adjacent to European + // numbers changes to all European numbers. + // W6. Otherwise, separators and terminators change to Other + // Neutral. + for (var i$4 = 0; i$4 < len; ++i$4) { + var type$3 = types[i$4] + if (type$3 == ",") { types[i$4] = "N" } + else if (type$3 == "%") { + var end = (void 0) + for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {} + var replace = (i$4 && types[i$4-1] == "!") || (end < len && types[end] == "1") ? "1" : "N" + for (var j = i$4; j < end; ++j) { types[j] = replace } + i$4 = end - 1 + } + } + + // W7. Search backwards from each instance of a European number + // until the first strong type (R, L, or sor) is found. If an L is + // found, then change the type of the European number to L. + for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) { + var type$4 = types[i$5] + if (cur$1 == "L" && type$4 == "1") { types[i$5] = "L" } + else if (isStrong.test(type$4)) { cur$1 = type$4 } + } + + // N1. A sequence of neutrals takes the direction of the + // surrounding strong text if the text on both sides has the same + // direction. European and Arabic numbers act as if they were R in + // terms of their influence on neutrals. Start-of-level-run (sor) + // and end-of-level-run (eor) are used at level run boundaries. + // N2. Any remaining neutrals take the embedding direction. + for (var i$6 = 0; i$6 < len; ++i$6) { + if (isNeutral.test(types[i$6])) { + var end$1 = (void 0) + for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {} + var before = (i$6 ? types[i$6-1] : outerType) == "L" + var after = (end$1 < len ? types[end$1] : outerType) == "L" + var replace$1 = before == after ? (before ? "L" : "R") : outerType + for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1 } + i$6 = end$1 - 1 + } + } + + // Here we depart from the documented algorithm, in order to avoid + // building up an actual levels array. Since there are only three + // levels (0, 1, 2) in an implementation that doesn't take + // explicit embedding into account, we can build up the order on + // the fly, without following the level-based algorithm. + var order = [], m + for (var i$7 = 0; i$7 < len;) { + if (countsAsLeft.test(types[i$7])) { + var start = i$7 + for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {} + order.push(new BidiSpan(0, start, i$7)) + } else { + var pos = i$7, at = order.length + for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {} + for (var j$2 = pos; j$2 < i$7;) { + if (countsAsNum.test(types[j$2])) { + if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)) } + var nstart = j$2 + for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {} + order.splice(at, 0, new BidiSpan(2, nstart, j$2)) + pos = j$2 + } else { ++j$2 } + } + if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)) } + } + } + if (order[0].level == 1 && (m = str.match(/^\s+/))) { + order[0].from = m[0].length + order.unshift(new BidiSpan(0, 0, m[0].length)) + } + if (lst(order).level == 1 && (m = str.match(/\s+$/))) { + lst(order).to -= m[0].length + order.push(new BidiSpan(0, len - m[0].length, len)) + } + + return direction == "rtl" ? order.reverse() : order + } +})() + +// Get the bidi ordering for the given line (and cache it). Returns +// false for lines that are fully left-to-right, and an array of +// BidiSpan objects otherwise. +function getOrder(line, direction) { + var order = line.order + if (order == null) { order = line.order = bidiOrdering(line.text, direction) } + return order +} + +function moveCharLogically(line, ch, dir) { + var target = skipExtendingChars(line.text, ch + dir, dir) + return target < 0 || target > line.text.length ? null : target +} + +function moveLogically(line, start, dir) { + var ch = moveCharLogically(line, start.ch, dir) + return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before") +} + +function endOfLine(visually, cm, lineObj, lineNo, dir) { + if (visually) { + var order = getOrder(lineObj, cm.doc.direction) + if (order) { + var part = dir < 0 ? lst(order) : order[0] + var moveInStorageOrder = (dir < 0) == (part.level == 1) + var sticky = moveInStorageOrder ? "after" : "before" + var ch + // With a wrapped rtl chunk (possibly spanning multiple bidi parts), + // it could be that the last bidi part is not on the last visual line, + // since visual lines contain content order-consecutive chunks. + // Thus, in rtl, we are looking for the first (content-order) character + // in the rtl chunk that is on the last line (that is, the same line + // as the last (content-order) character). + if (part.level > 0) { + var prep = prepareMeasureForLine(cm, lineObj) + ch = dir < 0 ? lineObj.text.length - 1 : 0 + var targetTop = measureCharPrepared(cm, prep, ch).top + ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch) + if (sticky == "before") { ch = moveCharLogically(lineObj, ch, 1, true) } + } else { ch = dir < 0 ? part.to : part.from } + return new Pos(lineNo, ch, sticky) + } + } + return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after") +} + +function moveVisually(cm, line, start, dir) { + var bidi = getOrder(line, cm.doc.direction) + if (!bidi) { return moveLogically(line, start, dir) } + if (start.ch >= line.text.length) { + start.ch = line.text.length + start.sticky = "before" + } else if (start.ch <= 0) { + start.ch = 0 + start.sticky = "after" + } + var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos] + if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) { + // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines, + // nothing interesting happens. + return moveLogically(line, start, dir) + } + + var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); } + var prep + var getWrappedLineExtent = function (ch) { + if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} } + prep = prep || prepareMeasureForLine(cm, line) + return wrappedLineExtentChar(cm, line, prep, ch) + } + var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch) + + if (cm.doc.direction == "rtl" || part.level == 1) { + var moveInStorageOrder = (part.level == 1) == (dir < 0) + var ch = mv(start, moveInStorageOrder ? 1 : -1) + if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) { + // Case 2: We move within an rtl part or in an rtl editor on the same visual line + var sticky = moveInStorageOrder ? "before" : "after" + return new Pos(start.line, ch, sticky) + } + } + + // Case 3: Could not move within this bidi part in this visual line, so leave + // the current bidi part + + var searchInVisualLine = function (partPos, dir, wrappedLineExtent) { + var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder + ? new Pos(start.line, mv(ch, 1), "before") + : new Pos(start.line, ch, "after"); } + + for (; partPos >= 0 && partPos < bidi.length; partPos += dir) { + var part = bidi[partPos] + var moveInStorageOrder = (dir > 0) == (part.level != 1) + var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1) + if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) } + ch = moveInStorageOrder ? part.from : mv(part.to, -1) + if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) } + } + } + + // Case 3a: Look for other bidi parts on the same visual line + var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent) + if (res) { return res } + + // Case 3b: Look for other bidi parts on the next visual line + var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1) + if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) { + res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh)) + if (res) { return res } + } + + // Case 4: Nowhere to move + return null +} + +// EVENT HANDLING + +// Lightweight event framework. on/off also work on DOM nodes, +// registering native DOM handlers. + +var noHandlers = [] + +var on = function(emitter, type, f) { + if (emitter.addEventListener) { + emitter.addEventListener(type, f, false) + } else if (emitter.attachEvent) { + emitter.attachEvent("on" + type, f) + } else { + var map = emitter._handlers || (emitter._handlers = {}) + map[type] = (map[type] || noHandlers).concat(f) + } +} + +function getHandlers(emitter, type) { + return emitter._handlers && emitter._handlers[type] || noHandlers +} + +function off(emitter, type, f) { + if (emitter.removeEventListener) { + emitter.removeEventListener(type, f, false) + } else if (emitter.detachEvent) { + emitter.detachEvent("on" + type, f) + } else { + var map = emitter._handlers, arr = map && map[type] + if (arr) { + var index = indexOf(arr, f) + if (index > -1) + { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)) } + } + } +} + +function signal(emitter, type /*, values...*/) { + var handlers = getHandlers(emitter, type) + if (!handlers.length) { return } + var args = Array.prototype.slice.call(arguments, 2) + for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args) } +} + +// The DOM events that CodeMirror handles can be overridden by +// registering a (non-DOM) handler on the editor for the event name, +// and preventDefault-ing the event in that handler. +function signalDOMEvent(cm, e, override) { + if (typeof e == "string") + { e = {type: e, preventDefault: function() { this.defaultPrevented = true }} } + signal(cm, override || e.type, cm, e) + return e_defaultPrevented(e) || e.codemirrorIgnore +} + +function signalCursorActivity(cm) { + var arr = cm._handlers && cm._handlers.cursorActivity + if (!arr) { return } + var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []) + for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1) + { set.push(arr[i]) } } +} + +function hasHandler(emitter, type) { + return getHandlers(emitter, type).length > 0 +} + +// Add on and off methods to a constructor's prototype, to make +// registering events on such objects more convenient. +function eventMixin(ctor) { + ctor.prototype.on = function(type, f) {on(this, type, f)} + ctor.prototype.off = function(type, f) {off(this, type, f)} +} + +// Due to the fact that we still support jurassic IE versions, some +// compatibility wrappers are needed. + +function e_preventDefault(e) { + if (e.preventDefault) { e.preventDefault() } + else { e.returnValue = false } +} +function e_stopPropagation(e) { + if (e.stopPropagation) { e.stopPropagation() } + else { e.cancelBubble = true } +} +function e_defaultPrevented(e) { + return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false +} +function e_stop(e) {e_preventDefault(e); e_stopPropagation(e)} + +function e_target(e) {return e.target || e.srcElement} +function e_button(e) { + var b = e.which + if (b == null) { + if (e.button & 1) { b = 1 } + else if (e.button & 2) { b = 3 } + else if (e.button & 4) { b = 2 } + } + if (mac && e.ctrlKey && b == 1) { b = 3 } + return b +} + +// Detect drag-and-drop +var dragAndDrop = function() { + // There is *some* kind of drag-and-drop support in IE6-8, but I + // couldn't get it to work yet. + if (ie && ie_version < 9) { return false } + var div = elt('div') + return "draggable" in div || "dragDrop" in div +}() + +var zwspSupported +function zeroWidthElement(measure) { + if (zwspSupported == null) { + var test = elt("span", "\u200b") + removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")])) + if (measure.firstChild.offsetHeight != 0) + { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8) } + } + var node = zwspSupported ? elt("span", "\u200b") : + elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px") + node.setAttribute("cm-text", "") + return node +} + +// Feature-detect IE's crummy client rect reporting for bidi text +var badBidiRects +function hasBadBidiRects(measure) { + if (badBidiRects != null) { return badBidiRects } + var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA")) + var r0 = range(txt, 0, 1).getBoundingClientRect() + var r1 = range(txt, 1, 2).getBoundingClientRect() + removeChildren(measure) + if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780) + return badBidiRects = (r1.right - r0.right < 3) +} + +// See if "".split is the broken IE version, if so, provide an +// alternative way to split lines. +var splitLinesAuto = "\n\nb".split(/\n/).length != 3 ? function (string) { + var pos = 0, result = [], l = string.length + while (pos <= l) { + var nl = string.indexOf("\n", pos) + if (nl == -1) { nl = string.length } + var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl) + var rt = line.indexOf("\r") + if (rt != -1) { + result.push(line.slice(0, rt)) + pos += rt + 1 + } else { + result.push(line) + pos = nl + 1 + } + } + return result +} : function (string) { return string.split(/\r\n?|\n/); } + +var hasSelection = window.getSelection ? function (te) { + try { return te.selectionStart != te.selectionEnd } + catch(e) { return false } +} : function (te) { + var range + try {range = te.ownerDocument.selection.createRange()} + catch(e) {} + if (!range || range.parentElement() != te) { return false } + return range.compareEndPoints("StartToEnd", range) != 0 +} + +var hasCopyEvent = (function () { + var e = elt("div") + if ("oncopy" in e) { return true } + e.setAttribute("oncopy", "return;") + return typeof e.oncopy == "function" +})() + +var badZoomedRects = null +function hasBadZoomedRects(measure) { + if (badZoomedRects != null) { return badZoomedRects } + var node = removeChildrenAndAdd(measure, elt("span", "x")) + var normal = node.getBoundingClientRect() + var fromRange = range(node, 0, 1).getBoundingClientRect() + return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1 +} + +var modes = {}; +var mimeModes = {}; +// Extra arguments are stored as the mode's dependencies, which is +// used by (legacy) mechanisms like loadmode.js to automatically +// load a mode. (Preferred mechanism is the require/define calls.) +function defineMode(name, mode) { + if (arguments.length > 2) + { mode.dependencies = Array.prototype.slice.call(arguments, 2) } + modes[name] = mode +} + +function defineMIME(mime, spec) { + mimeModes[mime] = spec +} + +// Given a MIME type, a {name, ...options} config object, or a name +// string, return a mode config object. +function resolveMode(spec) { + if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) { + spec = mimeModes[spec] + } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) { + var found = mimeModes[spec.name] + if (typeof found == "string") { found = {name: found} } + spec = createObj(found, spec) + spec.name = found.name + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+xml$/.test(spec)) { + return resolveMode("application/xml") + } else if (typeof spec == "string" && /^[\w\-]+\/[\w\-]+\+json$/.test(spec)) { + return resolveMode("application/json") + } + if (typeof spec == "string") { return {name: spec} } + else { return spec || {name: "null"} } +} + +// Given a mode spec (anything that resolveMode accepts), find and +// initialize an actual mode object. +function getMode(options, spec) { + spec = resolveMode(spec) + var mfactory = modes[spec.name] + if (!mfactory) { return getMode(options, "text/plain") } + var modeObj = mfactory(options, spec) + if (modeExtensions.hasOwnProperty(spec.name)) { + var exts = modeExtensions[spec.name] + for (var prop in exts) { + if (!exts.hasOwnProperty(prop)) { continue } + if (modeObj.hasOwnProperty(prop)) { modeObj["_" + prop] = modeObj[prop] } + modeObj[prop] = exts[prop] + } + } + modeObj.name = spec.name + if (spec.helperType) { modeObj.helperType = spec.helperType } + if (spec.modeProps) { for (var prop$1 in spec.modeProps) + { modeObj[prop$1] = spec.modeProps[prop$1] } } + + return modeObj +} + +// This can be used to attach properties to mode objects from +// outside the actual mode definition. +var modeExtensions = {} +function extendMode(mode, properties) { + var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {}) + copyObj(properties, exts) +} + +function copyState(mode, state) { + if (state === true) { return state } + if (mode.copyState) { return mode.copyState(state) } + var nstate = {} + for (var n in state) { + var val = state[n] + if (val instanceof Array) { val = val.concat([]) } + nstate[n] = val + } + return nstate +} + +// Given a mode and a state (for that mode), find the inner mode and +// state at the position that the state refers to. +function innerMode(mode, state) { + var info + while (mode.innerMode) { + info = mode.innerMode(state) + if (!info || info.mode == mode) { break } + state = info.state + mode = info.mode + } + return info || {mode: mode, state: state} +} + +function startState(mode, a1, a2) { + return mode.startState ? mode.startState(a1, a2) : true +} + +// STRING STREAM + +// Fed to the mode parsers, provides helper functions to make +// parsers more succinct. + +var StringStream = function(string, tabSize) { + this.pos = this.start = 0 + this.string = string + this.tabSize = tabSize || 8 + this.lastColumnPos = this.lastColumnValue = 0 + this.lineStart = 0 +}; + +StringStream.prototype.eol = function () {return this.pos >= this.string.length}; +StringStream.prototype.sol = function () {return this.pos == this.lineStart}; +StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined}; +StringStream.prototype.next = function () { + if (this.pos < this.string.length) + { return this.string.charAt(this.pos++) } +}; +StringStream.prototype.eat = function (match) { + var ch = this.string.charAt(this.pos) + var ok + if (typeof match == "string") { ok = ch == match } + else { ok = ch && (match.test ? match.test(ch) : match(ch)) } + if (ok) {++this.pos; return ch} +}; +StringStream.prototype.eatWhile = function (match) { + var start = this.pos + while (this.eat(match)){} + return this.pos > start +}; +StringStream.prototype.eatSpace = function () { + var this$1 = this; + + var start = this.pos + while (/[\s\u00a0]/.test(this.string.charAt(this.pos))) { ++this$1.pos } + return this.pos > start +}; +StringStream.prototype.skipToEnd = function () {this.pos = this.string.length}; +StringStream.prototype.skipTo = function (ch) { + var found = this.string.indexOf(ch, this.pos) + if (found > -1) {this.pos = found; return true} +}; +StringStream.prototype.backUp = function (n) {this.pos -= n}; +StringStream.prototype.column = function () { + if (this.lastColumnPos < this.start) { + this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue) + this.lastColumnPos = this.start + } + return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) +}; +StringStream.prototype.indentation = function () { + return countColumn(this.string, null, this.tabSize) - + (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0) +}; +StringStream.prototype.match = function (pattern, consume, caseInsensitive) { + if (typeof pattern == "string") { + var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; } + var substr = this.string.substr(this.pos, pattern.length) + if (cased(substr) == cased(pattern)) { + if (consume !== false) { this.pos += pattern.length } + return true + } + } else { + var match = this.string.slice(this.pos).match(pattern) + if (match && match.index > 0) { return null } + if (match && consume !== false) { this.pos += match[0].length } + return match + } +}; +StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)}; +StringStream.prototype.hideFirstChars = function (n, inner) { + this.lineStart += n + try { return inner() } + finally { this.lineStart -= n } +}; + +// Compute a style array (an array starting with a mode generation +// -- for invalidation -- followed by pairs of end positions and +// style strings), which is used to highlight the tokens on the +// line. +function highlightLine(cm, line, state, forceToEnd) { + // A styles array always starts with a number identifying the + // mode/overlays that it is based on (for easy invalidation). + var st = [cm.state.modeGen], lineClasses = {} + // Compute the base array of styles + runMode(cm, line.text, cm.doc.mode, state, function (end, style) { return st.push(end, style); }, + lineClasses, forceToEnd) + + // Run overlays, adjust style array. + var loop = function ( o ) { + var overlay = cm.state.overlays[o], i = 1, at = 0 + runMode(cm, line.text, overlay.mode, true, function (end, style) { + var start = i + // Ensure there's a token end at the current position, and that i points at it + while (at < end) { + var i_end = st[i] + if (i_end > end) + { st.splice(i, 1, end, st[i+1], i_end) } + i += 2 + at = Math.min(end, i_end) + } + if (!style) { return } + if (overlay.opaque) { + st.splice(start, i - start, end, "overlay " + style) + i = start + 2 + } else { + for (; start < i; start += 2) { + var cur = st[start+1] + st[start+1] = (cur ? cur + " " : "") + "overlay " + style + } + } + }, lineClasses) + }; + + for (var o = 0; o < cm.state.overlays.length; ++o) loop( o ); + + return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null} +} + +function getLineStyles(cm, line, updateFrontier) { + if (!line.styles || line.styles[0] != cm.state.modeGen) { + var state = getStateBefore(cm, lineNo(line)) + var result = highlightLine(cm, line, line.text.length > cm.options.maxHighlightLength ? copyState(cm.doc.mode, state) : state) + line.stateAfter = state + line.styles = result.styles + if (result.classes) { line.styleClasses = result.classes } + else if (line.styleClasses) { line.styleClasses = null } + if (updateFrontier === cm.doc.frontier) { cm.doc.frontier++ } + } + return line.styles +} + +function getStateBefore(cm, n, precise) { + var doc = cm.doc, display = cm.display + if (!doc.mode.startState) { return true } + var pos = findStartLine(cm, n, precise), state = pos > doc.first && getLine(doc, pos-1).stateAfter + if (!state) { state = startState(doc.mode) } + else { state = copyState(doc.mode, state) } + doc.iter(pos, n, function (line) { + processLine(cm, line.text, state) + var save = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo + line.stateAfter = save ? copyState(doc.mode, state) : null + ++pos + }) + if (precise) { doc.frontier = pos } + return state +} + +// Lightweight form of highlight -- proceed over this line and +// update state, but don't save a style array. Used for lines that +// aren't currently visible. +function processLine(cm, text, state, startAt) { + var mode = cm.doc.mode + var stream = new StringStream(text, cm.options.tabSize) + stream.start = stream.pos = startAt || 0 + if (text == "") { callBlankLine(mode, state) } + while (!stream.eol()) { + readToken(mode, stream, state) + stream.start = stream.pos + } +} + +function callBlankLine(mode, state) { + if (mode.blankLine) { return mode.blankLine(state) } + if (!mode.innerMode) { return } + var inner = innerMode(mode, state) + if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) } +} + +function readToken(mode, stream, state, inner) { + for (var i = 0; i < 10; i++) { + if (inner) { inner[0] = innerMode(mode, state).mode } + var style = mode.token(stream, state) + if (stream.pos > stream.start) { return style } + } + throw new Error("Mode " + mode.name + " failed to advance stream.") +} + +// Utility for getTokenAt and getLineTokens +function takeToken(cm, pos, precise, asArray) { + var getObj = function (copy) { return ({ + start: stream.start, end: stream.pos, + string: stream.current(), + type: style || null, + state: copy ? copyState(doc.mode, state) : state + }); } + + var doc = cm.doc, mode = doc.mode, style + pos = clipPos(doc, pos) + var line = getLine(doc, pos.line), state = getStateBefore(cm, pos.line, precise) + var stream = new StringStream(line.text, cm.options.tabSize), tokens + if (asArray) { tokens = [] } + while ((asArray || stream.pos < pos.ch) && !stream.eol()) { + stream.start = stream.pos + style = readToken(mode, stream, state) + if (asArray) { tokens.push(getObj(true)) } + } + return asArray ? tokens : getObj() +} + +function extractLineClasses(type, output) { + if (type) { for (;;) { + var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/) + if (!lineClass) { break } + type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length) + var prop = lineClass[1] ? "bgClass" : "textClass" + if (output[prop] == null) + { output[prop] = lineClass[2] } + else if (!(new RegExp("(?:^|\s)" + lineClass[2] + "(?:$|\s)")).test(output[prop])) + { output[prop] += " " + lineClass[2] } + } } + return type +} + +// Run the given mode's parser over a line, calling f for each token. +function runMode(cm, text, mode, state, f, lineClasses, forceToEnd) { + var flattenSpans = mode.flattenSpans + if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans } + var curStart = 0, curStyle = null + var stream = new StringStream(text, cm.options.tabSize), style + var inner = cm.options.addModeClass && [null] + if (text == "") { extractLineClasses(callBlankLine(mode, state), lineClasses) } + while (!stream.eol()) { + if (stream.pos > cm.options.maxHighlightLength) { + flattenSpans = false + if (forceToEnd) { processLine(cm, text, state, stream.pos) } + stream.pos = text.length + style = null + } else { + style = extractLineClasses(readToken(mode, stream, state, inner), lineClasses) + } + if (inner) { + var mName = inner[0].name + if (mName) { style = "m-" + (style ? mName + " " + style : mName) } + } + if (!flattenSpans || curStyle != style) { + while (curStart < stream.start) { + curStart = Math.min(stream.start, curStart + 5000) + f(curStart, curStyle) + } + curStyle = style + } + stream.start = stream.pos + } + while (curStart < stream.pos) { + // Webkit seems to refuse to render text nodes longer than 57444 + // characters, and returns inaccurate measurements in nodes + // starting around 5000 chars. + var pos = Math.min(stream.pos, curStart + 5000) + f(pos, curStyle) + curStart = pos + } +} + +// Finds the line to start with when starting a parse. Tries to +// find a line with a stateAfter, so that it can start with a +// valid state. If that fails, it returns the line with the +// smallest indentation, which tends to need the least context to +// parse correctly. +function findStartLine(cm, n, precise) { + var minindent, minline, doc = cm.doc + var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100) + for (var search = n; search > lim; --search) { + if (search <= doc.first) { return doc.first } + var line = getLine(doc, search - 1) + if (line.stateAfter && (!precise || search <= doc.frontier)) { return search } + var indented = countColumn(line.text, null, cm.options.tabSize) + if (minline == null || minindent > indented) { + minline = search - 1 + minindent = indented + } + } + return minline +} + +// LINE DATA STRUCTURE + +// Line objects. These hold state related to a line, including +// highlighting info (the styles array). +var Line = function(text, markedSpans, estimateHeight) { + this.text = text + attachMarkedSpans(this, markedSpans) + this.height = estimateHeight ? estimateHeight(this) : 1 +}; + +Line.prototype.lineNo = function () { return lineNo(this) }; +eventMixin(Line) + +// Change the content (text, markers) of a line. Automatically +// invalidates cached information and tries to re-estimate the +// line's height. +function updateLine(line, text, markedSpans, estimateHeight) { + line.text = text + if (line.stateAfter) { line.stateAfter = null } + if (line.styles) { line.styles = null } + if (line.order != null) { line.order = null } + detachMarkedSpans(line) + attachMarkedSpans(line, markedSpans) + var estHeight = estimateHeight ? estimateHeight(line) : 1 + if (estHeight != line.height) { updateLineHeight(line, estHeight) } +} + +// Detach a line from the document tree and its markers. +function cleanUpLine(line) { + line.parent = null + detachMarkedSpans(line) +} + +// Convert a style as returned by a mode (either null, or a string +// containing one or more styles) to a CSS style. This is cached, +// and also looks for line-wide styles. +var styleToClassCache = {}; +var styleToClassCacheWithMode = {}; +function interpretTokenStyle(style, options) { + if (!style || /^\s*$/.test(style)) { return null } + var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache + return cache[style] || + (cache[style] = style.replace(/\S+/g, "cm-$&")) +} + +// Render the DOM representation of the text of a line. Also builds +// up a 'line map', which points at the DOM nodes that represent +// specific stretches of text, and is used by the measuring code. +// The returned object contains the DOM node, this map, and +// information about line-wide styles that were set by the mode. +function buildLineContent(cm, lineView) { + // The padding-right forces the element to have a 'border', which + // is needed on Webkit to be able to get line-level bounding + // rectangles for it (in measureChar). + var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null) + var builder = {pre: eltP("pre", [content], "CodeMirror-line"), content: content, + col: 0, pos: 0, cm: cm, + trailingSpace: false, + splitSpaces: (ie || webkit) && cm.getOption("lineWrapping")} + lineView.measure = {} + + // Iterate over the logical lines that make up this visual line. + for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) { + var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0) + builder.pos = 0 + builder.addToken = buildToken + // Optionally wire in some hacks into the token-rendering + // algorithm, to deal with browser quirks. + if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) + { builder.addToken = buildTokenBadBidi(builder.addToken, order) } + builder.map = [] + var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line) + insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate)) + if (line.styleClasses) { + if (line.styleClasses.bgClass) + { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "") } + if (line.styleClasses.textClass) + { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "") } + } + + // Ensure at least a single node is present, for measuring. + if (builder.map.length == 0) + { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))) } + + // Store the map and a cache object for the current logical line + if (i == 0) { + lineView.measure.map = builder.map + lineView.measure.cache = {} + } else { + ;(lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map) + ;(lineView.measure.caches || (lineView.measure.caches = [])).push({}) + } + } + + // See issue #2901 + if (webkit) { + var last = builder.content.lastChild + if (/\bcm-tab\b/.test(last.className) || (last.querySelector && last.querySelector(".cm-tab"))) + { builder.content.className = "cm-tab-wrap-hack" } + } + + signal(cm, "renderLine", cm, lineView.line, builder.pre) + if (builder.pre.className) + { builder.textClass = joinClasses(builder.pre.className, builder.textClass || "") } + + return builder +} + +function defaultSpecialCharPlaceholder(ch) { + var token = elt("span", "\u2022", "cm-invalidchar") + token.title = "\\u" + ch.charCodeAt(0).toString(16) + token.setAttribute("aria-label", token.title) + return token +} + +// Build up the DOM representation for a single token, and add it to +// the line map. Takes care to render special characters separately. +function buildToken(builder, text, style, startStyle, endStyle, title, css) { + if (!text) { return } + var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text + var special = builder.cm.state.specialChars, mustWrap = false + var content + if (!special.test(text)) { + builder.col += text.length + content = document.createTextNode(displayText) + builder.map.push(builder.pos, builder.pos + text.length, content) + if (ie && ie_version < 9) { mustWrap = true } + builder.pos += text.length + } else { + content = document.createDocumentFragment() + var pos = 0 + while (true) { + special.lastIndex = pos + var m = special.exec(text) + var skipped = m ? m.index - pos : text.length - pos + if (skipped) { + var txt = document.createTextNode(displayText.slice(pos, pos + skipped)) + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt])) } + else { content.appendChild(txt) } + builder.map.push(builder.pos, builder.pos + skipped, txt) + builder.col += skipped + builder.pos += skipped + } + if (!m) { break } + pos += skipped + 1 + var txt$1 = (void 0) + if (m[0] == "\t") { + var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize + txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab")) + txt$1.setAttribute("role", "presentation") + txt$1.setAttribute("cm-text", "\t") + builder.col += tabWidth + } else if (m[0] == "\r" || m[0] == "\n") { + txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar")) + txt$1.setAttribute("cm-text", m[0]) + builder.col += 1 + } else { + txt$1 = builder.cm.options.specialCharPlaceholder(m[0]) + txt$1.setAttribute("cm-text", m[0]) + if (ie && ie_version < 9) { content.appendChild(elt("span", [txt$1])) } + else { content.appendChild(txt$1) } + builder.col += 1 + } + builder.map.push(builder.pos, builder.pos + 1, txt$1) + builder.pos++ + } + } + builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32 + if (style || startStyle || endStyle || mustWrap || css) { + var fullStyle = style || "" + if (startStyle) { fullStyle += startStyle } + if (endStyle) { fullStyle += endStyle } + var token = elt("span", [content], fullStyle, css) + if (title) { token.title = title } + return builder.content.appendChild(token) + } + builder.content.appendChild(content) +} + +function splitSpaces(text, trailingBefore) { + if (text.length > 1 && !/ /.test(text)) { return text } + var spaceBefore = trailingBefore, result = "" + for (var i = 0; i < text.length; i++) { + var ch = text.charAt(i) + if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) + { ch = "\u00a0" } + result += ch + spaceBefore = ch == " " + } + return result +} + +// Work around nonsense dimensions being reported for stretches of +// right-to-left text. +function buildTokenBadBidi(inner, order) { + return function (builder, text, style, startStyle, endStyle, title, css) { + style = style ? style + " cm-force-border" : "cm-force-border" + var start = builder.pos, end = start + text.length + for (;;) { + // Find the part that overlaps with the start of this text + var part = (void 0) + for (var i = 0; i < order.length; i++) { + part = order[i] + if (part.to > start && part.from <= start) { break } + } + if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, title, css) } + inner(builder, text.slice(0, part.to - start), style, startStyle, null, title, css) + startStyle = null + text = text.slice(part.to - start) + start = part.to + } + } +} + +function buildCollapsedSpan(builder, size, marker, ignoreWidget) { + var widget = !ignoreWidget && marker.widgetNode + if (widget) { builder.map.push(builder.pos, builder.pos + size, widget) } + if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) { + if (!widget) + { widget = builder.content.appendChild(document.createElement("span")) } + widget.setAttribute("cm-marker", marker.id) + } + if (widget) { + builder.cm.display.input.setUneditable(widget) + builder.content.appendChild(widget) + } + builder.pos += size + builder.trailingSpace = false +} + +// Outputs a number of spans to make up a line, taking highlighting +// and marked text into account. +function insertLineContent(line, builder, styles) { + var spans = line.markedSpans, allText = line.text, at = 0 + if (!spans) { + for (var i$1 = 1; i$1 < styles.length; i$1+=2) + { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)) } + return + } + + var len = allText.length, pos = 0, i = 1, text = "", style, css + var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, title, collapsed + for (;;) { + if (nextChange == pos) { // Update current marker set + spanStyle = spanEndStyle = spanStartStyle = title = css = "" + collapsed = null; nextChange = Infinity + var foundBookmarks = [], endStyles = (void 0) + for (var j = 0; j < spans.length; ++j) { + var sp = spans[j], m = sp.marker + if (m.type == "bookmark" && sp.from == pos && m.widgetNode) { + foundBookmarks.push(m) + } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) { + if (sp.to != null && sp.to != pos && nextChange > sp.to) { + nextChange = sp.to + spanEndStyle = "" + } + if (m.className) { spanStyle += " " + m.className } + if (m.css) { css = (css ? css + ";" : "") + m.css } + if (m.startStyle && sp.from == pos) { spanStartStyle += " " + m.startStyle } + if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to) } + if (m.title && !title) { title = m.title } + if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) + { collapsed = sp } + } else if (sp.from > pos && nextChange > sp.from) { + nextChange = sp.from + } + } + if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) + { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += " " + endStyles[j$1] } } } + + if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) + { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]) } } + if (collapsed && (collapsed.from || 0) == pos) { + buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, + collapsed.marker, collapsed.from == null) + if (collapsed.to == null) { return } + if (collapsed.to == pos) { collapsed = false } + } + } + if (pos >= len) { break } + + var upto = Math.min(len, nextChange) + while (true) { + if (text) { + var end = pos + text.length + if (!collapsed) { + var tokenText = end > upto ? text.slice(0, upto - pos) : text + builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, + spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", title, css) + } + if (end >= upto) {text = text.slice(upto - pos); pos = upto; break} + pos = end + spanStartStyle = "" + } + text = allText.slice(at, at = styles[i++]) + style = interpretTokenStyle(styles[i++], builder.cm.options) + } + } +} + + +// These objects are used to represent the visible (currently drawn) +// part of the document. A LineView may correspond to multiple +// logical lines, if those are connected by collapsed ranges. +function LineView(doc, line, lineN) { + // The starting line + this.line = line + // Continuing lines, if any + this.rest = visualLineContinued(line) + // Number of logical lines in this visual line + this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1 + this.node = this.text = null + this.hidden = lineIsHidden(doc, line) +} + +// Create a range of LineView objects for the given lines. +function buildViewArray(cm, from, to) { + var array = [], nextPos + for (var pos = from; pos < to; pos = nextPos) { + var view = new LineView(cm.doc, getLine(cm.doc, pos), pos) + nextPos = pos + view.size + array.push(view) + } + return array +} + +var operationGroup = null + +function pushOperation(op) { + if (operationGroup) { + operationGroup.ops.push(op) + } else { + op.ownsGroup = operationGroup = { + ops: [op], + delayedCallbacks: [] + } + } +} + +function fireCallbacksForOps(group) { + // Calls delayed callbacks and cursorActivity handlers until no + // new ones appear + var callbacks = group.delayedCallbacks, i = 0 + do { + for (; i < callbacks.length; i++) + { callbacks[i].call(null) } + for (var j = 0; j < group.ops.length; j++) { + var op = group.ops[j] + if (op.cursorActivityHandlers) + { while (op.cursorActivityCalled < op.cursorActivityHandlers.length) + { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm) } } + } + } while (i < callbacks.length) +} + +function finishOperation(op, endCb) { + var group = op.ownsGroup + if (!group) { return } + + try { fireCallbacksForOps(group) } + finally { + operationGroup = null + endCb(group) + } +} + +var orphanDelayedCallbacks = null + +// Often, we want to signal events at a point where we are in the +// middle of some work, but don't want the handler to start calling +// other methods on the editor, which might be in an inconsistent +// state or simply not expect any other events to happen. +// signalLater looks whether there are any handlers, and schedules +// them to be executed when the last operation ends, or, if no +// operation is active, when a timeout fires. +function signalLater(emitter, type /*, values...*/) { + var arr = getHandlers(emitter, type) + if (!arr.length) { return } + var args = Array.prototype.slice.call(arguments, 2), list + if (operationGroup) { + list = operationGroup.delayedCallbacks + } else if (orphanDelayedCallbacks) { + list = orphanDelayedCallbacks + } else { + list = orphanDelayedCallbacks = [] + setTimeout(fireOrphanDelayed, 0) + } + var loop = function ( i ) { + list.push(function () { return arr[i].apply(null, args); }) + }; + + for (var i = 0; i < arr.length; ++i) + loop( i ); +} + +function fireOrphanDelayed() { + var delayed = orphanDelayedCallbacks + orphanDelayedCallbacks = null + for (var i = 0; i < delayed.length; ++i) { delayed[i]() } +} + +// When an aspect of a line changes, a string is added to +// lineView.changes. This updates the relevant part of the line's +// DOM structure. +function updateLineForChanges(cm, lineView, lineN, dims) { + for (var j = 0; j < lineView.changes.length; j++) { + var type = lineView.changes[j] + if (type == "text") { updateLineText(cm, lineView) } + else if (type == "gutter") { updateLineGutter(cm, lineView, lineN, dims) } + else if (type == "class") { updateLineClasses(cm, lineView) } + else if (type == "widget") { updateLineWidgets(cm, lineView, dims) } + } + lineView.changes = null +} + +// Lines with gutter elements, widgets or a background class need to +// be wrapped, and have the extra elements added to the wrapper div +function ensureLineWrapped(lineView) { + if (lineView.node == lineView.text) { + lineView.node = elt("div", null, null, "position: relative") + if (lineView.text.parentNode) + { lineView.text.parentNode.replaceChild(lineView.node, lineView.text) } + lineView.node.appendChild(lineView.text) + if (ie && ie_version < 8) { lineView.node.style.zIndex = 2 } + } + return lineView.node +} + +function updateLineBackground(cm, lineView) { + var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass + if (cls) { cls += " CodeMirror-linebackground" } + if (lineView.background) { + if (cls) { lineView.background.className = cls } + else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null } + } else if (cls) { + var wrap = ensureLineWrapped(lineView) + lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild) + cm.display.input.setUneditable(lineView.background) + } +} + +// Wrapper around buildLineContent which will reuse the structure +// in display.externalMeasured when possible. +function getLineContent(cm, lineView) { + var ext = cm.display.externalMeasured + if (ext && ext.line == lineView.line) { + cm.display.externalMeasured = null + lineView.measure = ext.measure + return ext.built + } + return buildLineContent(cm, lineView) +} + +// Redraw the line's text. Interacts with the background and text +// classes because the mode may output tokens that influence these +// classes. +function updateLineText(cm, lineView) { + var cls = lineView.text.className + var built = getLineContent(cm, lineView) + if (lineView.text == lineView.node) { lineView.node = built.pre } + lineView.text.parentNode.replaceChild(built.pre, lineView.text) + lineView.text = built.pre + if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) { + lineView.bgClass = built.bgClass + lineView.textClass = built.textClass + updateLineClasses(cm, lineView) + } else if (cls) { + lineView.text.className = cls + } +} + +function updateLineClasses(cm, lineView) { + updateLineBackground(cm, lineView) + if (lineView.line.wrapClass) + { ensureLineWrapped(lineView).className = lineView.line.wrapClass } + else if (lineView.node != lineView.text) + { lineView.node.className = "" } + var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass + lineView.text.className = textClass || "" +} + +function updateLineGutter(cm, lineView, lineN, dims) { + if (lineView.gutter) { + lineView.node.removeChild(lineView.gutter) + lineView.gutter = null + } + if (lineView.gutterBackground) { + lineView.node.removeChild(lineView.gutterBackground) + lineView.gutterBackground = null + } + if (lineView.line.gutterClass) { + var wrap = ensureLineWrapped(lineView) + lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, + ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + (dims.gutterTotalWidth) + "px")) + cm.display.input.setUneditable(lineView.gutterBackground) + wrap.insertBefore(lineView.gutterBackground, lineView.text) + } + var markers = lineView.line.gutterMarkers + if (cm.options.lineNumbers || markers) { + var wrap$1 = ensureLineWrapped(lineView) + var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", ("left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px")) + cm.display.input.setUneditable(gutterWrap) + wrap$1.insertBefore(gutterWrap, lineView.text) + if (lineView.line.gutterClass) + { gutterWrap.className += " " + lineView.line.gutterClass } + if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) + { lineView.lineNumber = gutterWrap.appendChild( + elt("div", lineNumberFor(cm.options, lineN), + "CodeMirror-linenumber CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft["CodeMirror-linenumbers"]) + "px; width: " + (cm.display.lineNumInnerWidth) + "px"))) } + if (markers) { for (var k = 0; k < cm.options.gutters.length; ++k) { + var id = cm.options.gutters[k], found = markers.hasOwnProperty(id) && markers[id] + if (found) + { gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", + ("left: " + (dims.gutterLeft[id]) + "px; width: " + (dims.gutterWidth[id]) + "px"))) } + } } + } +} + +function updateLineWidgets(cm, lineView, dims) { + if (lineView.alignable) { lineView.alignable = null } + for (var node = lineView.node.firstChild, next = (void 0); node; node = next) { + next = node.nextSibling + if (node.className == "CodeMirror-linewidget") + { lineView.node.removeChild(node) } + } + insertLineWidgets(cm, lineView, dims) +} + +// Build a line's DOM representation from scratch +function buildLineElement(cm, lineView, lineN, dims) { + var built = getLineContent(cm, lineView) + lineView.text = lineView.node = built.pre + if (built.bgClass) { lineView.bgClass = built.bgClass } + if (built.textClass) { lineView.textClass = built.textClass } + + updateLineClasses(cm, lineView) + updateLineGutter(cm, lineView, lineN, dims) + insertLineWidgets(cm, lineView, dims) + return lineView.node +} + +// A lineView may contain multiple logical lines (when merged by +// collapsed spans). The widgets for all of them need to be drawn. +function insertLineWidgets(cm, lineView, dims) { + insertLineWidgetsFor(cm, lineView.line, lineView, dims, true) + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false) } } +} + +function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) { + if (!line.widgets) { return } + var wrap = ensureLineWrapped(lineView) + for (var i = 0, ws = line.widgets; i < ws.length; ++i) { + var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget") + if (!widget.handleMouseEvents) { node.setAttribute("cm-ignore-events", "true") } + positionLineWidget(widget, node, lineView, dims) + cm.display.input.setUneditable(node) + if (allowAbove && widget.above) + { wrap.insertBefore(node, lineView.gutter || lineView.text) } + else + { wrap.appendChild(node) } + signalLater(widget, "redraw") + } +} + +function positionLineWidget(widget, node, lineView, dims) { + if (widget.noHScroll) { + ;(lineView.alignable || (lineView.alignable = [])).push(node) + var width = dims.wrapperWidth + node.style.left = dims.fixedPos + "px" + if (!widget.coverGutter) { + width -= dims.gutterTotalWidth + node.style.paddingLeft = dims.gutterTotalWidth + "px" + } + node.style.width = width + "px" + } + if (widget.coverGutter) { + node.style.zIndex = 5 + node.style.position = "relative" + if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + "px" } + } +} + +function widgetHeight(widget) { + if (widget.height != null) { return widget.height } + var cm = widget.doc.cm + if (!cm) { return 0 } + if (!contains(document.body, widget.node)) { + var parentStyle = "position: relative;" + if (widget.coverGutter) + { parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;" } + if (widget.noHScroll) + { parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;" } + removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle)) + } + return widget.height = widget.node.parentNode.offsetHeight +} + +// Return true when the given mouse event happened in a widget +function eventInWidget(display, e) { + for (var n = e_target(e); n != display.wrapper; n = n.parentNode) { + if (!n || (n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true") || + (n.parentNode == display.sizer && n != display.mover)) + { return true } + } +} + +// POSITION MEASUREMENT + +function paddingTop(display) {return display.lineSpace.offsetTop} +function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight} +function paddingH(display) { + if (display.cachedPaddingH) { return display.cachedPaddingH } + var e = removeChildrenAndAdd(display.measure, elt("pre", "x")) + var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle + var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)} + if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data } + return data +} + +function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth } +function displayWidth(cm) { + return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth +} +function displayHeight(cm) { + return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight +} + +// Ensure the lineView.wrapping.heights array is populated. This is +// an array of bottom offsets for the lines that make up a drawn +// line. When lineWrapping is on, there might be more than one +// height. +function ensureLineHeights(cm, lineView, rect) { + var wrapping = cm.options.lineWrapping + var curWidth = wrapping && displayWidth(cm) + if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) { + var heights = lineView.measure.heights = [] + if (wrapping) { + lineView.measure.width = curWidth + var rects = lineView.text.firstChild.getClientRects() + for (var i = 0; i < rects.length - 1; i++) { + var cur = rects[i], next = rects[i + 1] + if (Math.abs(cur.bottom - next.bottom) > 2) + { heights.push((cur.bottom + next.top) / 2 - rect.top) } + } + } + heights.push(rect.bottom - rect.top) + } +} + +// Find a line map (mapping character offsets to text nodes) and a +// measurement cache for the given line number. (A line view might +// contain multiple lines when collapsed ranges are present.) +function mapFromLineView(lineView, line, lineN) { + if (lineView.line == line) + { return {map: lineView.measure.map, cache: lineView.measure.cache} } + for (var i = 0; i < lineView.rest.length; i++) + { if (lineView.rest[i] == line) + { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } } + for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) + { if (lineNo(lineView.rest[i$1]) > lineN) + { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } } +} + +// Render a line into the hidden node display.externalMeasured. Used +// when measurement is needed for a line that's not in the viewport. +function updateExternalMeasurement(cm, line) { + line = visualLine(line) + var lineN = lineNo(line) + var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN) + view.lineN = lineN + var built = view.built = buildLineContent(cm, view) + view.text = built.pre + removeChildrenAndAdd(cm.display.lineMeasure, built.pre) + return view +} + +// Get a {top, bottom, left, right} box (in line-local coordinates) +// for a given character. +function measureChar(cm, line, ch, bias) { + return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias) +} + +// Find a line view that corresponds to the given line number. +function findViewForLine(cm, lineN) { + if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) + { return cm.display.view[findViewIndex(cm, lineN)] } + var ext = cm.display.externalMeasured + if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) + { return ext } +} + +// Measurement can be split in two steps, the set-up work that +// applies to the whole line, and the measurement of the actual +// character. Functions like coordsChar, that need to do a lot of +// measurements in a row, can thus ensure that the set-up work is +// only done once. +function prepareMeasureForLine(cm, line) { + var lineN = lineNo(line) + var view = findViewForLine(cm, lineN) + if (view && !view.text) { + view = null + } else if (view && view.changes) { + updateLineForChanges(cm, view, lineN, getDimensions(cm)) + cm.curOp.forceUpdate = true + } + if (!view) + { view = updateExternalMeasurement(cm, line) } + + var info = mapFromLineView(view, line, lineN) + return { + line: line, view: view, rect: null, + map: info.map, cache: info.cache, before: info.before, + hasHeights: false + } +} + +// Given a prepared measurement object, measures the position of an +// actual character (or fetches it from the cache). +function measureCharPrepared(cm, prepared, ch, bias, varHeight) { + if (prepared.before) { ch = -1 } + var key = ch + (bias || ""), found + if (prepared.cache.hasOwnProperty(key)) { + found = prepared.cache[key] + } else { + if (!prepared.rect) + { prepared.rect = prepared.view.text.getBoundingClientRect() } + if (!prepared.hasHeights) { + ensureLineHeights(cm, prepared.view, prepared.rect) + prepared.hasHeights = true + } + found = measureCharInner(cm, prepared, ch, bias) + if (!found.bogus) { prepared.cache[key] = found } + } + return {left: found.left, right: found.right, + top: varHeight ? found.rtop : found.top, + bottom: varHeight ? found.rbottom : found.bottom} +} + +var nullRect = {left: 0, right: 0, top: 0, bottom: 0} + +function nodeAndOffsetInLineMap(map, ch, bias) { + var node, start, end, collapse, mStart, mEnd + // First, search the line map for the text node corresponding to, + // or closest to, the target character. + for (var i = 0; i < map.length; i += 3) { + mStart = map[i] + mEnd = map[i + 1] + if (ch < mStart) { + start = 0; end = 1 + collapse = "left" + } else if (ch < mEnd) { + start = ch - mStart + end = start + 1 + } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) { + end = mEnd - mStart + start = end - 1 + if (ch >= mEnd) { collapse = "right" } + } + if (start != null) { + node = map[i + 2] + if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) + { collapse = bias } + if (bias == "left" && start == 0) + { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) { + node = map[(i -= 3) + 2] + collapse = "left" + } } + if (bias == "right" && start == mEnd - mStart) + { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) { + node = map[(i += 3) + 2] + collapse = "right" + } } + break + } + } + return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd} +} + +function getUsefulRect(rects, bias) { + var rect = nullRect + if (bias == "left") { for (var i = 0; i < rects.length; i++) { + if ((rect = rects[i]).left != rect.right) { break } + } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) { + if ((rect = rects[i$1]).left != rect.right) { break } + } } + return rect +} + +function measureCharInner(cm, prepared, ch, bias) { + var place = nodeAndOffsetInLineMap(prepared.map, ch, bias) + var node = place.node, start = place.start, end = place.end, collapse = place.collapse + + var rect + if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates. + for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned + while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start } + while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end } + if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) + { rect = node.parentNode.getBoundingClientRect() } + else + { rect = getUsefulRect(range(node, start, end).getClientRects(), bias) } + if (rect.left || rect.right || start == 0) { break } + end = start + start = start - 1 + collapse = "right" + } + if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect) } + } else { // If it is a widget, simply get the box for the whole widget. + if (start > 0) { collapse = bias = "right" } + var rects + if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) + { rect = rects[bias == "right" ? rects.length - 1 : 0] } + else + { rect = node.getBoundingClientRect() } + } + if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) { + var rSpan = node.parentNode.getClientRects()[0] + if (rSpan) + { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom} } + else + { rect = nullRect } + } + + var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top + var mid = (rtop + rbot) / 2 + var heights = prepared.view.measure.heights + var i = 0 + for (; i < heights.length - 1; i++) + { if (mid < heights[i]) { break } } + var top = i ? heights[i - 1] : 0, bot = heights[i] + var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left, + right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left, + top: top, bottom: bot} + if (!rect.left && !rect.right) { result.bogus = true } + if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot } + + return result +} + +// Work around problem with bounding client rects on ranges being +// returned incorrectly when zoomed on IE10 and below. +function maybeUpdateRectForZooming(measure, rect) { + if (!window.screen || screen.logicalXDPI == null || + screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) + { return rect } + var scaleX = screen.logicalXDPI / screen.deviceXDPI + var scaleY = screen.logicalYDPI / screen.deviceYDPI + return {left: rect.left * scaleX, right: rect.right * scaleX, + top: rect.top * scaleY, bottom: rect.bottom * scaleY} +} + +function clearLineMeasurementCacheFor(lineView) { + if (lineView.measure) { + lineView.measure.cache = {} + lineView.measure.heights = null + if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++) + { lineView.measure.caches[i] = {} } } + } +} + +function clearLineMeasurementCache(cm) { + cm.display.externalMeasure = null + removeChildren(cm.display.lineMeasure) + for (var i = 0; i < cm.display.view.length; i++) + { clearLineMeasurementCacheFor(cm.display.view[i]) } +} + +function clearCaches(cm) { + clearLineMeasurementCache(cm) + cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null + if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true } + cm.display.lineNumChars = null +} + +function pageScrollX() { + // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206 + // which causes page_Offset and bounding client rects to use + // different reference viewports and invalidate our calculations. + if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) } + return window.pageXOffset || (document.documentElement || document.body).scrollLeft +} +function pageScrollY() { + if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) } + return window.pageYOffset || (document.documentElement || document.body).scrollTop +} + +// Converts a {top, bottom, left, right} box from line-local +// coordinates into another coordinate system. Context may be one of +// "line", "div" (display.lineDiv), "local"./null (editor), "window", +// or "page". +function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) { + if (!includeWidgets && lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above) { + var size = widgetHeight(lineObj.widgets[i]) + rect.top += size; rect.bottom += size + } } } + if (context == "line") { return rect } + if (!context) { context = "local" } + var yOff = heightAtLine(lineObj) + if (context == "local") { yOff += paddingTop(cm.display) } + else { yOff -= cm.display.viewOffset } + if (context == "page" || context == "window") { + var lOff = cm.display.lineSpace.getBoundingClientRect() + yOff += lOff.top + (context == "window" ? 0 : pageScrollY()) + var xOff = lOff.left + (context == "window" ? 0 : pageScrollX()) + rect.left += xOff; rect.right += xOff + } + rect.top += yOff; rect.bottom += yOff + return rect +} + +// Coverts a box from "div" coords to another coordinate system. +// Context may be "window", "page", "div", or "local"./null. +function fromCoordSystem(cm, coords, context) { + if (context == "div") { return coords } + var left = coords.left, top = coords.top + // First move into "page" coordinate system + if (context == "page") { + left -= pageScrollX() + top -= pageScrollY() + } else if (context == "local" || !context) { + var localBox = cm.display.sizer.getBoundingClientRect() + left += localBox.left + top += localBox.top + } + + var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect() + return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top} +} + +function charCoords(cm, pos, context, lineObj, bias) { + if (!lineObj) { lineObj = getLine(cm.doc, pos.line) } + return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context) +} + +// Returns a box for a given cursor position, which may have an +// 'other' property containing the position of the secondary cursor +// on a bidi boundary. +// A cursor Pos(line, char, "before") is on the same visual line as `char - 1` +// and after `char - 1` in writing order of `char - 1` +// A cursor Pos(line, char, "after") is on the same visual line as `char` +// and before `char` in writing order of `char` +// Examples (upper-case letters are RTL, lower-case are LTR): +// Pos(0, 1, ...) +// before after +// ab a|b a|b +// aB a|B aB| +// Ab |Ab A|b +// AB B|A B|A +// Every position after the last character on a line is considered to stick +// to the last character on the line. +function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) { + lineObj = lineObj || getLine(cm.doc, pos.line) + if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj) } + function get(ch, right) { + var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight) + if (right) { m.left = m.right; } else { m.right = m.left } + return intoCoordSystem(cm, lineObj, m, context) + } + var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky + if (ch >= lineObj.text.length) { + ch = lineObj.text.length + sticky = "before" + } else if (ch <= 0) { + ch = 0 + sticky = "after" + } + if (!order) { return get(sticky == "before" ? ch - 1 : ch, sticky == "before") } + + function getBidi(ch, partPos, invert) { + var part = order[partPos], right = (part.level % 2) != 0 + return get(invert ? ch - 1 : ch, right != invert) + } + var partPos = getBidiPartAt(order, ch, sticky) + var other = bidiOther + var val = getBidi(ch, partPos, sticky == "before") + if (other != null) { val.other = getBidi(ch, other, sticky != "before") } + return val +} + +// Used to cheaply estimate the coordinates for a position. Used for +// intermediate scroll updates. +function estimateCoords(cm, pos) { + var left = 0 + pos = clipPos(cm.doc, pos) + if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch } + var lineObj = getLine(cm.doc, pos.line) + var top = heightAtLine(lineObj) + paddingTop(cm.display) + return {left: left, right: left, top: top, bottom: top + lineObj.height} +} + +// Positions returned by coordsChar contain some extra information. +// xRel is the relative x position of the input coordinates compared +// to the found position (so xRel > 0 means the coordinates are to +// the right of the character position, for example). When outside +// is true, that means the coordinates lie outside the line's +// vertical range. +function PosWithInfo(line, ch, sticky, outside, xRel) { + var pos = Pos(line, ch, sticky) + pos.xRel = xRel + if (outside) { pos.outside = true } + return pos +} + +// Compute the character position closest to the given coordinates. +// Input must be lineSpace-local ("div" coordinate system). +function coordsChar(cm, x, y) { + var doc = cm.doc + y += cm.display.viewOffset + if (y < 0) { return PosWithInfo(doc.first, 0, null, true, -1) } + var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1 + if (lineN > last) + { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, true, 1) } + if (x < 0) { x = 0 } + + var lineObj = getLine(doc, lineN) + for (;;) { + var found = coordsCharInner(cm, lineObj, lineN, x, y) + var merged = collapsedSpanAtEnd(lineObj) + var mergedPos = merged && merged.find(0, true) + if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0)) + { lineN = lineNo(lineObj = mergedPos.to.line) } + else + { return found } + } +} + +function wrappedLineExtent(cm, lineObj, preparedMeasure, y) { + var measure = function (ch) { return intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), "line"); } + var end = lineObj.text.length + var begin = findFirst(function (ch) { return measure(ch - 1).bottom <= y; }, end, 0) + end = findFirst(function (ch) { return measure(ch).top > y; }, begin, end) + return {begin: begin, end: end} +} + +function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) { + var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top + return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop) +} + +function coordsCharInner(cm, lineObj, lineNo, x, y) { + y -= heightAtLine(lineObj) + var begin = 0, end = lineObj.text.length + var preparedMeasure = prepareMeasureForLine(cm, lineObj) + var pos + var order = getOrder(lineObj, cm.doc.direction) + if (order) { + if (cm.options.lineWrapping) { + ;var assign; + ((assign = wrappedLineExtent(cm, lineObj, preparedMeasure, y), begin = assign.begin, end = assign.end, assign)) + } + pos = new Pos(lineNo, begin) + var beginLeft = cursorCoords(cm, pos, "line", lineObj, preparedMeasure).left + var dir = beginLeft < x ? 1 : -1 + var prevDiff, diff = beginLeft - x, prevPos + do { + prevDiff = diff + prevPos = pos + pos = moveVisually(cm, lineObj, pos, dir) + if (pos == null || pos.ch < begin || end <= (pos.sticky == "before" ? pos.ch - 1 : pos.ch)) { + pos = prevPos + break + } + diff = cursorCoords(cm, pos, "line", lineObj, preparedMeasure).left - x + } while ((dir < 0) != (diff < 0) && (Math.abs(diff) <= Math.abs(prevDiff))) + if (Math.abs(diff) > Math.abs(prevDiff)) { + if ((diff < 0) == (prevDiff < 0)) { throw new Error("Broke out of infinite loop in coordsCharInner") } + pos = prevPos + } + } else { + var ch = findFirst(function (ch) { + var box = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, ch), "line") + if (box.top > y) { + // For the cursor stickiness + end = Math.min(ch, end) + return true + } + else if (box.bottom <= y) { return false } + else if (box.left > x) { return true } + else if (box.right < x) { return false } + else { return (x - box.left < box.right - x) } + }, begin, end) + ch = skipExtendingChars(lineObj.text, ch, 1) + pos = new Pos(lineNo, ch, ch == end ? "before" : "after") + } + var coords = cursorCoords(cm, pos, "line", lineObj, preparedMeasure) + if (y < coords.top || coords.bottom < y) { pos.outside = true } + pos.xRel = x < coords.left ? -1 : (x > coords.right ? 1 : 0) + return pos +} + +var measureText +// Compute the default text height. +function textHeight(display) { + if (display.cachedTextHeight != null) { return display.cachedTextHeight } + if (measureText == null) { + measureText = elt("pre") + // Measure a bunch of lines, for browsers that compute + // fractional heights. + for (var i = 0; i < 49; ++i) { + measureText.appendChild(document.createTextNode("x")) + measureText.appendChild(elt("br")) + } + measureText.appendChild(document.createTextNode("x")) + } + removeChildrenAndAdd(display.measure, measureText) + var height = measureText.offsetHeight / 50 + if (height > 3) { display.cachedTextHeight = height } + removeChildren(display.measure) + return height || 1 +} + +// Compute the default character width. +function charWidth(display) { + if (display.cachedCharWidth != null) { return display.cachedCharWidth } + var anchor = elt("span", "xxxxxxxxxx") + var pre = elt("pre", [anchor]) + removeChildrenAndAdd(display.measure, pre) + var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10 + if (width > 2) { display.cachedCharWidth = width } + return width || 10 +} + +// Do a bulk-read of the DOM positions and sizes needed to draw the +// view, so that we don't interleave reading and writing to the DOM. +function getDimensions(cm) { + var d = cm.display, left = {}, width = {} + var gutterLeft = d.gutters.clientLeft + for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) { + left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft + width[cm.options.gutters[i]] = n.clientWidth + } + return {fixedPos: compensateForHScroll(d), + gutterTotalWidth: d.gutters.offsetWidth, + gutterLeft: left, + gutterWidth: width, + wrapperWidth: d.wrapper.clientWidth} +} + +// Computes display.scroller.scrollLeft + display.gutters.offsetWidth, +// but using getBoundingClientRect to get a sub-pixel-accurate +// result. +function compensateForHScroll(display) { + return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left +} + +// Returns a function that estimates the height of a line, to use as +// first approximation until the line becomes visible (and is thus +// properly measurable). +function estimateHeight(cm) { + var th = textHeight(cm.display), wrapping = cm.options.lineWrapping + var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3) + return function (line) { + if (lineIsHidden(cm.doc, line)) { return 0 } + + var widgetsHeight = 0 + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) { + if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height } + } } + + if (wrapping) + { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th } + else + { return widgetsHeight + th } + } +} + +function estimateLineHeights(cm) { + var doc = cm.doc, est = estimateHeight(cm) + doc.iter(function (line) { + var estHeight = est(line) + if (estHeight != line.height) { updateLineHeight(line, estHeight) } + }) +} + +// Given a mouse event, find the corresponding position. If liberal +// is false, it checks whether a gutter or scrollbar was clicked, +// and returns null if it was. forRect is used by rectangular +// selections, and tries to estimate a character position even for +// coordinates beyond the right of the text. +function posFromMouse(cm, e, liberal, forRect) { + var display = cm.display + if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") { return null } + + var x, y, space = display.lineSpace.getBoundingClientRect() + // Fails unpredictably on IE[67] when mouse is dragged around quickly. + try { x = e.clientX - space.left; y = e.clientY - space.top } + catch (e) { return null } + var coords = coordsChar(cm, x, y), line + if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) { + var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length + coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff)) + } + return coords +} + +// Find the view element corresponding to a given line. Return null +// when the line isn't visible. +function findViewIndex(cm, n) { + if (n >= cm.display.viewTo) { return null } + n -= cm.display.viewFrom + if (n < 0) { return null } + var view = cm.display.view + for (var i = 0; i < view.length; i++) { + n -= view[i].size + if (n < 0) { return i } + } +} + +function updateSelection(cm) { + cm.display.input.showSelection(cm.display.input.prepareSelection()) +} + +function prepareSelection(cm, primary) { + var doc = cm.doc, result = {} + var curFragment = result.cursors = document.createDocumentFragment() + var selFragment = result.selection = document.createDocumentFragment() + + for (var i = 0; i < doc.sel.ranges.length; i++) { + if (primary === false && i == doc.sel.primIndex) { continue } + var range = doc.sel.ranges[i] + if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue } + var collapsed = range.empty() + if (collapsed || cm.options.showCursorWhenSelecting) + { drawSelectionCursor(cm, range.head, curFragment) } + if (!collapsed) + { drawSelectionRange(cm, range, selFragment) } + } + return result +} + +// Draws a cursor for the given range +function drawSelectionCursor(cm, head, output) { + var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine) + + var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor")) + cursor.style.left = pos.left + "px" + cursor.style.top = pos.top + "px" + cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px" + + if (pos.other) { + // Secondary cursor, shown when on a 'jump' in bi-directional text + var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor")) + otherCursor.style.display = "" + otherCursor.style.left = pos.other.left + "px" + otherCursor.style.top = pos.other.top + "px" + otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px" + } +} + +// Draws the given range as a highlighted selection +function drawSelectionRange(cm, range, output) { + var display = cm.display, doc = cm.doc + var fragment = document.createDocumentFragment() + var padding = paddingH(cm.display), leftSide = padding.left + var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right + + function add(left, top, width, bottom) { + if (top < 0) { top = 0 } + top = Math.round(top) + bottom = Math.round(bottom) + fragment.appendChild(elt("div", null, "CodeMirror-selected", ("position: absolute; left: " + left + "px;\n top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n height: " + (bottom - top) + "px"))) + } + + function drawForLine(line, fromArg, toArg) { + var lineObj = getLine(doc, line) + var lineLen = lineObj.text.length + var start, end + function coords(ch, bias) { + return charCoords(cm, Pos(line, ch), "div", lineObj, bias) + } + + iterateBidiSections(getOrder(lineObj, doc.direction), fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir) { + var leftPos = coords(from, "left"), rightPos, left, right + if (from == to) { + rightPos = leftPos + left = right = leftPos.left + } else { + rightPos = coords(to - 1, "right") + if (dir == "rtl") { var tmp = leftPos; leftPos = rightPos; rightPos = tmp } + left = leftPos.left + right = rightPos.right + } + if (fromArg == null && from == 0) { left = leftSide } + if (rightPos.top - leftPos.top > 3) { // Different lines, draw top part + add(left, leftPos.top, null, leftPos.bottom) + left = leftSide + if (leftPos.bottom < rightPos.top) { add(left, leftPos.bottom, null, rightPos.top) } + } + if (toArg == null && to == lineLen) { right = rightSide } + if (!start || leftPos.top < start.top || leftPos.top == start.top && leftPos.left < start.left) + { start = leftPos } + if (!end || rightPos.bottom > end.bottom || rightPos.bottom == end.bottom && rightPos.right > end.right) + { end = rightPos } + if (left < leftSide + 1) { left = leftSide } + add(left, rightPos.top, right - left, rightPos.bottom) + }) + return {start: start, end: end} + } + + var sFrom = range.from(), sTo = range.to() + if (sFrom.line == sTo.line) { + drawForLine(sFrom.line, sFrom.ch, sTo.ch) + } else { + var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line) + var singleVLine = visualLine(fromLine) == visualLine(toLine) + var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end + var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start + if (singleVLine) { + if (leftEnd.top < rightStart.top - 2) { + add(leftEnd.right, leftEnd.top, null, leftEnd.bottom) + add(leftSide, rightStart.top, rightStart.left, rightStart.bottom) + } else { + add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom) + } + } + if (leftEnd.bottom < rightStart.top) + { add(leftSide, leftEnd.bottom, null, rightStart.top) } + } + + output.appendChild(fragment) +} + +// Cursor-blinking +function restartBlink(cm) { + if (!cm.state.focused) { return } + var display = cm.display + clearInterval(display.blinker) + var on = true + display.cursorDiv.style.visibility = "" + if (cm.options.cursorBlinkRate > 0) + { display.blinker = setInterval(function () { return display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden"; }, + cm.options.cursorBlinkRate) } + else if (cm.options.cursorBlinkRate < 0) + { display.cursorDiv.style.visibility = "hidden" } +} + +function ensureFocus(cm) { + if (!cm.state.focused) { cm.display.input.focus(); onFocus(cm) } +} + +function delayBlurEvent(cm) { + cm.state.delayingBlurEvent = true + setTimeout(function () { if (cm.state.delayingBlurEvent) { + cm.state.delayingBlurEvent = false + onBlur(cm) + } }, 100) +} + +function onFocus(cm, e) { + if (cm.state.delayingBlurEvent) { cm.state.delayingBlurEvent = false } + + if (cm.options.readOnly == "nocursor") { return } + if (!cm.state.focused) { + signal(cm, "focus", cm, e) + cm.state.focused = true + addClass(cm.display.wrapper, "CodeMirror-focused") + // This test prevents this from firing when a context + // menu is closed (since the input reset would kill the + // select-all detection hack) + if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) { + cm.display.input.reset() + if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20) } // Issue #1730 + } + cm.display.input.receivedFocus() + } + restartBlink(cm) +} +function onBlur(cm, e) { + if (cm.state.delayingBlurEvent) { return } + + if (cm.state.focused) { + signal(cm, "blur", cm, e) + cm.state.focused = false + rmClass(cm.display.wrapper, "CodeMirror-focused") + } + clearInterval(cm.display.blinker) + setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false } }, 150) +} + +// Re-align line numbers and gutter marks to compensate for +// horizontal scrolling. +function alignHorizontally(cm) { + var display = cm.display, view = display.view + if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return } + var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft + var gutterW = display.gutters.offsetWidth, left = comp + "px" + for (var i = 0; i < view.length; i++) { if (!view[i].hidden) { + if (cm.options.fixedGutter) { + if (view[i].gutter) + { view[i].gutter.style.left = left } + if (view[i].gutterBackground) + { view[i].gutterBackground.style.left = left } + } + var align = view[i].alignable + if (align) { for (var j = 0; j < align.length; j++) + { align[j].style.left = left } } + } } + if (cm.options.fixedGutter) + { display.gutters.style.left = (comp + gutterW) + "px" } +} + +// Used to ensure that the line number gutter is still the right +// size for the current document size. Returns true when an update +// is needed. +function maybeUpdateLineNumberWidth(cm) { + if (!cm.options.lineNumbers) { return false } + var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display + if (last.length != display.lineNumChars) { + var test = display.measure.appendChild(elt("div", [elt("div", last)], + "CodeMirror-linenumber CodeMirror-gutter-elt")) + var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW + display.lineGutter.style.width = "" + display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1 + display.lineNumWidth = display.lineNumInnerWidth + padding + display.lineNumChars = display.lineNumInnerWidth ? last.length : -1 + display.lineGutter.style.width = display.lineNumWidth + "px" + updateGutterSpace(cm) + return true + } + return false +} + +// Read the actual heights of the rendered lines, and update their +// stored heights to match. +function updateHeightsInViewport(cm) { + var display = cm.display + var prevBottom = display.lineDiv.offsetTop + for (var i = 0; i < display.view.length; i++) { + var cur = display.view[i], height = (void 0) + if (cur.hidden) { continue } + if (ie && ie_version < 8) { + var bot = cur.node.offsetTop + cur.node.offsetHeight + height = bot - prevBottom + prevBottom = bot + } else { + var box = cur.node.getBoundingClientRect() + height = box.bottom - box.top + } + var diff = cur.line.height - height + if (height < 2) { height = textHeight(display) } + if (diff > .001 || diff < -.001) { + updateLineHeight(cur.line, height) + updateWidgetHeight(cur.line) + if (cur.rest) { for (var j = 0; j < cur.rest.length; j++) + { updateWidgetHeight(cur.rest[j]) } } + } + } +} + +// Read and store the height of line widgets associated with the +// given line. +function updateWidgetHeight(line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) + { line.widgets[i].height = line.widgets[i].node.parentNode.offsetHeight } } +} + +// Compute the lines that are visible in a given viewport (defaults +// the the current scroll position). viewport may contain top, +// height, and ensure (see op.scrollToPos) properties. +function visibleLines(display, doc, viewport) { + var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop + top = Math.floor(top - paddingTop(display)) + var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight + + var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom) + // Ensure is a {from: {line, ch}, to: {line, ch}} object, and + // forces those lines into the viewport (if possible). + if (viewport && viewport.ensure) { + var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line + if (ensureFrom < from) { + from = ensureFrom + to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight) + } else if (Math.min(ensureTo, doc.lastLine()) >= to) { + from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight) + to = ensureTo + } + } + return {from: from, to: Math.max(to, from + 1)} +} + +// Sync the scrollable area and scrollbars, ensure the viewport +// covers the visible area. +function setScrollTop(cm, val) { + if (Math.abs(cm.doc.scrollTop - val) < 2) { return } + cm.doc.scrollTop = val + if (!gecko) { updateDisplaySimple(cm, {top: val}) } + if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val } + cm.display.scrollbars.setScrollTop(val) + if (gecko) { updateDisplaySimple(cm) } + startWorker(cm, 100) +} +// Sync scroller and scrollbar, ensure the gutter elements are +// aligned. +function setScrollLeft(cm, val, isScroller) { + if (isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) { return } + val = Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth) + cm.doc.scrollLeft = val + alignHorizontally(cm) + if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val } + cm.display.scrollbars.setScrollLeft(val) +} + +// Since the delta values reported on mouse wheel events are +// unstandardized between browsers and even browser versions, and +// generally horribly unpredictable, this code starts by measuring +// the scroll effect that the first few mouse wheel events have, +// and, from that, detects the way it can convert deltas to pixel +// offsets afterwards. +// +// The reason we want to know the amount a wheel event will scroll +// is that it gives us a chance to update the display before the +// actual scrolling happens, reducing flickering. + +var wheelSamples = 0; +var wheelPixelsPerUnit = null; +// Fill in a browser-detected starting value on browsers where we +// know one. These don't have to be accurate -- the result of them +// being wrong would just be a slight flicker on the first wheel +// scroll (if it is large enough). +if (ie) { wheelPixelsPerUnit = -.53 } +else if (gecko) { wheelPixelsPerUnit = 15 } +else if (chrome) { wheelPixelsPerUnit = -.7 } +else if (safari) { wheelPixelsPerUnit = -1/3 } + +function wheelEventDelta(e) { + var dx = e.wheelDeltaX, dy = e.wheelDeltaY + if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail } + if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail } + else if (dy == null) { dy = e.wheelDelta } + return {x: dx, y: dy} +} +function wheelEventPixels(e) { + var delta = wheelEventDelta(e) + delta.x *= wheelPixelsPerUnit + delta.y *= wheelPixelsPerUnit + return delta +} + +function onScrollWheel(cm, e) { + var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y + + var display = cm.display, scroll = display.scroller + // Quit if there's nothing to scroll here + var canScrollX = scroll.scrollWidth > scroll.clientWidth + var canScrollY = scroll.scrollHeight > scroll.clientHeight + if (!(dx && canScrollX || dy && canScrollY)) { return } + + // Webkit browsers on OS X abort momentum scrolls when the target + // of the scroll event is removed from the scrollable element. + // This hack (see related code in patchDisplay) makes sure the + // element is kept around. + if (dy && mac && webkit) { + outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) { + for (var i = 0; i < view.length; i++) { + if (view[i].node == cur) { + cm.display.currentWheelTarget = cur + break outer + } + } + } + } + + // On some browsers, horizontal scrolling will cause redraws to + // happen before the gutter has been realigned, causing it to + // wriggle around in a most unseemly way. When we have an + // estimated pixels/delta value, we just handle horizontal + // scrolling entirely here. It'll be slightly off from native, but + // better than glitching out. + if (dx && !gecko && !presto && wheelPixelsPerUnit != null) { + if (dy && canScrollY) + { setScrollTop(cm, Math.max(0, Math.min(scroll.scrollTop + dy * wheelPixelsPerUnit, scroll.scrollHeight - scroll.clientHeight))) } + setScrollLeft(cm, Math.max(0, Math.min(scroll.scrollLeft + dx * wheelPixelsPerUnit, scroll.scrollWidth - scroll.clientWidth))) + // Only prevent default scrolling if vertical scrolling is + // actually possible. Otherwise, it causes vertical scroll + // jitter on OSX trackpads when deltaX is small and deltaY + // is large (issue #3579) + if (!dy || (dy && canScrollY)) + { e_preventDefault(e) } + display.wheelStartX = null // Abort measurement, if in progress + return + } + + // 'Project' the visible viewport to cover the area that is being + // scrolled into view (if we know enough to estimate it). + if (dy && wheelPixelsPerUnit != null) { + var pixels = dy * wheelPixelsPerUnit + var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight + if (pixels < 0) { top = Math.max(0, top + pixels - 50) } + else { bot = Math.min(cm.doc.height, bot + pixels + 50) } + updateDisplaySimple(cm, {top: top, bottom: bot}) + } + + if (wheelSamples < 20) { + if (display.wheelStartX == null) { + display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop + display.wheelDX = dx; display.wheelDY = dy + setTimeout(function () { + if (display.wheelStartX == null) { return } + var movedX = scroll.scrollLeft - display.wheelStartX + var movedY = scroll.scrollTop - display.wheelStartY + var sample = (movedY && display.wheelDY && movedY / display.wheelDY) || + (movedX && display.wheelDX && movedX / display.wheelDX) + display.wheelStartX = display.wheelStartY = null + if (!sample) { return } + wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1) + ++wheelSamples + }, 200) + } else { + display.wheelDX += dx; display.wheelDY += dy + } + } +} + +// SCROLLBARS + +// Prepare DOM reads needed to update the scrollbars. Done in one +// shot to minimize update/measure roundtrips. +function measureForScrollbars(cm) { + var d = cm.display, gutterW = d.gutters.offsetWidth + var docH = Math.round(cm.doc.height + paddingVert(cm.display)) + return { + clientHeight: d.scroller.clientHeight, + viewHeight: d.wrapper.clientHeight, + scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth, + viewWidth: d.wrapper.clientWidth, + barLeft: cm.options.fixedGutter ? gutterW : 0, + docHeight: docH, + scrollHeight: docH + scrollGap(cm) + d.barHeight, + nativeBarWidth: d.nativeBarWidth, + gutterWidth: gutterW + } +} + +var NativeScrollbars = function(place, scroll, cm) { + this.cm = cm + var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar") + var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar") + place(vert); place(horiz) + + on(vert, "scroll", function () { + if (vert.clientHeight) { scroll(vert.scrollTop, "vertical") } + }) + on(horiz, "scroll", function () { + if (horiz.clientWidth) { scroll(horiz.scrollLeft, "horizontal") } + }) + + this.checkedZeroWidth = false + // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8). + if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = "18px" } +}; + +NativeScrollbars.prototype.update = function (measure) { + var needsH = measure.scrollWidth > measure.clientWidth + 1 + var needsV = measure.scrollHeight > measure.clientHeight + 1 + var sWidth = measure.nativeBarWidth + + if (needsV) { + this.vert.style.display = "block" + this.vert.style.bottom = needsH ? sWidth + "px" : "0" + var totalHeight = measure.viewHeight - (needsH ? sWidth : 0) + // A bug in IE8 can cause this value to be negative, so guard it. + this.vert.firstChild.style.height = + Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px" + } else { + this.vert.style.display = "" + this.vert.firstChild.style.height = "0" + } + + if (needsH) { + this.horiz.style.display = "block" + this.horiz.style.right = needsV ? sWidth + "px" : "0" + this.horiz.style.left = measure.barLeft + "px" + var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0) + this.horiz.firstChild.style.width = + Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px" + } else { + this.horiz.style.display = "" + this.horiz.firstChild.style.width = "0" + } + + if (!this.checkedZeroWidth && measure.clientHeight > 0) { + if (sWidth == 0) { this.zeroWidthHack() } + this.checkedZeroWidth = true + } + + return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0} +}; + +NativeScrollbars.prototype.setScrollLeft = function (pos) { + if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos } + if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz") } +}; + +NativeScrollbars.prototype.setScrollTop = function (pos) { + if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos } + if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, "vert") } +}; + +NativeScrollbars.prototype.zeroWidthHack = function () { + var w = mac && !mac_geMountainLion ? "12px" : "18px" + this.horiz.style.height = this.vert.style.width = w + this.horiz.style.pointerEvents = this.vert.style.pointerEvents = "none" + this.disableHoriz = new Delayed + this.disableVert = new Delayed +}; + +NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) { + bar.style.pointerEvents = "auto" + function maybeDisable() { + // To find out whether the scrollbar is still visible, we + // check whether the element under the pixel in the bottom + // right corner of the scrollbar box is the scrollbar box + // itself (when the bar is still visible) or its filler child + // (when the bar is hidden). If it is still visible, we keep + // it enabled, if it's hidden, we disable pointer events. + var box = bar.getBoundingClientRect() + var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) + : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1) + if (elt != bar) { bar.style.pointerEvents = "none" } + else { delay.set(1000, maybeDisable) } + } + delay.set(1000, maybeDisable) +}; + +NativeScrollbars.prototype.clear = function () { + var parent = this.horiz.parentNode + parent.removeChild(this.horiz) + parent.removeChild(this.vert) +}; + +var NullScrollbars = function () {}; + +NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} }; +NullScrollbars.prototype.setScrollLeft = function () {}; +NullScrollbars.prototype.setScrollTop = function () {}; +NullScrollbars.prototype.clear = function () {}; + +function updateScrollbars(cm, measure) { + if (!measure) { measure = measureForScrollbars(cm) } + var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight + updateScrollbarsInner(cm, measure) + for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) { + if (startWidth != cm.display.barWidth && cm.options.lineWrapping) + { updateHeightsInViewport(cm) } + updateScrollbarsInner(cm, measureForScrollbars(cm)) + startWidth = cm.display.barWidth; startHeight = cm.display.barHeight + } +} + +// Re-synchronize the fake scrollbars with the actual size of the +// content. +function updateScrollbarsInner(cm, measure) { + var d = cm.display + var sizes = d.scrollbars.update(measure) + + d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px" + d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px" + d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent" + + if (sizes.right && sizes.bottom) { + d.scrollbarFiller.style.display = "block" + d.scrollbarFiller.style.height = sizes.bottom + "px" + d.scrollbarFiller.style.width = sizes.right + "px" + } else { d.scrollbarFiller.style.display = "" } + if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) { + d.gutterFiller.style.display = "block" + d.gutterFiller.style.height = sizes.bottom + "px" + d.gutterFiller.style.width = measure.gutterWidth + "px" + } else { d.gutterFiller.style.display = "" } +} + +var scrollbarModel = {"native": NativeScrollbars, "null": NullScrollbars} + +function initScrollbars(cm) { + if (cm.display.scrollbars) { + cm.display.scrollbars.clear() + if (cm.display.scrollbars.addClass) + { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass) } + } + + cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) { + cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller) + // Prevent clicks in the scrollbars from killing focus + on(node, "mousedown", function () { + if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0) } + }) + node.setAttribute("cm-not-content", "true") + }, function (pos, axis) { + if (axis == "horizontal") { setScrollLeft(cm, pos) } + else { setScrollTop(cm, pos) } + }, cm) + if (cm.display.scrollbars.addClass) + { addClass(cm.display.wrapper, cm.display.scrollbars.addClass) } +} + +// SCROLLING THINGS INTO VIEW + +// If an editor sits on the top or bottom of the window, partially +// scrolled out of view, this ensures that the cursor is visible. +function maybeScrollWindow(cm, rect) { + if (signalDOMEvent(cm, "scrollCursorIntoView")) { return } + + var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null + if (rect.top + box.top < 0) { doScroll = true } + else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false } + if (doScroll != null && !phantom) { + var scrollNode = elt("div", "\u200b", null, ("position: absolute;\n top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n left: " + (rect.left) + "px; width: " + (Math.max(2, rect.right - rect.left)) + "px;")) + cm.display.lineSpace.appendChild(scrollNode) + scrollNode.scrollIntoView(doScroll) + cm.display.lineSpace.removeChild(scrollNode) + } +} + +// Scroll a given position into view (immediately), verifying that +// it actually became visible (as line heights are accurately +// measured, the position of something may 'drift' during drawing). +function scrollPosIntoView(cm, pos, end, margin) { + if (margin == null) { margin = 0 } + var rect + for (var limit = 0; limit < 5; limit++) { + var changed = false + var coords = cursorCoords(cm, pos) + var endCoords = !end || end == pos ? coords : cursorCoords(cm, end) + rect = {left: Math.min(coords.left, endCoords.left), + top: Math.min(coords.top, endCoords.top) - margin, + right: Math.max(coords.left, endCoords.left), + bottom: Math.max(coords.bottom, endCoords.bottom) + margin} + var scrollPos = calculateScrollPos(cm, rect) + var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft + if (scrollPos.scrollTop != null) { + setScrollTop(cm, scrollPos.scrollTop) + if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true } + } + if (scrollPos.scrollLeft != null) { + setScrollLeft(cm, scrollPos.scrollLeft) + if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true } + } + if (!changed) { break } + } + return rect +} + +// Scroll a given set of coordinates into view (immediately). +function scrollIntoView(cm, rect) { + var scrollPos = calculateScrollPos(cm, rect) + if (scrollPos.scrollTop != null) { setScrollTop(cm, scrollPos.scrollTop) } + if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft) } +} + +// Calculate a new scroll position needed to scroll the given +// rectangle into view. Returns an object with scrollTop and +// scrollLeft properties. When these are undefined, the +// vertical/horizontal position does not need to be adjusted. +function calculateScrollPos(cm, rect) { + var display = cm.display, snapMargin = textHeight(cm.display) + if (rect.top < 0) { rect.top = 0 } + var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop + var screen = displayHeight(cm), result = {} + if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen } + var docBottom = cm.doc.height + paddingVert(display) + var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin + if (rect.top < screentop) { + result.scrollTop = atTop ? 0 : rect.top + } else if (rect.bottom > screentop + screen) { + var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen) + if (newTop != screentop) { result.scrollTop = newTop } + } + + var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft + var screenw = displayWidth(cm) - (cm.options.fixedGutter ? display.gutters.offsetWidth : 0) + var tooWide = rect.right - rect.left > screenw + if (tooWide) { rect.right = rect.left + screenw } + if (rect.left < 10) + { result.scrollLeft = 0 } + else if (rect.left < screenleft) + { result.scrollLeft = Math.max(0, rect.left - (tooWide ? 0 : 10)) } + else if (rect.right > screenw + screenleft - 3) + { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw } + return result +} + +// Store a relative adjustment to the scroll position in the current +// operation (to be applied when the operation finishes). +function addToScrollPos(cm, left, top) { + if (left != null || top != null) { resolveScrollToPos(cm) } + if (left != null) + { cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left } + if (top != null) + { cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top } +} + +// Make sure that at the end of the operation the current cursor is +// shown. +function ensureCursorVisible(cm) { + resolveScrollToPos(cm) + var cur = cm.getCursor(), from = cur, to = cur + if (!cm.options.lineWrapping) { + from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur + to = Pos(cur.line, cur.ch + 1) + } + cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin} +} + +// When an operation has its scrollToPos property set, and another +// scroll action is applied before the end of the operation, this +// 'simulates' scrolling that position into view in a cheap way, so +// that the effect of intermediate scroll commands is not ignored. +function resolveScrollToPos(cm) { + var range = cm.curOp.scrollToPos + if (range) { + cm.curOp.scrollToPos = null + var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to) + var sPos = calculateScrollPos(cm, { + left: Math.min(from.left, to.left), + top: Math.min(from.top, to.top) - range.margin, + right: Math.max(from.right, to.right), + bottom: Math.max(from.bottom, to.bottom) + range.margin + }) + cm.scrollTo(sPos.scrollLeft, sPos.scrollTop) + } +} + +// Operations are used to wrap a series of changes to the editor +// state in such a way that each change won't have to update the +// cursor and display (which would be awkward, slow, and +// error-prone). Instead, display updates are batched and then all +// combined and executed at once. + +var nextOpId = 0 +// Start a new operation. +function startOperation(cm) { + cm.curOp = { + cm: cm, + viewChanged: false, // Flag that indicates that lines might need to be redrawn + startHeight: cm.doc.height, // Used to detect need to update scrollbar + forceUpdate: false, // Used to force a redraw + updateInput: null, // Whether to reset the input textarea + typing: false, // Whether this reset should be careful to leave existing text (for compositing) + changeObjs: null, // Accumulated changes, for firing change events + cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on + cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already + selectionChanged: false, // Whether the selection needs to be redrawn + updateMaxLine: false, // Set when the widest line needs to be determined anew + scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet + scrollToPos: null, // Used to scroll to a specific position + focus: false, + id: ++nextOpId // Unique ID + } + pushOperation(cm.curOp) +} + +// Finish an operation, updating the display and signalling delayed events +function endOperation(cm) { + var op = cm.curOp + finishOperation(op, function (group) { + for (var i = 0; i < group.ops.length; i++) + { group.ops[i].cm.curOp = null } + endOperations(group) + }) +} + +// The DOM updates done when an operation finishes are batched so +// that the minimum number of relayouts are required. +function endOperations(group) { + var ops = group.ops + for (var i = 0; i < ops.length; i++) // Read DOM + { endOperation_R1(ops[i]) } + for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe) + { endOperation_W1(ops[i$1]) } + for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM + { endOperation_R2(ops[i$2]) } + for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe) + { endOperation_W2(ops[i$3]) } + for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM + { endOperation_finish(ops[i$4]) } +} + +function endOperation_R1(op) { + var cm = op.cm, display = cm.display + maybeClipScrollbars(cm) + if (op.updateMaxLine) { findMaxLine(cm) } + + op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || + op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || + op.scrollToPos.to.line >= display.viewTo) || + display.maxLineChanged && cm.options.lineWrapping + op.update = op.mustUpdate && + new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate) +} + +function endOperation_W1(op) { + op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update) +} + +function endOperation_R2(op) { + var cm = op.cm, display = cm.display + if (op.updatedDisplay) { updateHeightsInViewport(cm) } + + op.barMeasure = measureForScrollbars(cm) + + // If the max line changed since it was last measured, measure it, + // and ensure the document's width matches it. + // updateDisplay_W2 will use these properties to do the actual resizing + if (display.maxLineChanged && !cm.options.lineWrapping) { + op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3 + cm.display.sizerWidth = op.adjustWidthTo + op.barMeasure.scrollWidth = + Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth) + op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm)) + } + + if (op.updatedDisplay || op.selectionChanged) + { op.preparedSelection = display.input.prepareSelection(op.focus) } +} + +function endOperation_W2(op) { + var cm = op.cm + + if (op.adjustWidthTo != null) { + cm.display.sizer.style.minWidth = op.adjustWidthTo + "px" + if (op.maxScrollLeft < cm.doc.scrollLeft) + { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true) } + cm.display.maxLineChanged = false + } + + var takeFocus = op.focus && op.focus == activeElt() && (!document.hasFocus || document.hasFocus()) + if (op.preparedSelection) + { cm.display.input.showSelection(op.preparedSelection, takeFocus) } + if (op.updatedDisplay || op.startHeight != cm.doc.height) + { updateScrollbars(cm, op.barMeasure) } + if (op.updatedDisplay) + { setDocumentHeight(cm, op.barMeasure) } + + if (op.selectionChanged) { restartBlink(cm) } + + if (cm.state.focused && op.updateInput) + { cm.display.input.reset(op.typing) } + if (takeFocus) { ensureFocus(op.cm) } +} + +function endOperation_finish(op) { + var cm = op.cm, display = cm.display, doc = cm.doc + + if (op.updatedDisplay) { postUpdateDisplay(cm, op.update) } + + // Abort mouse wheel delta measurement, when scrolling explicitly + if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) + { display.wheelStartX = display.wheelStartY = null } + + // Propagate the scroll position to the actual DOM scroller + if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { + doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)) + display.scrollbars.setScrollTop(doc.scrollTop) + display.scroller.scrollTop = doc.scrollTop + } + if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { + doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)) + display.scrollbars.setScrollLeft(doc.scrollLeft) + display.scroller.scrollLeft = doc.scrollLeft + alignHorizontally(cm) + } + // If we need to scroll a specific position into view, do so. + if (op.scrollToPos) { + var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), + clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin) + maybeScrollWindow(cm, rect) + } + + // Fire events for markers that are hidden/unidden by editing or + // undoing + var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers + if (hidden) { for (var i = 0; i < hidden.length; ++i) + { if (!hidden[i].lines.length) { signal(hidden[i], "hide") } } } + if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1) + { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], "unhide") } } } + + if (display.wrapper.offsetHeight) + { doc.scrollTop = cm.display.scroller.scrollTop } + + // Fire change events, and delayed event handlers + if (op.changeObjs) + { signal(cm, "changes", cm, op.changeObjs) } + if (op.update) + { op.update.finish() } +} + +// Run the given function in an operation +function runInOp(cm, f) { + if (cm.curOp) { return f() } + startOperation(cm) + try { return f() } + finally { endOperation(cm) } +} +// Wraps a function in an operation. Returns the wrapped function. +function operation(cm, f) { + return function() { + if (cm.curOp) { return f.apply(cm, arguments) } + startOperation(cm) + try { return f.apply(cm, arguments) } + finally { endOperation(cm) } + } +} +// Used to add methods to editor and doc instances, wrapping them in +// operations. +function methodOp(f) { + return function() { + if (this.curOp) { return f.apply(this, arguments) } + startOperation(this) + try { return f.apply(this, arguments) } + finally { endOperation(this) } + } +} +function docMethodOp(f) { + return function() { + var cm = this.cm + if (!cm || cm.curOp) { return f.apply(this, arguments) } + startOperation(cm) + try { return f.apply(this, arguments) } + finally { endOperation(cm) } + } +} + +// Updates the display.view data structure for a given change to the +// document. From and to are in pre-change coordinates. Lendiff is +// the amount of lines added or subtracted by the change. This is +// used for changes that span multiple lines, or change the way +// lines are divided into visual lines. regLineChange (below) +// registers single-line changes. +function regChange(cm, from, to, lendiff) { + if (from == null) { from = cm.doc.first } + if (to == null) { to = cm.doc.first + cm.doc.size } + if (!lendiff) { lendiff = 0 } + + var display = cm.display + if (lendiff && to < display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers > from)) + { display.updateLineNumbers = from } + + cm.curOp.viewChanged = true + + if (from >= display.viewTo) { // Change after + if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) + { resetView(cm) } + } else if (to <= display.viewFrom) { // Change before + if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) { + resetView(cm) + } else { + display.viewFrom += lendiff + display.viewTo += lendiff + } + } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap + resetView(cm) + } else if (from <= display.viewFrom) { // Top overlap + var cut = viewCuttingPoint(cm, to, to + lendiff, 1) + if (cut) { + display.view = display.view.slice(cut.index) + display.viewFrom = cut.lineN + display.viewTo += lendiff + } else { + resetView(cm) + } + } else if (to >= display.viewTo) { // Bottom overlap + var cut$1 = viewCuttingPoint(cm, from, from, -1) + if (cut$1) { + display.view = display.view.slice(0, cut$1.index) + display.viewTo = cut$1.lineN + } else { + resetView(cm) + } + } else { // Gap in the middle + var cutTop = viewCuttingPoint(cm, from, from, -1) + var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1) + if (cutTop && cutBot) { + display.view = display.view.slice(0, cutTop.index) + .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)) + .concat(display.view.slice(cutBot.index)) + display.viewTo += lendiff + } else { + resetView(cm) + } + } + + var ext = display.externalMeasured + if (ext) { + if (to < ext.lineN) + { ext.lineN += lendiff } + else if (from < ext.lineN + ext.size) + { display.externalMeasured = null } + } +} + +// Register a change to a single line. Type must be one of "text", +// "gutter", "class", "widget" +function regLineChange(cm, line, type) { + cm.curOp.viewChanged = true + var display = cm.display, ext = cm.display.externalMeasured + if (ext && line >= ext.lineN && line < ext.lineN + ext.size) + { display.externalMeasured = null } + + if (line < display.viewFrom || line >= display.viewTo) { return } + var lineView = display.view[findViewIndex(cm, line)] + if (lineView.node == null) { return } + var arr = lineView.changes || (lineView.changes = []) + if (indexOf(arr, type) == -1) { arr.push(type) } +} + +// Clear the view. +function resetView(cm) { + cm.display.viewFrom = cm.display.viewTo = cm.doc.first + cm.display.view = [] + cm.display.viewOffset = 0 +} + +function viewCuttingPoint(cm, oldN, newN, dir) { + var index = findViewIndex(cm, oldN), diff, view = cm.display.view + if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) + { return {index: index, lineN: newN} } + var n = cm.display.viewFrom + for (var i = 0; i < index; i++) + { n += view[i].size } + if (n != oldN) { + if (dir > 0) { + if (index == view.length - 1) { return null } + diff = (n + view[index].size) - oldN + index++ + } else { + diff = n - oldN + } + oldN += diff; newN += diff + } + while (visualLineNo(cm.doc, newN) != newN) { + if (index == (dir < 0 ? 0 : view.length - 1)) { return null } + newN += dir * view[index - (dir < 0 ? 1 : 0)].size + index += dir + } + return {index: index, lineN: newN} +} + +// Force the view to cover a given range, adding empty view element +// or clipping off existing ones as needed. +function adjustView(cm, from, to) { + var display = cm.display, view = display.view + if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) { + display.view = buildViewArray(cm, from, to) + display.viewFrom = from + } else { + if (display.viewFrom > from) + { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view) } + else if (display.viewFrom < from) + { display.view = display.view.slice(findViewIndex(cm, from)) } + display.viewFrom = from + if (display.viewTo < to) + { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)) } + else if (display.viewTo > to) + { display.view = display.view.slice(0, findViewIndex(cm, to)) } + } + display.viewTo = to +} + +// Count the number of lines in the view whose DOM representation is +// out of date (or nonexistent). +function countDirtyView(cm) { + var view = cm.display.view, dirty = 0 + for (var i = 0; i < view.length; i++) { + var lineView = view[i] + if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty } + } + return dirty +} + +// HIGHLIGHT WORKER + +function startWorker(cm, time) { + if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo) + { cm.state.highlight.set(time, bind(highlightWorker, cm)) } +} + +function highlightWorker(cm) { + var doc = cm.doc + if (doc.frontier < doc.first) { doc.frontier = doc.first } + if (doc.frontier >= cm.display.viewTo) { return } + var end = +new Date + cm.options.workTime + var state = copyState(doc.mode, getStateBefore(cm, doc.frontier)) + var changedLines = [] + + doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) { + if (doc.frontier >= cm.display.viewFrom) { // Visible + var oldStyles = line.styles, tooLong = line.text.length > cm.options.maxHighlightLength + var highlighted = highlightLine(cm, line, tooLong ? copyState(doc.mode, state) : state, true) + line.styles = highlighted.styles + var oldCls = line.styleClasses, newCls = highlighted.classes + if (newCls) { line.styleClasses = newCls } + else if (oldCls) { line.styleClasses = null } + var ischange = !oldStyles || oldStyles.length != line.styles.length || + oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass) + for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i] } + if (ischange) { changedLines.push(doc.frontier) } + line.stateAfter = tooLong ? state : copyState(doc.mode, state) + } else { + if (line.text.length <= cm.options.maxHighlightLength) + { processLine(cm, line.text, state) } + line.stateAfter = doc.frontier % 5 == 0 ? copyState(doc.mode, state) : null + } + ++doc.frontier + if (+new Date > end) { + startWorker(cm, cm.options.workDelay) + return true + } + }) + if (changedLines.length) { runInOp(cm, function () { + for (var i = 0; i < changedLines.length; i++) + { regLineChange(cm, changedLines[i], "text") } + }) } +} + +// DISPLAY DRAWING + +var DisplayUpdate = function(cm, viewport, force) { + var display = cm.display + + this.viewport = viewport + // Store some values that we'll need later (but don't want to force a relayout for) + this.visible = visibleLines(display, cm.doc, viewport) + this.editorIsHidden = !display.wrapper.offsetWidth + this.wrapperHeight = display.wrapper.clientHeight + this.wrapperWidth = display.wrapper.clientWidth + this.oldDisplayWidth = displayWidth(cm) + this.force = force + this.dims = getDimensions(cm) + this.events = [] +}; + +DisplayUpdate.prototype.signal = function (emitter, type) { + if (hasHandler(emitter, type)) + { this.events.push(arguments) } +}; +DisplayUpdate.prototype.finish = function () { + var this$1 = this; + + for (var i = 0; i < this.events.length; i++) + { signal.apply(null, this$1.events[i]) } +}; + +function maybeClipScrollbars(cm) { + var display = cm.display + if (!display.scrollbarsClipped && display.scroller.offsetWidth) { + display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth + display.heightForcer.style.height = scrollGap(cm) + "px" + display.sizer.style.marginBottom = -display.nativeBarWidth + "px" + display.sizer.style.borderRightWidth = scrollGap(cm) + "px" + display.scrollbarsClipped = true + } +} + +// Does the actual updating of the line display. Bails out +// (returning false) when there is nothing to be done and forced is +// false. +function updateDisplayIfNeeded(cm, update) { + var display = cm.display, doc = cm.doc + + if (update.editorIsHidden) { + resetView(cm) + return false + } + + // Bail out if the visible area is already rendered and nothing changed. + if (!update.force && + update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && + display.renderedView == display.view && countDirtyView(cm) == 0) + { return false } + + if (maybeUpdateLineNumberWidth(cm)) { + resetView(cm) + update.dims = getDimensions(cm) + } + + // Compute a suitable new viewport (from & to) + var end = doc.first + doc.size + var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first) + var to = Math.min(end, update.visible.to + cm.options.viewportMargin) + if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom) } + if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo) } + if (sawCollapsedSpans) { + from = visualLineNo(cm.doc, from) + to = visualLineEndNo(cm.doc, to) + } + + var different = from != display.viewFrom || to != display.viewTo || + display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth + adjustView(cm, from, to) + + display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom)) + // Position the mover div to align with the current scroll position + cm.display.mover.style.top = display.viewOffset + "px" + + var toUpdate = countDirtyView(cm) + if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && + (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) + { return false } + + // For big changes, we hide the enclosing element during the + // update, since that speeds up the operations on most browsers. + var focused = activeElt() + if (toUpdate > 4) { display.lineDiv.style.display = "none" } + patchDisplay(cm, display.updateLineNumbers, update.dims) + if (toUpdate > 4) { display.lineDiv.style.display = "" } + display.renderedView = display.view + // There might have been a widget with a focused element that got + // hidden or updated, if so re-focus it. + if (focused && activeElt() != focused && focused.offsetHeight) { focused.focus() } + + // Prevent selection and cursors from interfering with the scroll + // width and height. + removeChildren(display.cursorDiv) + removeChildren(display.selectionDiv) + display.gutters.style.height = display.sizer.style.minHeight = 0 + + if (different) { + display.lastWrapHeight = update.wrapperHeight + display.lastWrapWidth = update.wrapperWidth + startWorker(cm, 400) + } + + display.updateLineNumbers = null + + return true +} + +function postUpdateDisplay(cm, update) { + var viewport = update.viewport + + for (var first = true;; first = false) { + if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) { + // Clip forced viewport to actual scrollable area. + if (viewport && viewport.top != null) + { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)} } + // Updated line heights might result in the drawn area not + // actually covering the viewport. Keep looping until it does. + update.visible = visibleLines(cm.display, cm.doc, viewport) + if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) + { break } + } + if (!updateDisplayIfNeeded(cm, update)) { break } + updateHeightsInViewport(cm) + var barMeasure = measureForScrollbars(cm) + updateSelection(cm) + updateScrollbars(cm, barMeasure) + setDocumentHeight(cm, barMeasure) + } + + update.signal(cm, "update", cm) + if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) { + update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo) + cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo + } +} + +function updateDisplaySimple(cm, viewport) { + var update = new DisplayUpdate(cm, viewport) + if (updateDisplayIfNeeded(cm, update)) { + updateHeightsInViewport(cm) + postUpdateDisplay(cm, update) + var barMeasure = measureForScrollbars(cm) + updateSelection(cm) + updateScrollbars(cm, barMeasure) + setDocumentHeight(cm, barMeasure) + update.finish() + } +} + +// Sync the actual display DOM structure with display.view, removing +// nodes for lines that are no longer in view, and creating the ones +// that are not there yet, and updating the ones that are out of +// date. +function patchDisplay(cm, updateNumbersFrom, dims) { + var display = cm.display, lineNumbers = cm.options.lineNumbers + var container = display.lineDiv, cur = container.firstChild + + function rm(node) { + var next = node.nextSibling + // Works around a throw-scroll bug in OS X Webkit + if (webkit && mac && cm.display.currentWheelTarget == node) + { node.style.display = "none" } + else + { node.parentNode.removeChild(node) } + return next + } + + var view = display.view, lineN = display.viewFrom + // Loop over the elements in the view, syncing cur (the DOM nodes + // in display.lineDiv) with the view as we go. + for (var i = 0; i < view.length; i++) { + var lineView = view[i] + if (lineView.hidden) { + } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet + var node = buildLineElement(cm, lineView, lineN, dims) + container.insertBefore(node, cur) + } else { // Already drawn + while (cur != lineView.node) { cur = rm(cur) } + var updateNumber = lineNumbers && updateNumbersFrom != null && + updateNumbersFrom <= lineN && lineView.lineNumber + if (lineView.changes) { + if (indexOf(lineView.changes, "gutter") > -1) { updateNumber = false } + updateLineForChanges(cm, lineView, lineN, dims) + } + if (updateNumber) { + removeChildren(lineView.lineNumber) + lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))) + } + cur = lineView.node.nextSibling + } + lineN += lineView.size + } + while (cur) { cur = rm(cur) } +} + +function updateGutterSpace(cm) { + var width = cm.display.gutters.offsetWidth + cm.display.sizer.style.marginLeft = width + "px" +} + +function setDocumentHeight(cm, measure) { + cm.display.sizer.style.minHeight = measure.docHeight + "px" + cm.display.heightForcer.style.top = measure.docHeight + "px" + cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + "px" +} + +// Rebuild the gutter elements, ensure the margin to the left of the +// code matches their width. +function updateGutters(cm) { + var gutters = cm.display.gutters, specs = cm.options.gutters + removeChildren(gutters) + var i = 0 + for (; i < specs.length; ++i) { + var gutterClass = specs[i] + var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + gutterClass)) + if (gutterClass == "CodeMirror-linenumbers") { + cm.display.lineGutter = gElt + gElt.style.width = (cm.display.lineNumWidth || 1) + "px" + } + } + gutters.style.display = i ? "" : "none" + updateGutterSpace(cm) +} + +// Make sure the gutters options contains the element +// "CodeMirror-linenumbers" when the lineNumbers option is true. +function setGuttersForLineNumbers(options) { + var found = indexOf(options.gutters, "CodeMirror-linenumbers") + if (found == -1 && options.lineNumbers) { + options.gutters = options.gutters.concat(["CodeMirror-linenumbers"]) + } else if (found > -1 && !options.lineNumbers) { + options.gutters = options.gutters.slice(0) + options.gutters.splice(found, 1) + } +} + +// Selection objects are immutable. A new one is created every time +// the selection changes. A selection is one or more non-overlapping +// (and non-touching) ranges, sorted, and an integer that indicates +// which one is the primary selection (the one that's scrolled into +// view, that getCursor returns, etc). +var Selection = function(ranges, primIndex) { + this.ranges = ranges + this.primIndex = primIndex +}; + +Selection.prototype.primary = function () { return this.ranges[this.primIndex] }; + +Selection.prototype.equals = function (other) { + var this$1 = this; + + if (other == this) { return true } + if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false } + for (var i = 0; i < this.ranges.length; i++) { + var here = this$1.ranges[i], there = other.ranges[i] + if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false } + } + return true +}; + +Selection.prototype.deepCopy = function () { + var this$1 = this; + + var out = [] + for (var i = 0; i < this.ranges.length; i++) + { out[i] = new Range(copyPos(this$1.ranges[i].anchor), copyPos(this$1.ranges[i].head)) } + return new Selection(out, this.primIndex) +}; + +Selection.prototype.somethingSelected = function () { + var this$1 = this; + + for (var i = 0; i < this.ranges.length; i++) + { if (!this$1.ranges[i].empty()) { return true } } + return false +}; + +Selection.prototype.contains = function (pos, end) { + var this$1 = this; + + if (!end) { end = pos } + for (var i = 0; i < this.ranges.length; i++) { + var range = this$1.ranges[i] + if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) + { return i } + } + return -1 +}; + +var Range = function(anchor, head) { + this.anchor = anchor; this.head = head +}; + +Range.prototype.from = function () { return minPos(this.anchor, this.head) }; +Range.prototype.to = function () { return maxPos(this.anchor, this.head) }; +Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch }; + +// Take an unsorted, potentially overlapping set of ranges, and +// build a selection out of it. 'Consumes' ranges array (modifying +// it). +function normalizeSelection(ranges, primIndex) { + var prim = ranges[primIndex] + ranges.sort(function (a, b) { return cmp(a.from(), b.from()); }) + primIndex = indexOf(ranges, prim) + for (var i = 1; i < ranges.length; i++) { + var cur = ranges[i], prev = ranges[i - 1] + if (cmp(prev.to(), cur.from()) >= 0) { + var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to()) + var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head + if (i <= primIndex) { --primIndex } + ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to)) + } + } + return new Selection(ranges, primIndex) +} + +function simpleSelection(anchor, head) { + return new Selection([new Range(anchor, head || anchor)], 0) +} + +// Compute the position of the end of a change (its 'to' property +// refers to the pre-change end). +function changeEnd(change) { + if (!change.text) { return change.to } + return Pos(change.from.line + change.text.length - 1, + lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0)) +} + +// Adjust a position to refer to the post-change position of the +// same text, or the end of the change if the change covers it. +function adjustForChange(pos, change) { + if (cmp(pos, change.from) < 0) { return pos } + if (cmp(pos, change.to) <= 0) { return changeEnd(change) } + + var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch + if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch } + return Pos(line, ch) +} + +function computeSelAfterChange(doc, change) { + var out = [] + for (var i = 0; i < doc.sel.ranges.length; i++) { + var range = doc.sel.ranges[i] + out.push(new Range(adjustForChange(range.anchor, change), + adjustForChange(range.head, change))) + } + return normalizeSelection(out, doc.sel.primIndex) +} + +function offsetPos(pos, old, nw) { + if (pos.line == old.line) + { return Pos(nw.line, pos.ch - old.ch + nw.ch) } + else + { return Pos(nw.line + (pos.line - old.line), pos.ch) } +} + +// Used by replaceSelections to allow moving the selection to the +// start or around the replaced test. Hint may be "start" or "around". +function computeReplacedSel(doc, changes, hint) { + var out = [] + var oldPrev = Pos(doc.first, 0), newPrev = oldPrev + for (var i = 0; i < changes.length; i++) { + var change = changes[i] + var from = offsetPos(change.from, oldPrev, newPrev) + var to = offsetPos(changeEnd(change), oldPrev, newPrev) + oldPrev = change.to + newPrev = to + if (hint == "around") { + var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0 + out[i] = new Range(inv ? to : from, inv ? from : to) + } else { + out[i] = new Range(from, from) + } + } + return new Selection(out, doc.sel.primIndex) +} + +// Used to get the editor into a consistent state again when options change. + +function loadMode(cm) { + cm.doc.mode = getMode(cm.options, cm.doc.modeOption) + resetModeState(cm) +} + +function resetModeState(cm) { + cm.doc.iter(function (line) { + if (line.stateAfter) { line.stateAfter = null } + if (line.styles) { line.styles = null } + }) + cm.doc.frontier = cm.doc.first + startWorker(cm, 100) + cm.state.modeGen++ + if (cm.curOp) { regChange(cm) } +} + +// DOCUMENT DATA STRUCTURE + +// By default, updates that start and end at the beginning of a line +// are treated specially, in order to make the association of line +// widgets and marker elements with the text behave more intuitive. +function isWholeLineUpdate(doc, change) { + return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && + (!doc.cm || doc.cm.options.wholeLineUpdateBefore) +} + +// Perform a change on the document data structure. +function updateDoc(doc, change, markedSpans, estimateHeight) { + function spansFor(n) {return markedSpans ? markedSpans[n] : null} + function update(line, text, spans) { + updateLine(line, text, spans, estimateHeight) + signalLater(line, "change", line, change) + } + function linesFor(start, end) { + var result = [] + for (var i = start; i < end; ++i) + { result.push(new Line(text[i], spansFor(i), estimateHeight)) } + return result + } + + var from = change.from, to = change.to, text = change.text + var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line) + var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line + + // Adjust the line structure + if (change.full) { + doc.insert(0, linesFor(0, text.length)) + doc.remove(text.length, doc.size - text.length) + } else if (isWholeLineUpdate(doc, change)) { + // This is a whole-line replace. Treated specially to make + // sure line objects move the way they are supposed to. + var added = linesFor(0, text.length - 1) + update(lastLine, lastLine.text, lastSpans) + if (nlines) { doc.remove(from.line, nlines) } + if (added.length) { doc.insert(from.line, added) } + } else if (firstLine == lastLine) { + if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans) + } else { + var added$1 = linesFor(1, text.length - 1) + added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight)) + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)) + doc.insert(from.line + 1, added$1) + } + } else if (text.length == 1) { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0)) + doc.remove(from.line + 1, nlines) + } else { + update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0)) + update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans) + var added$2 = linesFor(1, text.length - 1) + if (nlines > 1) { doc.remove(from.line + 1, nlines - 1) } + doc.insert(from.line + 1, added$2) + } + + signalLater(doc, "change", doc, change) +} + +// Call f for all linked documents. +function linkedDocs(doc, f, sharedHistOnly) { + function propagate(doc, skip, sharedHist) { + if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) { + var rel = doc.linked[i] + if (rel.doc == skip) { continue } + var shared = sharedHist && rel.sharedHist + if (sharedHistOnly && !shared) { continue } + f(rel.doc, shared) + propagate(rel.doc, doc, shared) + } } + } + propagate(doc, null, true) +} + +// Attach a document to an editor. +function attachDoc(cm, doc) { + if (doc.cm) { throw new Error("This document is already in use.") } + cm.doc = doc + doc.cm = cm + estimateLineHeights(cm) + loadMode(cm) + setDirectionClass(cm) + if (!cm.options.lineWrapping) { findMaxLine(cm) } + cm.options.mode = doc.modeOption + regChange(cm) +} + +function setDirectionClass(cm) { + ;(cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl") +} + +function directionChanged(cm) { + runInOp(cm, function () { + setDirectionClass(cm) + regChange(cm) + }) +} + +function History(startGen) { + // Arrays of change events and selections. Doing something adds an + // event to done and clears undo. Undoing moves events from done + // to undone, redoing moves them in the other direction. + this.done = []; this.undone = [] + this.undoDepth = Infinity + // Used to track when changes can be merged into a single undo + // event + this.lastModTime = this.lastSelTime = 0 + this.lastOp = this.lastSelOp = null + this.lastOrigin = this.lastSelOrigin = null + // Used by the isClean() method + this.generation = this.maxGeneration = startGen || 1 +} + +// Create a history change event from an updateDoc-style change +// object. +function historyChangeFromChange(doc, change) { + var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)} + attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1) + linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true) + return histChange +} + +// Pop all selection events off the end of a history array. Stop at +// a change event. +function clearSelectionEvents(array) { + while (array.length) { + var last = lst(array) + if (last.ranges) { array.pop() } + else { break } + } +} + +// Find the top change event in the history. Pop off selection +// events that are in the way. +function lastChangeEvent(hist, force) { + if (force) { + clearSelectionEvents(hist.done) + return lst(hist.done) + } else if (hist.done.length && !lst(hist.done).ranges) { + return lst(hist.done) + } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) { + hist.done.pop() + return lst(hist.done) + } +} + +// Register a change in the history. Merges changes that are within +// a single operation, or are close together with an origin that +// allows merging (starting with "+") into a single event. +function addChangeToHistory(doc, change, selAfter, opId) { + var hist = doc.history + hist.undone.length = 0 + var time = +new Date, cur + var last + + if ((hist.lastOp == opId || + hist.lastOrigin == change.origin && change.origin && + ((change.origin.charAt(0) == "+" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) || + change.origin.charAt(0) == "*")) && + (cur = lastChangeEvent(hist, hist.lastOp == opId))) { + // Merge this change into the last event + last = lst(cur.changes) + if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) { + // Optimized case for simple insertion -- don't want to add + // new changesets for every character typed + last.to = changeEnd(change) + } else { + // Add new sub-event + cur.changes.push(historyChangeFromChange(doc, change)) + } + } else { + // Can not be merged, start a new event. + var before = lst(hist.done) + if (!before || !before.ranges) + { pushSelectionToHistory(doc.sel, hist.done) } + cur = {changes: [historyChangeFromChange(doc, change)], + generation: hist.generation} + hist.done.push(cur) + while (hist.done.length > hist.undoDepth) { + hist.done.shift() + if (!hist.done[0].ranges) { hist.done.shift() } + } + } + hist.done.push(selAfter) + hist.generation = ++hist.maxGeneration + hist.lastModTime = hist.lastSelTime = time + hist.lastOp = hist.lastSelOp = opId + hist.lastOrigin = hist.lastSelOrigin = change.origin + + if (!last) { signal(doc, "historyAdded") } +} + +function selectionEventCanBeMerged(doc, origin, prev, sel) { + var ch = origin.charAt(0) + return ch == "*" || + ch == "+" && + prev.ranges.length == sel.ranges.length && + prev.somethingSelected() == sel.somethingSelected() && + new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500) +} + +// Called whenever the selection changes, sets the new selection as +// the pending selection in the history, and pushes the old pending +// selection into the 'done' array when it was significantly +// different (in number of selected ranges, emptiness, or time). +function addSelectionToHistory(doc, sel, opId, options) { + var hist = doc.history, origin = options && options.origin + + // A new event is started when the previous origin does not match + // the current, or the origins don't allow matching. Origins + // starting with * are always merged, those starting with + are + // merged when similar and close together in time. + if (opId == hist.lastSelOp || + (origin && hist.lastSelOrigin == origin && + (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || + selectionEventCanBeMerged(doc, origin, lst(hist.done), sel)))) + { hist.done[hist.done.length - 1] = sel } + else + { pushSelectionToHistory(sel, hist.done) } + + hist.lastSelTime = +new Date + hist.lastSelOrigin = origin + hist.lastSelOp = opId + if (options && options.clearRedo !== false) + { clearSelectionEvents(hist.undone) } +} + +function pushSelectionToHistory(sel, dest) { + var top = lst(dest) + if (!(top && top.ranges && top.equals(sel))) + { dest.push(sel) } +} + +// Used to store marked span information in the history. +function attachLocalSpans(doc, change, from, to) { + var existing = change["spans_" + doc.id], n = 0 + doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) { + if (line.markedSpans) + { (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans } + ++n + }) +} + +// When un/re-doing restores text containing marked spans, those +// that have been explicitly cleared should not be restored. +function removeClearedSpans(spans) { + if (!spans) { return null } + var out + for (var i = 0; i < spans.length; ++i) { + if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i) } } + else if (out) { out.push(spans[i]) } + } + return !out ? spans : out.length ? out : null +} + +// Retrieve and filter the old marked spans stored in a change event. +function getOldSpans(doc, change) { + var found = change["spans_" + doc.id] + if (!found) { return null } + var nw = [] + for (var i = 0; i < change.text.length; ++i) + { nw.push(removeClearedSpans(found[i])) } + return nw +} + +// Used for un/re-doing changes from the history. Combines the +// result of computing the existing spans with the set of spans that +// existed in the history (so that deleting around a span and then +// undoing brings back the span). +function mergeOldSpans(doc, change) { + var old = getOldSpans(doc, change) + var stretched = stretchSpansOverChange(doc, change) + if (!old) { return stretched } + if (!stretched) { return old } + + for (var i = 0; i < old.length; ++i) { + var oldCur = old[i], stretchCur = stretched[i] + if (oldCur && stretchCur) { + spans: for (var j = 0; j < stretchCur.length; ++j) { + var span = stretchCur[j] + for (var k = 0; k < oldCur.length; ++k) + { if (oldCur[k].marker == span.marker) { continue spans } } + oldCur.push(span) + } + } else if (stretchCur) { + old[i] = stretchCur + } + } + return old +} + +// Used both to provide a JSON-safe object in .getHistory, and, when +// detaching a document, to split the history in two +function copyHistoryArray(events, newGroup, instantiateSel) { + var copy = [] + for (var i = 0; i < events.length; ++i) { + var event = events[i] + if (event.ranges) { + copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event) + continue + } + var changes = event.changes, newChanges = [] + copy.push({changes: newChanges}) + for (var j = 0; j < changes.length; ++j) { + var change = changes[j], m = (void 0) + newChanges.push({from: change.from, to: change.to, text: change.text}) + if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\d+)$/)) { + if (indexOf(newGroup, Number(m[1])) > -1) { + lst(newChanges)[prop] = change[prop] + delete change[prop] + } + } } } + } + } + return copy +} + +// The 'scroll' parameter given to many of these indicated whether +// the new cursor position should be scrolled into view after +// modifying the selection. + +// If shift is held or the extend flag is set, extends a range to +// include a given position (and optionally a second position). +// Otherwise, simply returns the range between the given positions. +// Used for cursor motion and such. +function extendRange(doc, range, head, other) { + if (doc.cm && doc.cm.display.shift || doc.extend) { + var anchor = range.anchor + if (other) { + var posBefore = cmp(head, anchor) < 0 + if (posBefore != (cmp(other, anchor) < 0)) { + anchor = head + head = other + } else if (posBefore != (cmp(head, other) < 0)) { + head = other + } + } + return new Range(anchor, head) + } else { + return new Range(other || head, head) + } +} + +// Extend the primary selection range, discard the rest. +function extendSelection(doc, head, other, options) { + setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options) +} + +// Extend all selections (pos is an array of selections with length +// equal the number of selections) +function extendSelections(doc, heads, options) { + var out = [] + for (var i = 0; i < doc.sel.ranges.length; i++) + { out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null) } + var newSel = normalizeSelection(out, doc.sel.primIndex) + setSelection(doc, newSel, options) +} + +// Updates a single range in the selection. +function replaceOneSelection(doc, i, range, options) { + var ranges = doc.sel.ranges.slice(0) + ranges[i] = range + setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options) +} + +// Reset the selection to a single range. +function setSimpleSelection(doc, anchor, head, options) { + setSelection(doc, simpleSelection(anchor, head), options) +} + +// Give beforeSelectionChange handlers a change to influence a +// selection update. +function filterSelectionChange(doc, sel, options) { + var obj = { + ranges: sel.ranges, + update: function(ranges) { + var this$1 = this; + + this.ranges = [] + for (var i = 0; i < ranges.length; i++) + { this$1.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), + clipPos(doc, ranges[i].head)) } + }, + origin: options && options.origin + } + signal(doc, "beforeSelectionChange", doc, obj) + if (doc.cm) { signal(doc.cm, "beforeSelectionChange", doc.cm, obj) } + if (obj.ranges != sel.ranges) { return normalizeSelection(obj.ranges, obj.ranges.length - 1) } + else { return sel } +} + +function setSelectionReplaceHistory(doc, sel, options) { + var done = doc.history.done, last = lst(done) + if (last && last.ranges) { + done[done.length - 1] = sel + setSelectionNoUndo(doc, sel, options) + } else { + setSelection(doc, sel, options) + } +} + +// Set a new selection. +function setSelection(doc, sel, options) { + setSelectionNoUndo(doc, sel, options) + addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options) +} + +function setSelectionNoUndo(doc, sel, options) { + if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) + { sel = filterSelectionChange(doc, sel, options) } + + var bias = options && options.bias || + (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1) + setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true)) + + if (!(options && options.scroll === false) && doc.cm) + { ensureCursorVisible(doc.cm) } +} + +function setSelectionInner(doc, sel) { + if (sel.equals(doc.sel)) { return } + + doc.sel = sel + + if (doc.cm) { + doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true + signalCursorActivity(doc.cm) + } + signalLater(doc, "cursorActivity", doc) +} + +// Verify that the selection does not partially select any atomic +// marked ranges. +function reCheckSelection(doc) { + setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll) +} + +// Return a selection that does not partially select any atomic +// ranges. +function skipAtomicInSelection(doc, sel, bias, mayClear) { + var out + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i] + var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i] + var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear) + var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear) + if (out || newAnchor != range.anchor || newHead != range.head) { + if (!out) { out = sel.ranges.slice(0, i) } + out[i] = new Range(newAnchor, newHead) + } + } + return out ? normalizeSelection(out, sel.primIndex) : sel +} + +function skipAtomicInner(doc, pos, oldPos, dir, mayClear) { + var line = getLine(doc, pos.line) + if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) { + var sp = line.markedSpans[i], m = sp.marker + if ((sp.from == null || (m.inclusiveLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && + (sp.to == null || (m.inclusiveRight ? sp.to >= pos.ch : sp.to > pos.ch))) { + if (mayClear) { + signal(m, "beforeCursorEnter") + if (m.explicitlyCleared) { + if (!line.markedSpans) { break } + else {--i; continue} + } + } + if (!m.atomic) { continue } + + if (oldPos) { + var near = m.find(dir < 0 ? 1 : -1), diff = (void 0) + if (dir < 0 ? m.inclusiveRight : m.inclusiveLeft) + { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null) } + if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) + { return skipAtomicInner(doc, near, pos, dir, mayClear) } + } + + var far = m.find(dir < 0 ? -1 : 1) + if (dir < 0 ? m.inclusiveLeft : m.inclusiveRight) + { far = movePos(doc, far, dir, far.line == pos.line ? line : null) } + return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null + } + } } + return pos +} + +// Ensure a given position is not inside an atomic range. +function skipAtomic(doc, pos, oldPos, bias, mayClear) { + var dir = bias || 1 + var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) || + skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || + (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true)) + if (!found) { + doc.cantEdit = true + return Pos(doc.first, 0) + } + return found +} + +function movePos(doc, pos, dir, line) { + if (dir < 0 && pos.ch == 0) { + if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) } + else { return null } + } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) { + if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) } + else { return null } + } else { + return new Pos(pos.line, pos.ch + dir) + } +} + +function selectAll(cm) { + cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll) +} + +// UPDATING + +// Allow "beforeChange" event handlers to influence a change +function filterChange(doc, change, update) { + var obj = { + canceled: false, + from: change.from, + to: change.to, + text: change.text, + origin: change.origin, + cancel: function () { return obj.canceled = true; } + } + if (update) { obj.update = function (from, to, text, origin) { + if (from) { obj.from = clipPos(doc, from) } + if (to) { obj.to = clipPos(doc, to) } + if (text) { obj.text = text } + if (origin !== undefined) { obj.origin = origin } + } } + signal(doc, "beforeChange", doc, obj) + if (doc.cm) { signal(doc.cm, "beforeChange", doc.cm, obj) } + + if (obj.canceled) { return null } + return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin} +} + +// Apply a change to a document, and add it to the document's +// history, and propagating it to all linked documents. +function makeChange(doc, change, ignoreReadOnly) { + if (doc.cm) { + if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) } + if (doc.cm.state.suppressEdits) { return } + } + + if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) { + change = filterChange(doc, change, true) + if (!change) { return } + } + + // Possibly split or suppress the update based on the presence + // of read-only spans in its range. + var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to) + if (split) { + for (var i = split.length - 1; i >= 0; --i) + { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [""] : change.text}) } + } else { + makeChangeInner(doc, change) + } +} + +function makeChangeInner(doc, change) { + if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) { return } + var selAfter = computeSelAfterChange(doc, change) + addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN) + + makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change)) + var rebased = [] + + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change) + rebased.push(doc.history) + } + makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change)) + }) +} + +// Revert a change stored in a document's history. +function makeChangeFromHistory(doc, type, allowSelectionOnly) { + if (doc.cm && doc.cm.state.suppressEdits && !allowSelectionOnly) { return } + + var hist = doc.history, event, selAfter = doc.sel + var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done + + // Verify that there is a useable event (so that ctrl-z won't + // needlessly clear selection events) + var i = 0 + for (; i < source.length; i++) { + event = source[i] + if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) + { break } + } + if (i == source.length) { return } + hist.lastOrigin = hist.lastSelOrigin = null + + for (;;) { + event = source.pop() + if (event.ranges) { + pushSelectionToHistory(event, dest) + if (allowSelectionOnly && !event.equals(doc.sel)) { + setSelection(doc, event, {clearRedo: false}) + return + } + selAfter = event + } + else { break } + } + + // Build up a reverse change object to add to the opposite history + // stack (redo when undoing, and vice versa). + var antiChanges = [] + pushSelectionToHistory(selAfter, dest) + dest.push({changes: antiChanges, generation: hist.generation}) + hist.generation = event.generation || ++hist.maxGeneration + + var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange") + + var loop = function ( i ) { + var change = event.changes[i] + change.origin = type + if (filter && !filterChange(doc, change, false)) { + source.length = 0 + return {} + } + + antiChanges.push(historyChangeFromChange(doc, change)) + + var after = i ? computeSelAfterChange(doc, change) : lst(source) + makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change)) + if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}) } + var rebased = [] + + // Propagate to the linked documents + linkedDocs(doc, function (doc, sharedHist) { + if (!sharedHist && indexOf(rebased, doc.history) == -1) { + rebaseHist(doc.history, change) + rebased.push(doc.history) + } + makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change)) + }) + }; + + for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) { + var returned = loop( i$1 ); + + if ( returned ) return returned.v; + } +} + +// Sub-views need their line numbers shifted when text is added +// above or below them in the parent document. +function shiftDoc(doc, distance) { + if (distance == 0) { return } + doc.first += distance + doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range( + Pos(range.anchor.line + distance, range.anchor.ch), + Pos(range.head.line + distance, range.head.ch) + ); }), doc.sel.primIndex) + if (doc.cm) { + regChange(doc.cm, doc.first, doc.first - distance, distance) + for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) + { regLineChange(doc.cm, l, "gutter") } + } +} + +// More lower-level change function, handling only a single document +// (not linked ones). +function makeChangeSingleDoc(doc, change, selAfter, spans) { + if (doc.cm && !doc.cm.curOp) + { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) } + + if (change.to.line < doc.first) { + shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line)) + return + } + if (change.from.line > doc.lastLine()) { return } + + // Clip the change to the size of this doc + if (change.from.line < doc.first) { + var shift = change.text.length - 1 - (doc.first - change.from.line) + shiftDoc(doc, shift) + change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch), + text: [lst(change.text)], origin: change.origin} + } + var last = doc.lastLine() + if (change.to.line > last) { + change = {from: change.from, to: Pos(last, getLine(doc, last).text.length), + text: [change.text[0]], origin: change.origin} + } + + change.removed = getBetween(doc, change.from, change.to) + + if (!selAfter) { selAfter = computeSelAfterChange(doc, change) } + if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans) } + else { updateDoc(doc, change, spans) } + setSelectionNoUndo(doc, selAfter, sel_dontScroll) +} + +// Handle the interaction of a change to a document with the editor +// that this document is part of. +function makeChangeSingleDocInEditor(cm, change, spans) { + var doc = cm.doc, display = cm.display, from = change.from, to = change.to + + var recomputeMaxLength = false, checkWidthStart = from.line + if (!cm.options.lineWrapping) { + checkWidthStart = lineNo(visualLine(getLine(doc, from.line))) + doc.iter(checkWidthStart, to.line + 1, function (line) { + if (line == display.maxLine) { + recomputeMaxLength = true + return true + } + }) + } + + if (doc.sel.contains(change.from, change.to) > -1) + { signalCursorActivity(cm) } + + updateDoc(doc, change, spans, estimateHeight(cm)) + + if (!cm.options.lineWrapping) { + doc.iter(checkWidthStart, from.line + change.text.length, function (line) { + var len = lineLength(line) + if (len > display.maxLineLength) { + display.maxLine = line + display.maxLineLength = len + display.maxLineChanged = true + recomputeMaxLength = false + } + }) + if (recomputeMaxLength) { cm.curOp.updateMaxLine = true } + } + + // Adjust frontier, schedule worker + doc.frontier = Math.min(doc.frontier, from.line) + startWorker(cm, 400) + + var lendiff = change.text.length - (to.line - from.line) - 1 + // Remember that these lines changed, for updating the display + if (change.full) + { regChange(cm) } + else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) + { regLineChange(cm, from.line, "text") } + else + { regChange(cm, from.line, to.line + 1, lendiff) } + + var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change") + if (changeHandler || changesHandler) { + var obj = { + from: from, to: to, + text: change.text, + removed: change.removed, + origin: change.origin + } + if (changeHandler) { signalLater(cm, "change", cm, obj) } + if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj) } + } + cm.display.selForContextMenu = null +} + +function replaceRange(doc, code, from, to, origin) { + if (!to) { to = from } + if (cmp(to, from) < 0) { var tmp = to; to = from; from = tmp } + if (typeof code == "string") { code = doc.splitLines(code) } + makeChange(doc, {from: from, to: to, text: code, origin: origin}) +} + +// Rebasing/resetting history to deal with externally-sourced changes + +function rebaseHistSelSingle(pos, from, to, diff) { + if (to < pos.line) { + pos.line += diff + } else if (from < pos.line) { + pos.line = from + pos.ch = 0 + } +} + +// Tries to rebase an array of history events given a change in the +// document. If the change touches the same lines as the event, the +// event, and everything 'behind' it, is discarded. If the change is +// before the event, the event's positions are updated. Uses a +// copy-on-write scheme for the positions, to avoid having to +// reallocate them all on every rebase, but also avoid problems with +// shared position objects being unsafely updated. +function rebaseHistArray(array, from, to, diff) { + for (var i = 0; i < array.length; ++i) { + var sub = array[i], ok = true + if (sub.ranges) { + if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true } + for (var j = 0; j < sub.ranges.length; j++) { + rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff) + rebaseHistSelSingle(sub.ranges[j].head, from, to, diff) + } + continue + } + for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) { + var cur = sub.changes[j$1] + if (to < cur.from.line) { + cur.from = Pos(cur.from.line + diff, cur.from.ch) + cur.to = Pos(cur.to.line + diff, cur.to.ch) + } else if (from <= cur.to.line) { + ok = false + break + } + } + if (!ok) { + array.splice(0, i + 1) + i = 0 + } + } +} + +function rebaseHist(hist, change) { + var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1 + rebaseHistArray(hist.done, from, to, diff) + rebaseHistArray(hist.undone, from, to, diff) +} + +// Utility for applying a change to a line by handle or number, +// returning the number and optionally registering the line as +// changed. +function changeLine(doc, handle, changeType, op) { + var no = handle, line = handle + if (typeof handle == "number") { line = getLine(doc, clipLine(doc, handle)) } + else { no = lineNo(handle) } + if (no == null) { return null } + if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType) } + return line +} + +// The document is represented as a BTree consisting of leaves, with +// chunk of lines in them, and branches, with up to ten leaves or +// other branch nodes below them. The top node is always a branch +// node, and is the document object itself (meaning it has +// additional methods and properties). +// +// All nodes have parent links. The tree is used both to go from +// line numbers to line objects, and to go from objects to numbers. +// It also indexes by height, and is used to convert between height +// and line object, and to find the total height of the document. +// +// See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html + +var LeafChunk = function(lines) { + var this$1 = this; + + this.lines = lines + this.parent = null + var height = 0 + for (var i = 0; i < lines.length; ++i) { + lines[i].parent = this$1 + height += lines[i].height + } + this.height = height +}; + +LeafChunk.prototype.chunkSize = function () { return this.lines.length }; + +// Remove the n lines at offset 'at'. +LeafChunk.prototype.removeInner = function (at, n) { + var this$1 = this; + + for (var i = at, e = at + n; i < e; ++i) { + var line = this$1.lines[i] + this$1.height -= line.height + cleanUpLine(line) + signalLater(line, "delete") + } + this.lines.splice(at, n) +}; + +// Helper used to collapse a small branch into a single leaf. +LeafChunk.prototype.collapse = function (lines) { + lines.push.apply(lines, this.lines) +}; + +// Insert the given array of lines at offset 'at', count them as +// having the given height. +LeafChunk.prototype.insertInner = function (at, lines, height) { + var this$1 = this; + + this.height += height + this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at)) + for (var i = 0; i < lines.length; ++i) { lines[i].parent = this$1 } +}; + +// Used to iterate over a part of the tree. +LeafChunk.prototype.iterN = function (at, n, op) { + var this$1 = this; + + for (var e = at + n; at < e; ++at) + { if (op(this$1.lines[at])) { return true } } +}; + +var BranchChunk = function(children) { + var this$1 = this; + + this.children = children + var size = 0, height = 0 + for (var i = 0; i < children.length; ++i) { + var ch = children[i] + size += ch.chunkSize(); height += ch.height + ch.parent = this$1 + } + this.size = size + this.height = height + this.parent = null +}; + +BranchChunk.prototype.chunkSize = function () { return this.size }; + +BranchChunk.prototype.removeInner = function (at, n) { + var this$1 = this; + + this.size -= n + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at < sz) { + var rm = Math.min(n, sz - at), oldHeight = child.height + child.removeInner(at, rm) + this$1.height -= oldHeight - child.height + if (sz == rm) { this$1.children.splice(i--, 1); child.parent = null } + if ((n -= rm) == 0) { break } + at = 0 + } else { at -= sz } + } + // If the result is smaller than 25 lines, ensure that it is a + // single leaf node. + if (this.size - n < 25 && + (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) { + var lines = [] + this.collapse(lines) + this.children = [new LeafChunk(lines)] + this.children[0].parent = this + } +}; + +BranchChunk.prototype.collapse = function (lines) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { this$1.children[i].collapse(lines) } +}; + +BranchChunk.prototype.insertInner = function (at, lines, height) { + var this$1 = this; + + this.size += lines.length + this.height += height + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at <= sz) { + child.insertInner(at, lines, height) + if (child.lines && child.lines.length > 50) { + // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced. + // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest. + var remaining = child.lines.length % 25 + 25 + for (var pos = remaining; pos < child.lines.length;) { + var leaf = new LeafChunk(child.lines.slice(pos, pos += 25)) + child.height -= leaf.height + this$1.children.splice(++i, 0, leaf) + leaf.parent = this$1 + } + child.lines = child.lines.slice(0, remaining) + this$1.maybeSpill() + } + break + } + at -= sz + } +}; + +// When a node has grown, check whether it should be split. +BranchChunk.prototype.maybeSpill = function () { + if (this.children.length <= 10) { return } + var me = this + do { + var spilled = me.children.splice(me.children.length - 5, 5) + var sibling = new BranchChunk(spilled) + if (!me.parent) { // Become the parent node + var copy = new BranchChunk(me.children) + copy.parent = me + me.children = [copy, sibling] + me = copy + } else { + me.size -= sibling.size + me.height -= sibling.height + var myIndex = indexOf(me.parent.children, me) + me.parent.children.splice(myIndex + 1, 0, sibling) + } + sibling.parent = me.parent + } while (me.children.length > 10) + me.parent.maybeSpill() +}; + +BranchChunk.prototype.iterN = function (at, n, op) { + var this$1 = this; + + for (var i = 0; i < this.children.length; ++i) { + var child = this$1.children[i], sz = child.chunkSize() + if (at < sz) { + var used = Math.min(n, sz - at) + if (child.iterN(at, used, op)) { return true } + if ((n -= used) == 0) { break } + at = 0 + } else { at -= sz } + } +}; + +// Line widgets are block elements displayed above or below a line. + +var LineWidget = function(doc, node, options) { + var this$1 = this; + + if (options) { for (var opt in options) { if (options.hasOwnProperty(opt)) + { this$1[opt] = options[opt] } } } + this.doc = doc + this.node = node +}; + +LineWidget.prototype.clear = function () { + var this$1 = this; + + var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line) + if (no == null || !ws) { return } + for (var i = 0; i < ws.length; ++i) { if (ws[i] == this$1) { ws.splice(i--, 1) } } + if (!ws.length) { line.widgets = null } + var height = widgetHeight(this) + updateLineHeight(line, Math.max(0, line.height - height)) + if (cm) { + runInOp(cm, function () { + adjustScrollWhenAboveVisible(cm, line, -height) + regLineChange(cm, no, "widget") + }) + signalLater(cm, "lineWidgetCleared", cm, this, no) + } +}; + +LineWidget.prototype.changed = function () { + var this$1 = this; + + var oldH = this.height, cm = this.doc.cm, line = this.line + this.height = null + var diff = widgetHeight(this) - oldH + if (!diff) { return } + updateLineHeight(line, line.height + diff) + if (cm) { + runInOp(cm, function () { + cm.curOp.forceUpdate = true + adjustScrollWhenAboveVisible(cm, line, diff) + signalLater(cm, "lineWidgetChanged", cm, this$1, lineNo(line)) + }) + } +}; +eventMixin(LineWidget) + +function adjustScrollWhenAboveVisible(cm, line, diff) { + if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop)) + { addToScrollPos(cm, null, diff) } +} + +function addLineWidget(doc, handle, node, options) { + var widget = new LineWidget(doc, node, options) + var cm = doc.cm + if (cm && widget.noHScroll) { cm.display.alignWidgets = true } + changeLine(doc, handle, "widget", function (line) { + var widgets = line.widgets || (line.widgets = []) + if (widget.insertAt == null) { widgets.push(widget) } + else { widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget) } + widget.line = line + if (cm && !lineIsHidden(doc, line)) { + var aboveVisible = heightAtLine(line) < doc.scrollTop + updateLineHeight(line, line.height + widgetHeight(widget)) + if (aboveVisible) { addToScrollPos(cm, null, widget.height) } + cm.curOp.forceUpdate = true + } + return true + }) + signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle)) + return widget +} + +// TEXTMARKERS + +// Created with markText and setBookmark methods. A TextMarker is a +// handle that can be used to clear or find a marked position in the +// document. Line objects hold arrays (markedSpans) containing +// {from, to, marker} object pointing to such marker objects, and +// indicating that such a marker is present on that line. Multiple +// lines may point to the same marker when it spans across lines. +// The spans will have null for their from/to properties when the +// marker continues beyond the start/end of the line. Markers have +// links back to the lines they currently touch. + +// Collapsed markers have unique ids, in order to be able to order +// them, which is needed for uniquely determining an outer marker +// when they overlap (they may nest, but not partially overlap). +var nextMarkerId = 0 + +var TextMarker = function(doc, type) { + this.lines = [] + this.type = type + this.doc = doc + this.id = ++nextMarkerId +}; + +// Clear the marker. +TextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + var cm = this.doc.cm, withOp = cm && !cm.curOp + if (withOp) { startOperation(cm) } + if (hasHandler(this, "clear")) { + var found = this.find() + if (found) { signalLater(this, "clear", found.from, found.to) } + } + var min = null, max = null + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i] + var span = getMarkedSpanFor(line.markedSpans, this$1) + if (cm && !this$1.collapsed) { regLineChange(cm, lineNo(line), "text") } + else if (cm) { + if (span.to != null) { max = lineNo(line) } + if (span.from != null) { min = lineNo(line) } + } + line.markedSpans = removeMarkedSpan(line.markedSpans, span) + if (span.from == null && this$1.collapsed && !lineIsHidden(this$1.doc, line) && cm) + { updateLineHeight(line, textHeight(cm.display)) } + } + if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) { + var visual = visualLine(this$1.lines[i$1]), len = lineLength(visual) + if (len > cm.display.maxLineLength) { + cm.display.maxLine = visual + cm.display.maxLineLength = len + cm.display.maxLineChanged = true + } + } } + + if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1) } + this.lines.length = 0 + this.explicitlyCleared = true + if (this.atomic && this.doc.cantEdit) { + this.doc.cantEdit = false + if (cm) { reCheckSelection(cm.doc) } + } + if (cm) { signalLater(cm, "markerCleared", cm, this, min, max) } + if (withOp) { endOperation(cm) } + if (this.parent) { this.parent.clear() } +}; + +// Find the position of the marker in the document. Returns a {from, +// to} object by default. Side can be passed to get a specific side +// -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the +// Pos objects returned contain a line object, rather than a line +// number (used to prevent looking up the same line twice). +TextMarker.prototype.find = function (side, lineObj) { + var this$1 = this; + + if (side == null && this.type == "bookmark") { side = 1 } + var from, to + for (var i = 0; i < this.lines.length; ++i) { + var line = this$1.lines[i] + var span = getMarkedSpanFor(line.markedSpans, this$1) + if (span.from != null) { + from = Pos(lineObj ? line : lineNo(line), span.from) + if (side == -1) { return from } + } + if (span.to != null) { + to = Pos(lineObj ? line : lineNo(line), span.to) + if (side == 1) { return to } + } + } + return from && {from: from, to: to} +}; + +// Signals that the marker's widget changed, and surrounding layout +// should be recomputed. +TextMarker.prototype.changed = function () { + var this$1 = this; + + var pos = this.find(-1, true), widget = this, cm = this.doc.cm + if (!pos || !cm) { return } + runInOp(cm, function () { + var line = pos.line, lineN = lineNo(pos.line) + var view = findViewForLine(cm, lineN) + if (view) { + clearLineMeasurementCacheFor(view) + cm.curOp.selectionChanged = cm.curOp.forceUpdate = true + } + cm.curOp.updateMaxLine = true + if (!lineIsHidden(widget.doc, line) && widget.height != null) { + var oldHeight = widget.height + widget.height = null + var dHeight = widgetHeight(widget) - oldHeight + if (dHeight) + { updateLineHeight(line, line.height + dHeight) } + } + signalLater(cm, "markerChanged", cm, this$1) + }) +}; + +TextMarker.prototype.attachLine = function (line) { + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) + { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this) } + } + this.lines.push(line) +}; + +TextMarker.prototype.detachLine = function (line) { + this.lines.splice(indexOf(this.lines, line), 1) + if (!this.lines.length && this.doc.cm) { + var op = this.doc.cm.curOp + ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this) + } +}; +eventMixin(TextMarker) + +// Create a marker, wire it up to the right lines, and +function markText(doc, from, to, options, type) { + // Shared markers (across linked documents) are handled separately + // (markTextShared will call out to this again, once per + // document). + if (options && options.shared) { return markTextShared(doc, from, to, options, type) } + // Ensure we are in an operation. + if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) } + + var marker = new TextMarker(doc, type), diff = cmp(from, to) + if (options) { copyObj(options, marker, false) } + // Don't connect empty markers unless clearWhenEmpty is false + if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) + { return marker } + if (marker.replacedWith) { + // Showing up as a widget implies collapsed (widget replaces text) + marker.collapsed = true + marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget") + if (!options.handleMouseEvents) { marker.widgetNode.setAttribute("cm-ignore-events", "true") } + if (options.insertLeft) { marker.widgetNode.insertLeft = true } + } + if (marker.collapsed) { + if (conflictingCollapsedRange(doc, from.line, from, to, marker) || + from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) + { throw new Error("Inserting collapsed marker partially overlapping an existing one") } + seeCollapsedSpans() + } + + if (marker.addToHistory) + { addChangeToHistory(doc, {from: from, to: to, origin: "markText"}, doc.sel, NaN) } + + var curLine = from.line, cm = doc.cm, updateMaxLine + doc.iter(curLine, to.line + 1, function (line) { + if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) + { updateMaxLine = true } + if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0) } + addMarkedSpan(line, new MarkedSpan(marker, + curLine == from.line ? from.ch : null, + curLine == to.line ? to.ch : null)) + ++curLine + }) + // lineIsHidden depends on the presence of the spans, so needs a second pass + if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) { + if (lineIsHidden(doc, line)) { updateLineHeight(line, 0) } + }) } + + if (marker.clearOnEnter) { on(marker, "beforeCursorEnter", function () { return marker.clear(); }) } + + if (marker.readOnly) { + seeReadOnlySpans() + if (doc.history.done.length || doc.history.undone.length) + { doc.clearHistory() } + } + if (marker.collapsed) { + marker.id = ++nextMarkerId + marker.atomic = true + } + if (cm) { + // Sync editor state + if (updateMaxLine) { cm.curOp.updateMaxLine = true } + if (marker.collapsed) + { regChange(cm, from.line, to.line + 1) } + else if (marker.className || marker.title || marker.startStyle || marker.endStyle || marker.css) + { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, "text") } } + if (marker.atomic) { reCheckSelection(cm.doc) } + signalLater(cm, "markerAdded", cm, marker) + } + return marker +} + +// SHARED TEXTMARKERS + +// A shared marker spans multiple linked documents. It is +// implemented as a meta-marker-object controlling multiple normal +// markers. +var SharedTextMarker = function(markers, primary) { + var this$1 = this; + + this.markers = markers + this.primary = primary + for (var i = 0; i < markers.length; ++i) + { markers[i].parent = this$1 } +}; + +SharedTextMarker.prototype.clear = function () { + var this$1 = this; + + if (this.explicitlyCleared) { return } + this.explicitlyCleared = true + for (var i = 0; i < this.markers.length; ++i) + { this$1.markers[i].clear() } + signalLater(this, "clear") +}; + +SharedTextMarker.prototype.find = function (side, lineObj) { + return this.primary.find(side, lineObj) +}; +eventMixin(SharedTextMarker) + +function markTextShared(doc, from, to, options, type) { + options = copyObj(options) + options.shared = false + var markers = [markText(doc, from, to, options, type)], primary = markers[0] + var widget = options.widgetNode + linkedDocs(doc, function (doc) { + if (widget) { options.widgetNode = widget.cloneNode(true) } + markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type)) + for (var i = 0; i < doc.linked.length; ++i) + { if (doc.linked[i].isParent) { return } } + primary = lst(markers) + }) + return new SharedTextMarker(markers, primary) +} + +function findSharedMarkers(doc) { + return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; }) +} + +function copySharedMarkers(doc, markers) { + for (var i = 0; i < markers.length; i++) { + var marker = markers[i], pos = marker.find() + var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to) + if (cmp(mFrom, mTo)) { + var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type) + marker.markers.push(subMark) + subMark.parent = marker + } + } +} + +function detachSharedMarkers(markers) { + var loop = function ( i ) { + var marker = markers[i], linked = [marker.primary.doc] + linkedDocs(marker.primary.doc, function (d) { return linked.push(d); }) + for (var j = 0; j < marker.markers.length; j++) { + var subMarker = marker.markers[j] + if (indexOf(linked, subMarker.doc) == -1) { + subMarker.parent = null + marker.markers.splice(j--, 1) + } + } + }; + + for (var i = 0; i < markers.length; i++) loop( i ); +} + +var nextDocId = 0 +var Doc = function(text, mode, firstLine, lineSep, direction) { + if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) } + if (firstLine == null) { firstLine = 0 } + + BranchChunk.call(this, [new LeafChunk([new Line("", null)])]) + this.first = firstLine + this.scrollTop = this.scrollLeft = 0 + this.cantEdit = false + this.cleanGeneration = 1 + this.frontier = firstLine + var start = Pos(firstLine, 0) + this.sel = simpleSelection(start) + this.history = new History(null) + this.id = ++nextDocId + this.modeOption = mode + this.lineSep = lineSep + this.direction = (direction == "rtl") ? "rtl" : "ltr" + this.extend = false + + if (typeof text == "string") { text = this.splitLines(text) } + updateDoc(this, {from: start, to: start, text: text}) + setSelection(this, simpleSelection(start), sel_dontScroll) +} + +Doc.prototype = createObj(BranchChunk.prototype, { + constructor: Doc, + // Iterate over the document. Supports two forms -- with only one + // argument, it calls that for each line in the document. With + // three, it iterates over the range given by the first two (with + // the second being non-inclusive). + iter: function(from, to, op) { + if (op) { this.iterN(from - this.first, to - from, op) } + else { this.iterN(this.first, this.first + this.size, from) } + }, + + // Non-public interface for adding and removing lines. + insert: function(at, lines) { + var height = 0 + for (var i = 0; i < lines.length; ++i) { height += lines[i].height } + this.insertInner(at - this.first, lines, height) + }, + remove: function(at, n) { this.removeInner(at - this.first, n) }, + + // From here, the methods are part of the public interface. Most + // are also available from CodeMirror (editor) instances. + + getValue: function(lineSep) { + var lines = getLines(this, this.first, this.first + this.size) + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + setValue: docMethodOp(function(code) { + var top = Pos(this.first, 0), last = this.first + this.size - 1 + makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length), + text: this.splitLines(code), origin: "setValue", full: true}, true) + if (this.cm) { this.cm.scrollTo(0, 0) } + setSelection(this, simpleSelection(top), sel_dontScroll) + }), + replaceRange: function(code, from, to, origin) { + from = clipPos(this, from) + to = to ? clipPos(this, to) : from + replaceRange(this, code, from, to, origin) + }, + getRange: function(from, to, lineSep) { + var lines = getBetween(this, clipPos(this, from), clipPos(this, to)) + if (lineSep === false) { return lines } + return lines.join(lineSep || this.lineSeparator()) + }, + + getLine: function(line) {var l = this.getLineHandle(line); return l && l.text}, + + getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }}, + getLineNumber: function(line) {return lineNo(line)}, + + getLineHandleVisualStart: function(line) { + if (typeof line == "number") { line = getLine(this, line) } + return visualLine(line) + }, + + lineCount: function() {return this.size}, + firstLine: function() {return this.first}, + lastLine: function() {return this.first + this.size - 1}, + + clipPos: function(pos) {return clipPos(this, pos)}, + + getCursor: function(start) { + var range = this.sel.primary(), pos + if (start == null || start == "head") { pos = range.head } + else if (start == "anchor") { pos = range.anchor } + else if (start == "end" || start == "to" || start === false) { pos = range.to() } + else { pos = range.from() } + return pos + }, + listSelections: function() { return this.sel.ranges }, + somethingSelected: function() {return this.sel.somethingSelected()}, + + setCursor: docMethodOp(function(line, ch, options) { + setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options) + }), + setSelection: docMethodOp(function(anchor, head, options) { + setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options) + }), + extendSelection: docMethodOp(function(head, other, options) { + extendSelection(this, clipPos(this, head), other && clipPos(this, other), options) + }), + extendSelections: docMethodOp(function(heads, options) { + extendSelections(this, clipPosArray(this, heads), options) + }), + extendSelectionsBy: docMethodOp(function(f, options) { + var heads = map(this.sel.ranges, f) + extendSelections(this, clipPosArray(this, heads), options) + }), + setSelections: docMethodOp(function(ranges, primary, options) { + var this$1 = this; + + if (!ranges.length) { return } + var out = [] + for (var i = 0; i < ranges.length; i++) + { out[i] = new Range(clipPos(this$1, ranges[i].anchor), + clipPos(this$1, ranges[i].head)) } + if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex) } + setSelection(this, normalizeSelection(out, primary), options) + }), + addSelection: docMethodOp(function(anchor, head, options) { + var ranges = this.sel.ranges.slice(0) + ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor))) + setSelection(this, normalizeSelection(ranges, ranges.length - 1), options) + }), + + getSelection: function(lineSep) { + var this$1 = this; + + var ranges = this.sel.ranges, lines + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()) + lines = lines ? lines.concat(sel) : sel + } + if (lineSep === false) { return lines } + else { return lines.join(lineSep || this.lineSeparator()) } + }, + getSelections: function(lineSep) { + var this$1 = this; + + var parts = [], ranges = this.sel.ranges + for (var i = 0; i < ranges.length; i++) { + var sel = getBetween(this$1, ranges[i].from(), ranges[i].to()) + if (lineSep !== false) { sel = sel.join(lineSep || this$1.lineSeparator()) } + parts[i] = sel + } + return parts + }, + replaceSelection: function(code, collapse, origin) { + var dup = [] + for (var i = 0; i < this.sel.ranges.length; i++) + { dup[i] = code } + this.replaceSelections(dup, collapse, origin || "+input") + }, + replaceSelections: docMethodOp(function(code, collapse, origin) { + var this$1 = this; + + var changes = [], sel = this.sel + for (var i = 0; i < sel.ranges.length; i++) { + var range = sel.ranges[i] + changes[i] = {from: range.from(), to: range.to(), text: this$1.splitLines(code[i]), origin: origin} + } + var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse) + for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) + { makeChange(this$1, changes[i$1]) } + if (newSel) { setSelectionReplaceHistory(this, newSel) } + else if (this.cm) { ensureCursorVisible(this.cm) } + }), + undo: docMethodOp(function() {makeChangeFromHistory(this, "undo")}), + redo: docMethodOp(function() {makeChangeFromHistory(this, "redo")}), + undoSelection: docMethodOp(function() {makeChangeFromHistory(this, "undo", true)}), + redoSelection: docMethodOp(function() {makeChangeFromHistory(this, "redo", true)}), + + setExtending: function(val) {this.extend = val}, + getExtending: function() {return this.extend}, + + historySize: function() { + var hist = this.history, done = 0, undone = 0 + for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done } } + for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone } } + return {undo: done, redo: undone} + }, + clearHistory: function() {this.history = new History(this.history.maxGeneration)}, + + markClean: function() { + this.cleanGeneration = this.changeGeneration(true) + }, + changeGeneration: function(forceSplit) { + if (forceSplit) + { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null } + return this.history.generation + }, + isClean: function (gen) { + return this.history.generation == (gen || this.cleanGeneration) + }, + + getHistory: function() { + return {done: copyHistoryArray(this.history.done), + undone: copyHistoryArray(this.history.undone)} + }, + setHistory: function(histData) { + var hist = this.history = new History(this.history.maxGeneration) + hist.done = copyHistoryArray(histData.done.slice(0), null, true) + hist.undone = copyHistoryArray(histData.undone.slice(0), null, true) + }, + + setGutterMarker: docMethodOp(function(line, gutterID, value) { + return changeLine(this, line, "gutter", function (line) { + var markers = line.gutterMarkers || (line.gutterMarkers = {}) + markers[gutterID] = value + if (!value && isEmpty(markers)) { line.gutterMarkers = null } + return true + }) + }), + + clearGutter: docMethodOp(function(gutterID) { + var this$1 = this; + + this.iter(function (line) { + if (line.gutterMarkers && line.gutterMarkers[gutterID]) { + changeLine(this$1, line, "gutter", function () { + line.gutterMarkers[gutterID] = null + if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null } + return true + }) + } + }) + }), + + lineInfo: function(line) { + var n + if (typeof line == "number") { + if (!isLine(this, line)) { return null } + n = line + line = getLine(this, line) + if (!line) { return null } + } else { + n = lineNo(line) + if (n == null) { return null } + } + return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers, + textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass, + widgets: line.widgets} + }, + + addLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass" + if (!line[prop]) { line[prop] = cls } + else if (classTest(cls).test(line[prop])) { return false } + else { line[prop] += " " + cls } + return true + }) + }), + removeLineClass: docMethodOp(function(handle, where, cls) { + return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) { + var prop = where == "text" ? "textClass" + : where == "background" ? "bgClass" + : where == "gutter" ? "gutterClass" : "wrapClass" + var cur = line[prop] + if (!cur) { return false } + else if (cls == null) { line[prop] = null } + else { + var found = cur.match(classTest(cls)) + if (!found) { return false } + var end = found.index + found[0].length + line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null + } + return true + }) + }), + + addLineWidget: docMethodOp(function(handle, node, options) { + return addLineWidget(this, handle, node, options) + }), + removeLineWidget: function(widget) { widget.clear() }, + + markText: function(from, to, options) { + return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range") + }, + setBookmark: function(pos, options) { + var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options), + insertLeft: options && options.insertLeft, + clearWhenEmpty: false, shared: options && options.shared, + handleMouseEvents: options && options.handleMouseEvents} + pos = clipPos(this, pos) + return markText(this, pos, pos, realOpts, "bookmark") + }, + findMarksAt: function(pos) { + pos = clipPos(this, pos) + var markers = [], spans = getLine(this, pos.line).markedSpans + if (spans) { for (var i = 0; i < spans.length; ++i) { + var span = spans[i] + if ((span.from == null || span.from <= pos.ch) && + (span.to == null || span.to >= pos.ch)) + { markers.push(span.marker.parent || span.marker) } + } } + return markers + }, + findMarks: function(from, to, filter) { + from = clipPos(this, from); to = clipPos(this, to) + var found = [], lineNo = from.line + this.iter(from.line, to.line + 1, function (line) { + var spans = line.markedSpans + if (spans) { for (var i = 0; i < spans.length; i++) { + var span = spans[i] + if (!(span.to != null && lineNo == from.line && from.ch >= span.to || + span.from == null && lineNo != from.line || + span.from != null && lineNo == to.line && span.from >= to.ch) && + (!filter || filter(span.marker))) + { found.push(span.marker.parent || span.marker) } + } } + ++lineNo + }) + return found + }, + getAllMarks: function() { + var markers = [] + this.iter(function (line) { + var sps = line.markedSpans + if (sps) { for (var i = 0; i < sps.length; ++i) + { if (sps[i].from != null) { markers.push(sps[i].marker) } } } + }) + return markers + }, + + posFromIndex: function(off) { + var ch, lineNo = this.first, sepSize = this.lineSeparator().length + this.iter(function (line) { + var sz = line.text.length + sepSize + if (sz > off) { ch = off; return true } + off -= sz + ++lineNo + }) + return clipPos(this, Pos(lineNo, ch)) + }, + indexFromPos: function (coords) { + coords = clipPos(this, coords) + var index = coords.ch + if (coords.line < this.first || coords.ch < 0) { return 0 } + var sepSize = this.lineSeparator().length + this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value + index += line.text.length + sepSize + }) + return index + }, + + copy: function(copyHistory) { + var doc = new Doc(getLines(this, this.first, this.first + this.size), + this.modeOption, this.first, this.lineSep, this.direction) + doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft + doc.sel = this.sel + doc.extend = false + if (copyHistory) { + doc.history.undoDepth = this.history.undoDepth + doc.setHistory(this.getHistory()) + } + return doc + }, + + linkedDoc: function(options) { + if (!options) { options = {} } + var from = this.first, to = this.first + this.size + if (options.from != null && options.from > from) { from = options.from } + if (options.to != null && options.to < to) { to = options.to } + var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction) + if (options.sharedHist) { copy.history = this.history + ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist}) + copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}] + copySharedMarkers(copy, findSharedMarkers(this)) + return copy + }, + unlinkDoc: function(other) { + var this$1 = this; + + if (other instanceof CodeMirror) { other = other.doc } + if (this.linked) { for (var i = 0; i < this.linked.length; ++i) { + var link = this$1.linked[i] + if (link.doc != other) { continue } + this$1.linked.splice(i, 1) + other.unlinkDoc(this$1) + detachSharedMarkers(findSharedMarkers(this$1)) + break + } } + // If the histories were shared, split them again + if (other.history == this.history) { + var splitIds = [other.id] + linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true) + other.history = new History(null) + other.history.done = copyHistoryArray(this.history.done, splitIds) + other.history.undone = copyHistoryArray(this.history.undone, splitIds) + } + }, + iterLinkedDocs: function(f) {linkedDocs(this, f)}, + + getMode: function() {return this.mode}, + getEditor: function() {return this.cm}, + + splitLines: function(str) { + if (this.lineSep) { return str.split(this.lineSep) } + return splitLinesAuto(str) + }, + lineSeparator: function() { return this.lineSep || "\n" }, + + setDirection: docMethodOp(function (dir) { + if (dir != "rtl") { dir = "ltr" } + if (dir == this.direction) { return } + this.direction = dir + this.iter(function (line) { return line.order = null; }) + if (this.cm) { directionChanged(this.cm) } + }) +}) + +// Public alias. +Doc.prototype.eachLine = Doc.prototype.iter + +// Kludge to work around strange IE behavior where it'll sometimes +// re-fire a series of drag-related events right after the drop (#1551) +var lastDrop = 0 + +function onDrop(e) { + var cm = this + clearDragCursor(cm) + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) + { return } + e_preventDefault(e) + if (ie) { lastDrop = +new Date } + var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files + if (!pos || cm.isReadOnly()) { return } + // Might be a file drop, in which case we simply extract the text + // and insert it. + if (files && files.length && window.FileReader && window.File) { + var n = files.length, text = Array(n), read = 0 + var loadFile = function (file, i) { + if (cm.options.allowDropFileTypes && + indexOf(cm.options.allowDropFileTypes, file.type) == -1) + { return } + + var reader = new FileReader + reader.onload = operation(cm, function () { + var content = reader.result + if (/[\x00-\x08\x0e-\x1f]{2}/.test(content)) { content = "" } + text[i] = content + if (++read == n) { + pos = clipPos(cm.doc, pos) + var change = {from: pos, to: pos, + text: cm.doc.splitLines(text.join(cm.doc.lineSeparator())), + origin: "paste"} + makeChange(cm.doc, change) + setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change))) + } + }) + reader.readAsText(file) + } + for (var i = 0; i < n; ++i) { loadFile(files[i], i) } + } else { // Normal drop + // Don't do a replace if the drop happened inside of the selected text. + if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) { + cm.state.draggingText(e) + // Ensure the editor is re-focused + setTimeout(function () { return cm.display.input.focus(); }, 20) + return + } + try { + var text$1 = e.dataTransfer.getData("Text") + if (text$1) { + var selected + if (cm.state.draggingText && !cm.state.draggingText.copy) + { selected = cm.listSelections() } + setSelectionNoUndo(cm.doc, simpleSelection(pos, pos)) + if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1) + { replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag") } } + cm.replaceSelection(text$1, "around", "paste") + cm.display.input.focus() + } + } + catch(e){} + } +} + +function onDragStart(cm, e) { + if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return } + if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return } + + e.dataTransfer.setData("Text", cm.getSelection()) + e.dataTransfer.effectAllowed = "copyMove" + + // Use dummy image instead of default browsers image. + // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there. + if (e.dataTransfer.setDragImage && !safari) { + var img = elt("img", null, null, "position: fixed; left: 0; top: 0;") + img.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" + if (presto) { + img.width = img.height = 1 + cm.display.wrapper.appendChild(img) + // Force a relayout, or Opera won't use our image for some obscure reason + img._top = img.offsetTop + } + e.dataTransfer.setDragImage(img, 0, 0) + if (presto) { img.parentNode.removeChild(img) } + } +} + +function onDragOver(cm, e) { + var pos = posFromMouse(cm, e) + if (!pos) { return } + var frag = document.createDocumentFragment() + drawSelectionCursor(cm, pos, frag) + if (!cm.display.dragCursor) { + cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors") + cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv) + } + removeChildrenAndAdd(cm.display.dragCursor, frag) +} + +function clearDragCursor(cm) { + if (cm.display.dragCursor) { + cm.display.lineSpace.removeChild(cm.display.dragCursor) + cm.display.dragCursor = null + } +} + +// These must be handled carefully, because naively registering a +// handler for each editor will cause the editors to never be +// garbage collected. + +function forEachCodeMirror(f) { + if (!document.body.getElementsByClassName) { return } + var byClass = document.body.getElementsByClassName("CodeMirror") + for (var i = 0; i < byClass.length; i++) { + var cm = byClass[i].CodeMirror + if (cm) { f(cm) } + } +} + +var globalsRegistered = false +function ensureGlobalHandlers() { + if (globalsRegistered) { return } + registerGlobalHandlers() + globalsRegistered = true +} +function registerGlobalHandlers() { + // When the window resizes, we need to refresh active editors. + var resizeTimer + on(window, "resize", function () { + if (resizeTimer == null) { resizeTimer = setTimeout(function () { + resizeTimer = null + forEachCodeMirror(onResize) + }, 100) } + }) + // When the window loses focus, we want to show the editor as blurred + on(window, "blur", function () { return forEachCodeMirror(onBlur); }) +} +// Called when the window resizes +function onResize(cm) { + var d = cm.display + if (d.lastWrapHeight == d.wrapper.clientHeight && d.lastWrapWidth == d.wrapper.clientWidth) + { return } + // Might be a text scaling operation, clear size caches. + d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null + d.scrollbarsClipped = false + cm.setSize() +} + +var keyNames = { + 3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", + 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", + 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", + 46: "Delete", 59: ";", 61: "=", 91: "Mod", 92: "Mod", 93: "Mod", + 106: "*", 107: "=", 109: "-", 110: ".", 111: "/", 127: "Delete", + 173: "-", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", + 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", + 63273: "Home", 63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert" +} + +// Number keys +for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i) } +// Alphabetic keys +for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1) } +// Function keys +for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2 } + +var keyMap = {} + +keyMap.basic = { + "Left": "goCharLeft", "Right": "goCharRight", "Up": "goLineUp", "Down": "goLineDown", + "End": "goLineEnd", "Home": "goLineStartSmart", "PageUp": "goPageUp", "PageDown": "goPageDown", + "Delete": "delCharAfter", "Backspace": "delCharBefore", "Shift-Backspace": "delCharBefore", + "Tab": "defaultTab", "Shift-Tab": "indentAuto", + "Enter": "newlineAndIndent", "Insert": "toggleOverwrite", + "Esc": "singleSelection" +} +// Note that the save and find-related commands aren't defined by +// default. User code or addons can define them. Unknown commands +// are simply ignored. +keyMap.pcDefault = { + "Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", + "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", + "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", + "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter", "Ctrl-S": "save", "Ctrl-F": "find", + "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", + "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", + "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", + fallthrough: "basic" +} +// Very basic readline/emacs-style bindings, which are standard on Mac. +keyMap.emacsy = { + "Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", + "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", + "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp", "Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", + "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars", + "Ctrl-O": "openLine" +} +keyMap.macDefault = { + "Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", + "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", + "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", + "Ctrl-Alt-Backspace": "delGroupAfter", "Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", + "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", + "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", + "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", + fallthrough: ["basic", "emacsy"] +} +keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault + +// KEYMAP DISPATCH + +function normalizeKeyName(name) { + var parts = name.split(/-(?!$)/) + name = parts[parts.length - 1] + var alt, ctrl, shift, cmd + for (var i = 0; i < parts.length - 1; i++) { + var mod = parts[i] + if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true } + else if (/^a(lt)?$/i.test(mod)) { alt = true } + else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true } + else if (/^s(hift)?$/i.test(mod)) { shift = true } + else { throw new Error("Unrecognized modifier name: " + mod) } + } + if (alt) { name = "Alt-" + name } + if (ctrl) { name = "Ctrl-" + name } + if (cmd) { name = "Cmd-" + name } + if (shift) { name = "Shift-" + name } + return name +} + +// This is a kludge to keep keymaps mostly working as raw objects +// (backwards compatibility) while at the same time support features +// like normalization and multi-stroke key bindings. It compiles a +// new normalized keymap, and then updates the old object to reflect +// this. +function normalizeKeyMap(keymap) { + var copy = {} + for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) { + var value = keymap[keyname] + if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue } + if (value == "...") { delete keymap[keyname]; continue } + + var keys = map(keyname.split(" "), normalizeKeyName) + for (var i = 0; i < keys.length; i++) { + var val = (void 0), name = (void 0) + if (i == keys.length - 1) { + name = keys.join(" ") + val = value + } else { + name = keys.slice(0, i + 1).join(" ") + val = "..." + } + var prev = copy[name] + if (!prev) { copy[name] = val } + else if (prev != val) { throw new Error("Inconsistent bindings for " + name) } + } + delete keymap[keyname] + } } + for (var prop in copy) { keymap[prop] = copy[prop] } + return keymap +} + +function lookupKey(key, map, handle, context) { + map = getKeyMap(map) + var found = map.call ? map.call(key, context) : map[key] + if (found === false) { return "nothing" } + if (found === "...") { return "multi" } + if (found != null && handle(found)) { return "handled" } + + if (map.fallthrough) { + if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") + { return lookupKey(key, map.fallthrough, handle, context) } + for (var i = 0; i < map.fallthrough.length; i++) { + var result = lookupKey(key, map.fallthrough[i], handle, context) + if (result) { return result } + } + } +} + +// Modifier key presses don't count as 'real' key presses for the +// purpose of keymap fallthrough. +function isModifierKey(value) { + var name = typeof value == "string" ? value : keyNames[value.keyCode] + return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod" +} + +// Look up the name of a key as indicated by an event object. +function keyName(event, noShift) { + if (presto && event.keyCode == 34 && event["char"]) { return false } + var base = keyNames[event.keyCode], name = base + if (name == null || event.altGraphKey) { return false } + if (event.altKey && base != "Alt") { name = "Alt-" + name } + if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") { name = "Ctrl-" + name } + if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Cmd") { name = "Cmd-" + name } + if (!noShift && event.shiftKey && base != "Shift") { name = "Shift-" + name } + return name +} + +function getKeyMap(val) { + return typeof val == "string" ? keyMap[val] : val +} + +// Helper for deleting text near the selection(s), used to implement +// backspace, delete, and similar functionality. +function deleteNearSelection(cm, compute) { + var ranges = cm.doc.sel.ranges, kill = [] + // Build up a set of ranges to kill first, merging overlapping + // ranges. + for (var i = 0; i < ranges.length; i++) { + var toKill = compute(ranges[i]) + while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) { + var replaced = kill.pop() + if (cmp(replaced.from, toKill.from) < 0) { + toKill.from = replaced.from + break + } + } + kill.push(toKill) + } + // Next, remove those actual ranges. + runInOp(cm, function () { + for (var i = kill.length - 1; i >= 0; i--) + { replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete") } + ensureCursorVisible(cm) + }) +} + +// Commands are parameter-less actions that can be performed on an +// editor, mostly used for keybindings. +var commands = { + selectAll: selectAll, + singleSelection: function (cm) { return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll); }, + killLine: function (cm) { return deleteNearSelection(cm, function (range) { + if (range.empty()) { + var len = getLine(cm.doc, range.head.line).text.length + if (range.head.ch == len && range.head.line < cm.lastLine()) + { return {from: range.head, to: Pos(range.head.line + 1, 0)} } + else + { return {from: range.head, to: Pos(range.head.line, len)} } + } else { + return {from: range.from(), to: range.to()} + } + }); }, + deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), + to: clipPos(cm.doc, Pos(range.to().line + 1, 0)) + }); }); }, + delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({ + from: Pos(range.from().line, 0), to: range.from() + }); }); }, + delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + var leftPos = cm.coordsChar({left: 0, top: top}, "div") + return {from: leftPos, to: range.from()} + }); }, + delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + return {from: range.from(), to: rightPos } + }); }, + undo: function (cm) { return cm.undo(); }, + redo: function (cm) { return cm.redo(); }, + undoSelection: function (cm) { return cm.undoSelection(); }, + redoSelection: function (cm) { return cm.redoSelection(); }, + goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); }, + goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); }, + goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); }, + {origin: "+move", bias: 1} + ); }, + goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); }, + {origin: "+move", bias: 1} + ); }, + goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); }, + {origin: "+move", bias: -1} + ); }, + goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, "div") + }, sel_move); }, + goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + return cm.coordsChar({left: 0, top: top}, "div") + }, sel_move); }, + goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) { + var top = cm.charCoords(range.head, "div").top + 5 + var pos = cm.coordsChar({left: 0, top: top}, "div") + if (pos.ch < cm.getLine(pos.line).search(/\S/)) { return lineStartSmart(cm, range.head) } + return pos + }, sel_move); }, + goLineUp: function (cm) { return cm.moveV(-1, "line"); }, + goLineDown: function (cm) { return cm.moveV(1, "line"); }, + goPageUp: function (cm) { return cm.moveV(-1, "page"); }, + goPageDown: function (cm) { return cm.moveV(1, "page"); }, + goCharLeft: function (cm) { return cm.moveH(-1, "char"); }, + goCharRight: function (cm) { return cm.moveH(1, "char"); }, + goColumnLeft: function (cm) { return cm.moveH(-1, "column"); }, + goColumnRight: function (cm) { return cm.moveH(1, "column"); }, + goWordLeft: function (cm) { return cm.moveH(-1, "word"); }, + goGroupRight: function (cm) { return cm.moveH(1, "group"); }, + goGroupLeft: function (cm) { return cm.moveH(-1, "group"); }, + goWordRight: function (cm) { return cm.moveH(1, "word"); }, + delCharBefore: function (cm) { return cm.deleteH(-1, "char"); }, + delCharAfter: function (cm) { return cm.deleteH(1, "char"); }, + delWordBefore: function (cm) { return cm.deleteH(-1, "word"); }, + delWordAfter: function (cm) { return cm.deleteH(1, "word"); }, + delGroupBefore: function (cm) { return cm.deleteH(-1, "group"); }, + delGroupAfter: function (cm) { return cm.deleteH(1, "group"); }, + indentAuto: function (cm) { return cm.indentSelection("smart"); }, + indentMore: function (cm) { return cm.indentSelection("add"); }, + indentLess: function (cm) { return cm.indentSelection("subtract"); }, + insertTab: function (cm) { return cm.replaceSelection("\t"); }, + insertSoftTab: function (cm) { + var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize + for (var i = 0; i < ranges.length; i++) { + var pos = ranges[i].from() + var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize) + spaces.push(spaceStr(tabSize - col % tabSize)) + } + cm.replaceSelections(spaces) + }, + defaultTab: function (cm) { + if (cm.somethingSelected()) { cm.indentSelection("add") } + else { cm.execCommand("insertTab") } + }, + // Swap the two chars left and right of each selection's head. + // Move cursor behind the two swapped characters afterwards. + // + // Doesn't consider line feeds a character. + // Doesn't scan more than one line above to find a character. + // Doesn't do anything on an empty line. + // Doesn't do anything with non-empty selections. + transposeChars: function (cm) { return runInOp(cm, function () { + var ranges = cm.listSelections(), newSel = [] + for (var i = 0; i < ranges.length; i++) { + if (!ranges[i].empty()) { continue } + var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text + if (line) { + if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1) } + if (cur.ch > 0) { + cur = new Pos(cur.line, cur.ch + 1) + cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), + Pos(cur.line, cur.ch - 2), cur, "+transpose") + } else if (cur.line > cm.doc.first) { + var prev = getLine(cm.doc, cur.line - 1).text + if (prev) { + cur = new Pos(cur.line, 1) + cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + + prev.charAt(prev.length - 1), + Pos(cur.line - 1, prev.length - 1), cur, "+transpose") + } + } + } + newSel.push(new Range(cur, cur)) + } + cm.setSelections(newSel) + }); }, + newlineAndIndent: function (cm) { return runInOp(cm, function () { + var sels = cm.listSelections() + for (var i = sels.length - 1; i >= 0; i--) + { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input") } + sels = cm.listSelections() + for (var i$1 = 0; i$1 < sels.length; i$1++) + { cm.indentLine(sels[i$1].from().line, null, true) } + ensureCursorVisible(cm) + }); }, + openLine: function (cm) { return cm.replaceSelection("\n", "start"); }, + toggleOverwrite: function (cm) { return cm.toggleOverwrite(); } +} + + +function lineStart(cm, lineN) { + var line = getLine(cm.doc, lineN) + var visual = visualLine(line) + if (visual != line) { lineN = lineNo(visual) } + return endOfLine(true, cm, visual, lineN, 1) +} +function lineEnd(cm, lineN) { + var line = getLine(cm.doc, lineN) + var visual = visualLineEnd(line) + if (visual != line) { lineN = lineNo(visual) } + return endOfLine(true, cm, line, lineN, -1) +} +function lineStartSmart(cm, pos) { + var start = lineStart(cm, pos.line) + var line = getLine(cm.doc, start.line) + var order = getOrder(line, cm.doc.direction) + if (!order || order[0].level == 0) { + var firstNonWS = Math.max(0, line.text.search(/\S/)) + var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch + return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky) + } + return start +} + +// Run a handler that was bound to a key. +function doHandleBinding(cm, bound, dropShift) { + if (typeof bound == "string") { + bound = commands[bound] + if (!bound) { return false } + } + // Ensure previous input has been read, so that the handler sees a + // consistent view of the document + cm.display.input.ensurePolled() + var prevShift = cm.display.shift, done = false + try { + if (cm.isReadOnly()) { cm.state.suppressEdits = true } + if (dropShift) { cm.display.shift = false } + done = bound(cm) != Pass + } finally { + cm.display.shift = prevShift + cm.state.suppressEdits = false + } + return done +} + +function lookupKeyForEditor(cm, name, handle) { + for (var i = 0; i < cm.state.keyMaps.length; i++) { + var result = lookupKey(name, cm.state.keyMaps[i], handle, cm) + if (result) { return result } + } + return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm)) + || lookupKey(name, cm.options.keyMap, handle, cm) +} + +var stopSeq = new Delayed +function dispatchKey(cm, name, e, handle) { + var seq = cm.state.keySeq + if (seq) { + if (isModifierKey(name)) { return "handled" } + stopSeq.set(50, function () { + if (cm.state.keySeq == seq) { + cm.state.keySeq = null + cm.display.input.reset() + } + }) + name = seq + " " + name + } + var result = lookupKeyForEditor(cm, name, handle) + + if (result == "multi") + { cm.state.keySeq = name } + if (result == "handled") + { signalLater(cm, "keyHandled", cm, name, e) } + + if (result == "handled" || result == "multi") { + e_preventDefault(e) + restartBlink(cm) + } + + if (seq && !result && /\'$/.test(name)) { + e_preventDefault(e) + return true + } + return !!result +} + +// Handle a key from the keydown event. +function handleKeyBinding(cm, e) { + var name = keyName(e, true) + if (!name) { return false } + + if (e.shiftKey && !cm.state.keySeq) { + // First try to resolve full name (including 'Shift-'). Failing + // that, see if there is a cursor-motion command (starting with + // 'go') bound to the keyname without 'Shift-'. + return dispatchKey(cm, "Shift-" + name, e, function (b) { return doHandleBinding(cm, b, true); }) + || dispatchKey(cm, name, e, function (b) { + if (typeof b == "string" ? /^go[A-Z]/.test(b) : b.motion) + { return doHandleBinding(cm, b) } + }) + } else { + return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); }) + } +} + +// Handle a key from the keypress event +function handleCharBinding(cm, e, ch) { + return dispatchKey(cm, "'" + ch + "'", e, function (b) { return doHandleBinding(cm, b, true); }) +} + +var lastStoppedKey = null +function onKeyDown(e) { + var cm = this + cm.curOp.focus = activeElt() + if (signalDOMEvent(cm, e)) { return } + // IE does strange things with escape. + if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false } + var code = e.keyCode + cm.display.shift = code == 16 || e.shiftKey + var handled = handleKeyBinding(cm, e) + if (presto) { + lastStoppedKey = handled ? code : null + // Opera has no cut event... we try to at least catch the key combo + if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) + { cm.replaceSelection("", null, "cut") } + } + + // Turn mouse into crosshair when Alt is held on Mac. + if (code == 18 && !/\bCodeMirror-crosshair\b/.test(cm.display.lineDiv.className)) + { showCrossHair(cm) } +} + +function showCrossHair(cm) { + var lineDiv = cm.display.lineDiv + addClass(lineDiv, "CodeMirror-crosshair") + + function up(e) { + if (e.keyCode == 18 || !e.altKey) { + rmClass(lineDiv, "CodeMirror-crosshair") + off(document, "keyup", up) + off(document, "mouseover", up) + } + } + on(document, "keyup", up) + on(document, "mouseover", up) +} + +function onKeyUp(e) { + if (e.keyCode == 16) { this.doc.sel.shift = false } + signalDOMEvent(this, e) +} + +function onKeyPress(e) { + var cm = this + if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return } + var keyCode = e.keyCode, charCode = e.charCode + if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return} + if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return } + var ch = String.fromCharCode(charCode == null ? keyCode : charCode) + // Some browsers fire keypress events for backspace + if (ch == "\x08") { return } + if (handleCharBinding(cm, e, ch)) { return } + cm.display.input.onKeyPress(e) +} + +// A mouse down can be a single click, double click, triple click, +// start of selection drag, start of text drag, new cursor +// (ctrl-click), rectangle drag (alt-drag), or xwin +// middle-click-paste. Or it might be a click on something we should +// not interfere with, such as a scrollbar or widget. +function onMouseDown(e) { + var cm = this, display = cm.display + if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return } + display.input.ensurePolled() + display.shift = e.shiftKey + + if (eventInWidget(display, e)) { + if (!webkit) { + // Briefly turn off draggability, to allow widgets to do + // normal dragging things. + display.scroller.draggable = false + setTimeout(function () { return display.scroller.draggable = true; }, 100) + } + return + } + if (clickInGutter(cm, e)) { return } + var start = posFromMouse(cm, e) + window.focus() + + switch (e_button(e)) { + case 1: + // #3261: make sure, that we're not starting a second selection + if (cm.state.selectingText) + { cm.state.selectingText(e) } + else if (start) + { leftButtonDown(cm, e, start) } + else if (e_target(e) == display.scroller) + { e_preventDefault(e) } + break + case 2: + if (webkit) { cm.state.lastMiddleDown = +new Date } + if (start) { extendSelection(cm.doc, start) } + setTimeout(function () { return display.input.focus(); }, 20) + e_preventDefault(e) + break + case 3: + if (captureRightClick) { onContextMenu(cm, e) } + else { delayBlurEvent(cm) } + break + } +} + +var lastClick; +var lastDoubleClick; +function leftButtonDown(cm, e, start) { + if (ie) { setTimeout(bind(ensureFocus, cm), 0) } + else { cm.curOp.focus = activeElt() } + + var now = +new Date, type + if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) { + type = "triple" + } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) { + type = "double" + lastDoubleClick = {time: now, pos: start} + } else { + type = "single" + lastClick = {time: now, pos: start} + } + + var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey, contained + if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && + type == "single" && (contained = sel.contains(start)) > -1 && + (cmp((contained = sel.ranges[contained]).from(), start) < 0 || start.xRel > 0) && + (cmp(contained.to(), start) > 0 || start.xRel < 0)) + { leftButtonStartDrag(cm, e, start, modifier) } + else + { leftButtonSelect(cm, e, start, type, modifier) } +} + +// Start a text drag. When it ends, see if any dragging actually +// happen, and treat as a click if it didn't. +function leftButtonStartDrag(cm, e, start, modifier) { + var display = cm.display, moved = false + var dragEnd = operation(cm, function (e) { + if (webkit) { display.scroller.draggable = false } + cm.state.draggingText = false + off(document, "mouseup", dragEnd) + off(document, "mousemove", mouseMove) + off(display.scroller, "dragstart", dragStart) + off(display.scroller, "drop", dragEnd) + if (!moved) { + e_preventDefault(e) + if (!modifier) + { extendSelection(cm.doc, start) } + // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081) + if (webkit || ie && ie_version == 9) + { setTimeout(function () {document.body.focus(); display.input.focus()}, 20) } + else + { display.input.focus() } + } + }) + var mouseMove = function(e2) { + moved = moved || Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) >= 10 + } + var dragStart = function () { return moved = true; } + // Let the drag handler handle this. + if (webkit) { display.scroller.draggable = true } + cm.state.draggingText = dragEnd + dragEnd.copy = mac ? e.altKey : e.ctrlKey + // IE's approach to draggable + if (display.scroller.dragDrop) { display.scroller.dragDrop() } + on(document, "mouseup", dragEnd) + on(document, "mousemove", mouseMove) + on(display.scroller, "dragstart", dragStart) + on(display.scroller, "drop", dragEnd) + + delayBlurEvent(cm) + setTimeout(function () { return display.input.focus(); }, 20) +} + +// Normal selection, as opposed to text dragging. +function leftButtonSelect(cm, e, start, type, addNew) { + var display = cm.display, doc = cm.doc + e_preventDefault(e) + + var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges + if (addNew && !e.shiftKey) { + ourIndex = doc.sel.contains(start) + if (ourIndex > -1) + { ourRange = ranges[ourIndex] } + else + { ourRange = new Range(start, start) } + } else { + ourRange = doc.sel.primary() + ourIndex = doc.sel.primIndex + } + + if (chromeOS ? e.shiftKey && e.metaKey : e.altKey) { + type = "rect" + if (!addNew) { ourRange = new Range(start, start) } + start = posFromMouse(cm, e, true, true) + ourIndex = -1 + } else if (type == "double") { + var word = cm.findWordAt(start) + if (cm.display.shift || doc.extend) + { ourRange = extendRange(doc, ourRange, word.anchor, word.head) } + else + { ourRange = word } + } else if (type == "triple") { + var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0))) + if (cm.display.shift || doc.extend) + { ourRange = extendRange(doc, ourRange, line.anchor, line.head) } + else + { ourRange = line } + } else { + ourRange = extendRange(doc, ourRange, start) + } + + if (!addNew) { + ourIndex = 0 + setSelection(doc, new Selection([ourRange], 0), sel_mouse) + startSel = doc.sel + } else if (ourIndex == -1) { + ourIndex = ranges.length + setSelection(doc, normalizeSelection(ranges.concat([ourRange]), ourIndex), + {scroll: false, origin: "*mouse"}) + } else if (ranges.length > 1 && ranges[ourIndex].empty() && type == "single" && !e.shiftKey) { + setSelection(doc, normalizeSelection(ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), + {scroll: false, origin: "*mouse"}) + startSel = doc.sel + } else { + replaceOneSelection(doc, ourIndex, ourRange, sel_mouse) + } + + var lastPos = start + function extendTo(pos) { + if (cmp(lastPos, pos) == 0) { return } + lastPos = pos + + if (type == "rect") { + var ranges = [], tabSize = cm.options.tabSize + var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize) + var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize) + var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol) + for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); + line <= end; line++) { + var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize) + if (left == right) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))) } + else if (text.length > leftPos) + { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))) } + } + if (!ranges.length) { ranges.push(new Range(start, start)) } + setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), + {origin: "*mouse", scroll: false}) + cm.scrollIntoView(pos) + } else { + var oldRange = ourRange + var anchor = oldRange.anchor, head = pos + if (type != "single") { + var range + if (type == "double") + { range = cm.findWordAt(pos) } + else + { range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0))) } + if (cmp(range.anchor, anchor) > 0) { + head = range.head + anchor = minPos(oldRange.from(), range.anchor) + } else { + head = range.anchor + anchor = maxPos(oldRange.to(), range.head) + } + } + var ranges$1 = startSel.ranges.slice(0) + ranges$1[ourIndex] = new Range(clipPos(doc, anchor), head) + setSelection(doc, normalizeSelection(ranges$1, ourIndex), sel_mouse) + } + } + + var editorSize = display.wrapper.getBoundingClientRect() + // Used to ensure timeout re-tries don't fire when another extend + // happened in the meantime (clearTimeout isn't reliable -- at + // least on Chrome, the timeouts still happen even when cleared, + // if the clear happens after their scheduled firing time). + var counter = 0 + + function extend(e) { + var curCount = ++counter + var cur = posFromMouse(cm, e, true, type == "rect") + if (!cur) { return } + if (cmp(cur, lastPos) != 0) { + cm.curOp.focus = activeElt() + extendTo(cur) + var visible = visibleLines(display, doc) + if (cur.line >= visible.to || cur.line < visible.from) + { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e) }}), 150) } + } else { + var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0 + if (outside) { setTimeout(operation(cm, function () { + if (counter != curCount) { return } + display.scroller.scrollTop += outside + extend(e) + }), 50) } + } + } + + function done(e) { + cm.state.selectingText = false + counter = Infinity + e_preventDefault(e) + display.input.focus() + off(document, "mousemove", move) + off(document, "mouseup", up) + doc.history.lastSelOrigin = null + } + + var move = operation(cm, function (e) { + if (!e_button(e)) { done(e) } + else { extend(e) } + }) + var up = operation(cm, done) + cm.state.selectingText = up + on(document, "mousemove", move) + on(document, "mouseup", up) +} + + +// Determines whether an event happened in the gutter, and fires the +// handlers for the corresponding event. +function gutterEvent(cm, e, type, prevent) { + var mX, mY + try { mX = e.clientX; mY = e.clientY } + catch(e) { return false } + if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false } + if (prevent) { e_preventDefault(e) } + + var display = cm.display + var lineBox = display.lineDiv.getBoundingClientRect() + + if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) } + mY -= lineBox.top - display.viewOffset + + for (var i = 0; i < cm.options.gutters.length; ++i) { + var g = display.gutters.childNodes[i] + if (g && g.getBoundingClientRect().right >= mX) { + var line = lineAtHeight(cm.doc, mY) + var gutter = cm.options.gutters[i] + signal(cm, type, cm, line, gutter, e) + return e_defaultPrevented(e) + } + } +} + +function clickInGutter(cm, e) { + return gutterEvent(cm, e, "gutterClick", true) +} + +// CONTEXT MENU HANDLING + +// To make the context menu work, we need to briefly unhide the +// textarea (making it as unobtrusive as possible) to let the +// right-click take effect on it. +function onContextMenu(cm, e) { + if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return } + if (signalDOMEvent(cm, e, "contextmenu")) { return } + cm.display.input.onContextMenu(e) +} + +function contextMenuInGutter(cm, e) { + if (!hasHandler(cm, "gutterContextMenu")) { return false } + return gutterEvent(cm, e, "gutterContextMenu", false) +} + +function themeChanged(cm) { + cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-") + clearCaches(cm) +} + +var Init = {toString: function(){return "CodeMirror.Init"}} + +var defaults = {} +var optionHandlers = {} + +function defineOptions(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers + + function option(name, deflt, handle, notOnInit) { + CodeMirror.defaults[name] = deflt + if (handle) { optionHandlers[name] = + notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old) }} : handle } + } + + CodeMirror.defineOption = option + + // Passed to option handlers when there is no old value. + CodeMirror.Init = Init + + // These two are, on init, called from the constructor because they + // have to be initialized before the editor can start at all. + option("value", "", function (cm, val) { return cm.setValue(val); }, true) + option("mode", null, function (cm, val) { + cm.doc.modeOption = val + loadMode(cm) + }, true) + + option("indentUnit", 2, loadMode, true) + option("indentWithTabs", false) + option("smartIndent", true) + option("tabSize", 4, function (cm) { + resetModeState(cm) + clearCaches(cm) + regChange(cm) + }, true) + option("lineSeparator", null, function (cm, val) { + cm.doc.lineSep = val + if (!val) { return } + var newBreaks = [], lineNo = cm.doc.first + cm.doc.iter(function (line) { + for (var pos = 0;;) { + var found = line.text.indexOf(val, pos) + if (found == -1) { break } + pos = found + val.length + newBreaks.push(Pos(lineNo, found)) + } + lineNo++ + }) + for (var i = newBreaks.length - 1; i >= 0; i--) + { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)) } + }) + option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200f\u2028\u2029\ufeff]/g, function (cm, val, old) { + cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g") + if (old != Init) { cm.refresh() } + }) + option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true) + option("electricChars", true) + option("inputStyle", mobile ? "contenteditable" : "textarea", function () { + throw new Error("inputStyle can not (yet) be changed in a running editor") // FIXME + }, true) + option("spellcheck", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true) + option("rtlMoveVisually", !windows) + option("wholeLineUpdateBefore", true) + + option("theme", "default", function (cm) { + themeChanged(cm) + guttersChanged(cm) + }, true) + option("keyMap", "default", function (cm, val, old) { + var next = getKeyMap(val) + var prev = old != Init && getKeyMap(old) + if (prev && prev.detach) { prev.detach(cm, next) } + if (next.attach) { next.attach(cm, prev || null) } + }) + option("extraKeys", null) + + option("lineWrapping", false, wrappingChanged, true) + option("gutters", [], function (cm) { + setGuttersForLineNumbers(cm.options) + guttersChanged(cm) + }, true) + option("fixedGutter", true, function (cm, val) { + cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0" + cm.refresh() + }, true) + option("coverGutterNextToScrollbar", false, function (cm) { return updateScrollbars(cm); }, true) + option("scrollbarStyle", "native", function (cm) { + initScrollbars(cm) + updateScrollbars(cm) + cm.display.scrollbars.setScrollTop(cm.doc.scrollTop) + cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft) + }, true) + option("lineNumbers", false, function (cm) { + setGuttersForLineNumbers(cm.options) + guttersChanged(cm) + }, true) + option("firstLineNumber", 1, guttersChanged, true) + option("lineNumberFormatter", function (integer) { return integer; }, guttersChanged, true) + option("showCursorWhenSelecting", false, updateSelection, true) + + option("resetSelectionOnContextMenu", true) + option("lineWiseCopyCut", true) + + option("readOnly", false, function (cm, val) { + if (val == "nocursor") { + onBlur(cm) + cm.display.input.blur() + cm.display.disabled = true + } else { + cm.display.disabled = false + } + cm.display.input.readOnlyChanged(val) + }) + option("disableInput", false, function (cm, val) {if (!val) { cm.display.input.reset() }}, true) + option("dragDrop", true, dragDropChanged) + option("allowDropFileTypes", null) + + option("cursorBlinkRate", 530) + option("cursorScrollMargin", 0) + option("cursorHeight", 1, updateSelection, true) + option("singleCursorHeightPerLine", true, updateSelection, true) + option("workTime", 100) + option("workDelay", 100) + option("flattenSpans", true, resetModeState, true) + option("addModeClass", false, resetModeState, true) + option("pollInterval", 100) + option("undoDepth", 200, function (cm, val) { return cm.doc.history.undoDepth = val; }) + option("historyEventDelay", 1250) + option("viewportMargin", 10, function (cm) { return cm.refresh(); }, true) + option("maxHighlightLength", 10000, resetModeState, true) + option("moveInputWithCursor", true, function (cm, val) { + if (!val) { cm.display.input.resetPosition() } + }) + + option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }) + option("autofocus", null) + option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true) +} + +function guttersChanged(cm) { + updateGutters(cm) + regChange(cm) + alignHorizontally(cm) +} + +function dragDropChanged(cm, value, old) { + var wasOn = old && old != Init + if (!value != !wasOn) { + var funcs = cm.display.dragFunctions + var toggle = value ? on : off + toggle(cm.display.scroller, "dragstart", funcs.start) + toggle(cm.display.scroller, "dragenter", funcs.enter) + toggle(cm.display.scroller, "dragover", funcs.over) + toggle(cm.display.scroller, "dragleave", funcs.leave) + toggle(cm.display.scroller, "drop", funcs.drop) + } +} + +function wrappingChanged(cm) { + if (cm.options.lineWrapping) { + addClass(cm.display.wrapper, "CodeMirror-wrap") + cm.display.sizer.style.minWidth = "" + cm.display.sizerWidth = null + } else { + rmClass(cm.display.wrapper, "CodeMirror-wrap") + findMaxLine(cm) + } + estimateLineHeights(cm) + regChange(cm) + clearCaches(cm) + setTimeout(function () { return updateScrollbars(cm); }, 100) +} + +// A CodeMirror instance represents an editor. This is the object +// that user code is usually dealing with. + +function CodeMirror(place, options) { + var this$1 = this; + + if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) } + + this.options = options = options ? copyObj(options) : {} + // Determine effective options based on given values and defaults. + copyObj(defaults, options, false) + setGuttersForLineNumbers(options) + + var doc = options.value + if (typeof doc == "string") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction) } + this.doc = doc + + var input = new CodeMirror.inputStyles[options.inputStyle](this) + var display = this.display = new Display(place, doc, input) + display.wrapper.CodeMirror = this + updateGutters(this) + themeChanged(this) + if (options.lineWrapping) + { this.display.wrapper.className += " CodeMirror-wrap" } + initScrollbars(this) + + this.state = { + keyMaps: [], // stores maps added by addKeyMap + overlays: [], // highlighting overlays, as added by addOverlay + modeGen: 0, // bumped when mode/overlay changes, used to invalidate highlighting info + overwrite: false, + delayingBlurEvent: false, + focused: false, + suppressEdits: false, // used to disable editing during key handlers when in readOnly mode + pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in input.poll + selectingText: false, + draggingText: false, + highlight: new Delayed(), // stores highlight worker timeout + keySeq: null, // Unfinished key sequence + specialChars: null + } + + if (options.autofocus && !mobile) { display.input.focus() } + + // Override magic textarea content restore that IE sometimes does + // on our hidden textarea on reload + if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20) } + + registerEventHandlers(this) + ensureGlobalHandlers() + + startOperation(this) + this.curOp.forceUpdate = true + attachDoc(this, doc) + + if ((options.autofocus && !mobile) || this.hasFocus()) + { setTimeout(bind(onFocus, this), 20) } + else + { onBlur(this) } + + for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt)) + { optionHandlers[opt](this$1, options[opt], Init) } } + maybeUpdateLineNumberWidth(this) + if (options.finishInit) { options.finishInit(this) } + for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this$1) } + endOperation(this) + // Suppress optimizelegibility in Webkit, since it breaks text + // measuring on line wrapping boundaries. + if (webkit && options.lineWrapping && + getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") + { display.lineDiv.style.textRendering = "auto" } +} + +// The default configuration options. +CodeMirror.defaults = defaults +// Functions to run when options are changed. +CodeMirror.optionHandlers = optionHandlers + +// Attach the necessary event handlers when initializing the editor +function registerEventHandlers(cm) { + var d = cm.display + on(d.scroller, "mousedown", operation(cm, onMouseDown)) + // Older IE's will not fire a second mousedown for a double click + if (ie && ie_version < 11) + { on(d.scroller, "dblclick", operation(cm, function (e) { + if (signalDOMEvent(cm, e)) { return } + var pos = posFromMouse(cm, e) + if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return } + e_preventDefault(e) + var word = cm.findWordAt(pos) + extendSelection(cm.doc, word.anchor, word.head) + })) } + else + { on(d.scroller, "dblclick", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }) } + // Some browsers fire contextmenu *after* opening the menu, at + // which point we can't mess with it anymore. Context menu is + // handled in onMouseDown for these browsers. + if (!captureRightClick) { on(d.scroller, "contextmenu", function (e) { return onContextMenu(cm, e); }) } + + // Used to suppress mouse event handling when a touch happens + var touchFinished, prevTouch = {end: 0} + function finishTouch() { + if (d.activeTouch) { + touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000) + prevTouch = d.activeTouch + prevTouch.end = +new Date + } + } + function isMouseLikeTouchEvent(e) { + if (e.touches.length != 1) { return false } + var touch = e.touches[0] + return touch.radiusX <= 1 && touch.radiusY <= 1 + } + function farAway(touch, other) { + if (other.left == null) { return true } + var dx = other.left - touch.left, dy = other.top - touch.top + return dx * dx + dy * dy > 20 * 20 + } + on(d.scroller, "touchstart", function (e) { + if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e)) { + d.input.ensurePolled() + clearTimeout(touchFinished) + var now = +new Date + d.activeTouch = {start: now, moved: false, + prev: now - prevTouch.end <= 300 ? prevTouch : null} + if (e.touches.length == 1) { + d.activeTouch.left = e.touches[0].pageX + d.activeTouch.top = e.touches[0].pageY + } + } + }) + on(d.scroller, "touchmove", function () { + if (d.activeTouch) { d.activeTouch.moved = true } + }) + on(d.scroller, "touchend", function (e) { + var touch = d.activeTouch + if (touch && !eventInWidget(d, e) && touch.left != null && + !touch.moved && new Date - touch.start < 300) { + var pos = cm.coordsChar(d.activeTouch, "page"), range + if (!touch.prev || farAway(touch, touch.prev)) // Single tap + { range = new Range(pos, pos) } + else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap + { range = cm.findWordAt(pos) } + else // Triple tap + { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) } + cm.setSelection(range.anchor, range.head) + cm.focus() + e_preventDefault(e) + } + finishTouch() + }) + on(d.scroller, "touchcancel", finishTouch) + + // Sync scrolling between fake scrollbars and real scrollable + // area, ensure viewport is updated when scrolling. + on(d.scroller, "scroll", function () { + if (d.scroller.clientHeight) { + setScrollTop(cm, d.scroller.scrollTop) + setScrollLeft(cm, d.scroller.scrollLeft, true) + signal(cm, "scroll", cm) + } + }) + + // Listen to wheel events in order to try and update the viewport on time. + on(d.scroller, "mousewheel", function (e) { return onScrollWheel(cm, e); }) + on(d.scroller, "DOMMouseScroll", function (e) { return onScrollWheel(cm, e); }) + + // Prevent wrapper from ever scrolling + on(d.wrapper, "scroll", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; }) + + d.dragFunctions = { + enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e) }}, + over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e) }}, + start: function (e) { return onDragStart(cm, e); }, + drop: operation(cm, onDrop), + leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm) }} + } + + var inp = d.input.getField() + on(inp, "keyup", function (e) { return onKeyUp.call(cm, e); }) + on(inp, "keydown", operation(cm, onKeyDown)) + on(inp, "keypress", operation(cm, onKeyPress)) + on(inp, "focus", function (e) { return onFocus(cm, e); }) + on(inp, "blur", function (e) { return onBlur(cm, e); }) +} + +var initHooks = [] +CodeMirror.defineInitHook = function (f) { return initHooks.push(f); } + +// Indent the given line. The how parameter can be "smart", +// "add"/null, "subtract", or "prev". When aggressive is false +// (typically set to true for forced single-line indents), empty +// lines are not indented, and places where the mode returns Pass +// are left alone. +function indentLine(cm, n, how, aggressive) { + var doc = cm.doc, state + if (how == null) { how = "add" } + if (how == "smart") { + // Fall back to "prev" when the mode doesn't have an indentation + // method. + if (!doc.mode.indent) { how = "prev" } + else { state = getStateBefore(cm, n) } + } + + var tabSize = cm.options.tabSize + var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize) + if (line.stateAfter) { line.stateAfter = null } + var curSpaceString = line.text.match(/^\s*/)[0], indentation + if (!aggressive && !/\S/.test(line.text)) { + indentation = 0 + how = "not" + } else if (how == "smart") { + indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text) + if (indentation == Pass || indentation > 150) { + if (!aggressive) { return } + how = "prev" + } + } + if (how == "prev") { + if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize) } + else { indentation = 0 } + } else if (how == "add") { + indentation = curSpace + cm.options.indentUnit + } else if (how == "subtract") { + indentation = curSpace - cm.options.indentUnit + } else if (typeof how == "number") { + indentation = curSpace + how + } + indentation = Math.max(0, indentation) + + var indentString = "", pos = 0 + if (cm.options.indentWithTabs) + { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += "\t"} } + if (pos < indentation) { indentString += spaceStr(indentation - pos) } + + if (indentString != curSpaceString) { + replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input") + line.stateAfter = null + return true + } else { + // Ensure that, if the cursor was in the whitespace at the start + // of the line, it is moved to the end of that space. + for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) { + var range = doc.sel.ranges[i$1] + if (range.head.line == n && range.head.ch < curSpaceString.length) { + var pos$1 = Pos(n, curSpaceString.length) + replaceOneSelection(doc, i$1, new Range(pos$1, pos$1)) + break + } + } + } +} + +// This will be set to a {lineWise: bool, text: [string]} object, so +// that, when pasting, we know what kind of selections the copied +// text was made out of. +var lastCopied = null + +function setLastCopied(newLastCopied) { + lastCopied = newLastCopied +} + +function applyTextInput(cm, inserted, deleted, sel, origin) { + var doc = cm.doc + cm.display.shift = false + if (!sel) { sel = doc.sel } + + var paste = cm.state.pasteIncoming || origin == "paste" + var textLines = splitLinesAuto(inserted), multiPaste = null + // When pasing N lines into N selections, insert one line per selection + if (paste && sel.ranges.length > 1) { + if (lastCopied && lastCopied.text.join("\n") == inserted) { + if (sel.ranges.length % lastCopied.text.length == 0) { + multiPaste = [] + for (var i = 0; i < lastCopied.text.length; i++) + { multiPaste.push(doc.splitLines(lastCopied.text[i])) } + } + } else if (textLines.length == sel.ranges.length) { + multiPaste = map(textLines, function (l) { return [l]; }) + } + } + + var updateInput + // Normal behavior is to insert the new text into every selection + for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) { + var range = sel.ranges[i$1] + var from = range.from(), to = range.to() + if (range.empty()) { + if (deleted && deleted > 0) // Handle deletion + { from = Pos(from.line, from.ch - deleted) } + else if (cm.state.overwrite && !paste) // Handle overwrite + { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)) } + else if (lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == inserted) + { from = to = Pos(from.line, 0) } + } + updateInput = cm.curOp.updateInput + var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines, + origin: origin || (paste ? "paste" : cm.state.cutIncoming ? "cut" : "+input")} + makeChange(cm.doc, changeEvent) + signalLater(cm, "inputRead", cm, changeEvent) + } + if (inserted && !paste) + { triggerElectric(cm, inserted) } + + ensureCursorVisible(cm) + cm.curOp.updateInput = updateInput + cm.curOp.typing = true + cm.state.pasteIncoming = cm.state.cutIncoming = false +} + +function handlePaste(e, cm) { + var pasted = e.clipboardData && e.clipboardData.getData("Text") + if (pasted) { + e.preventDefault() + if (!cm.isReadOnly() && !cm.options.disableInput) + { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, "paste"); }) } + return true + } +} + +function triggerElectric(cm, inserted) { + // When an 'electric' character is inserted, immediately trigger a reindent + if (!cm.options.electricChars || !cm.options.smartIndent) { return } + var sel = cm.doc.sel + + for (var i = sel.ranges.length - 1; i >= 0; i--) { + var range = sel.ranges[i] + if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue } + var mode = cm.getModeAt(range.head) + var indented = false + if (mode.electricChars) { + for (var j = 0; j < mode.electricChars.length; j++) + { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) { + indented = indentLine(cm, range.head.line, "smart") + break + } } + } else if (mode.electricInput) { + if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) + { indented = indentLine(cm, range.head.line, "smart") } + } + if (indented) { signalLater(cm, "electricInput", cm, range.head.line) } + } +} + +function copyableRanges(cm) { + var text = [], ranges = [] + for (var i = 0; i < cm.doc.sel.ranges.length; i++) { + var line = cm.doc.sel.ranges[i].head.line + var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)} + ranges.push(lineRange) + text.push(cm.getRange(lineRange.anchor, lineRange.head)) + } + return {text: text, ranges: ranges} +} + +function disableBrowserMagic(field, spellcheck) { + field.setAttribute("autocorrect", "off") + field.setAttribute("autocapitalize", "off") + field.setAttribute("spellcheck", !!spellcheck) +} + +function hiddenTextarea() { + var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none") + var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;") + // The textarea is kept positioned near the cursor to prevent the + // fact that it'll be scrolled into view on input from scrolling + // our fake cursor out of view. On webkit, when wrap=off, paste is + // very slow. So make the area wide instead. + if (webkit) { te.style.width = "1000px" } + else { te.setAttribute("wrap", "off") } + // If border: 0; -- iOS fails to open keyboard (issue #1287) + if (ios) { te.style.border = "1px solid black" } + disableBrowserMagic(te) + return div +} + +// The publicly visible API. Note that methodOp(f) means +// 'wrap f in an operation, performed on its `this` parameter'. + +// This is not the complete set of editor methods. Most of the +// methods defined on the Doc type are also injected into +// CodeMirror.prototype, for backwards compatibility and +// convenience. + +function addEditorMethods(CodeMirror) { + var optionHandlers = CodeMirror.optionHandlers + + var helpers = CodeMirror.helpers = {} + + CodeMirror.prototype = { + constructor: CodeMirror, + focus: function(){window.focus(); this.display.input.focus()}, + + setOption: function(option, value) { + var options = this.options, old = options[option] + if (options[option] == value && option != "mode") { return } + options[option] = value + if (optionHandlers.hasOwnProperty(option)) + { operation(this, optionHandlers[option])(this, value, old) } + signal(this, "optionChange", this, option) + }, + + getOption: function(option) {return this.options[option]}, + getDoc: function() {return this.doc}, + + addKeyMap: function(map, bottom) { + this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map)) + }, + removeKeyMap: function(map) { + var maps = this.state.keyMaps + for (var i = 0; i < maps.length; ++i) + { if (maps[i] == map || maps[i].name == map) { + maps.splice(i, 1) + return true + } } + }, + + addOverlay: methodOp(function(spec, options) { + var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec) + if (mode.startState) { throw new Error("Overlays may not be stateful.") } + insertSorted(this.state.overlays, + {mode: mode, modeSpec: spec, opaque: options && options.opaque, + priority: (options && options.priority) || 0}, + function (overlay) { return overlay.priority; }) + this.state.modeGen++ + regChange(this) + }), + removeOverlay: methodOp(function(spec) { + var this$1 = this; + + var overlays = this.state.overlays + for (var i = 0; i < overlays.length; ++i) { + var cur = overlays[i].modeSpec + if (cur == spec || typeof spec == "string" && cur.name == spec) { + overlays.splice(i, 1) + this$1.state.modeGen++ + regChange(this$1) + return + } + } + }), + + indentLine: methodOp(function(n, dir, aggressive) { + if (typeof dir != "string" && typeof dir != "number") { + if (dir == null) { dir = this.options.smartIndent ? "smart" : "prev" } + else { dir = dir ? "add" : "subtract" } + } + if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive) } + }), + indentSelection: methodOp(function(how) { + var this$1 = this; + + var ranges = this.doc.sel.ranges, end = -1 + for (var i = 0; i < ranges.length; i++) { + var range = ranges[i] + if (!range.empty()) { + var from = range.from(), to = range.to() + var start = Math.max(end, from.line) + end = Math.min(this$1.lastLine(), to.line - (to.ch ? 0 : 1)) + 1 + for (var j = start; j < end; ++j) + { indentLine(this$1, j, how) } + var newRanges = this$1.doc.sel.ranges + if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) + { replaceOneSelection(this$1.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll) } + } else if (range.head.line > end) { + indentLine(this$1, range.head.line, how, true) + end = range.head.line + if (i == this$1.doc.sel.primIndex) { ensureCursorVisible(this$1) } + } + } + }), + + // Fetch the parser token for a given character. Useful for hacks + // that want to inspect the mode state (say, for completion). + getTokenAt: function(pos, precise) { + return takeToken(this, pos, precise) + }, + + getLineTokens: function(line, precise) { + return takeToken(this, Pos(line), precise, true) + }, + + getTokenTypeAt: function(pos) { + pos = clipPos(this.doc, pos) + var styles = getLineStyles(this, getLine(this.doc, pos.line)) + var before = 0, after = (styles.length - 1) / 2, ch = pos.ch + var type + if (ch == 0) { type = styles[2] } + else { for (;;) { + var mid = (before + after) >> 1 + if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid } + else if (styles[mid * 2 + 1] < ch) { before = mid + 1 } + else { type = styles[mid * 2 + 2]; break } + } } + var cut = type ? type.indexOf("overlay ") : -1 + return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1) + }, + + getModeAt: function(pos) { + var mode = this.doc.mode + if (!mode.innerMode) { return mode } + return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode + }, + + getHelper: function(pos, type) { + return this.getHelpers(pos, type)[0] + }, + + getHelpers: function(pos, type) { + var this$1 = this; + + var found = [] + if (!helpers.hasOwnProperty(type)) { return found } + var help = helpers[type], mode = this.getModeAt(pos) + if (typeof mode[type] == "string") { + if (help[mode[type]]) { found.push(help[mode[type]]) } + } else if (mode[type]) { + for (var i = 0; i < mode[type].length; i++) { + var val = help[mode[type][i]] + if (val) { found.push(val) } + } + } else if (mode.helperType && help[mode.helperType]) { + found.push(help[mode.helperType]) + } else if (help[mode.name]) { + found.push(help[mode.name]) + } + for (var i$1 = 0; i$1 < help._global.length; i$1++) { + var cur = help._global[i$1] + if (cur.pred(mode, this$1) && indexOf(found, cur.val) == -1) + { found.push(cur.val) } + } + return found + }, + + getStateAfter: function(line, precise) { + var doc = this.doc + line = clipLine(doc, line == null ? doc.first + doc.size - 1: line) + return getStateBefore(this, line + 1, precise) + }, + + cursorCoords: function(start, mode) { + var pos, range = this.doc.sel.primary() + if (start == null) { pos = range.head } + else if (typeof start == "object") { pos = clipPos(this.doc, start) } + else { pos = start ? range.from() : range.to() } + return cursorCoords(this, pos, mode || "page") + }, + + charCoords: function(pos, mode) { + return charCoords(this, clipPos(this.doc, pos), mode || "page") + }, + + coordsChar: function(coords, mode) { + coords = fromCoordSystem(this, coords, mode || "page") + return coordsChar(this, coords.left, coords.top) + }, + + lineAtHeight: function(height, mode) { + height = fromCoordSystem(this, {top: height, left: 0}, mode || "page").top + return lineAtHeight(this.doc, height + this.display.viewOffset) + }, + heightAtLine: function(line, mode, includeWidgets) { + var end = false, lineObj + if (typeof line == "number") { + var last = this.doc.first + this.doc.size - 1 + if (line < this.doc.first) { line = this.doc.first } + else if (line > last) { line = last; end = true } + lineObj = getLine(this.doc, line) + } else { + lineObj = line + } + return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || "page", includeWidgets || end).top + + (end ? this.doc.height - heightAtLine(lineObj) : 0) + }, + + defaultTextHeight: function() { return textHeight(this.display) }, + defaultCharWidth: function() { return charWidth(this.display) }, + + getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}}, + + addWidget: function(pos, node, scroll, vert, horiz) { + var display = this.display + pos = cursorCoords(this, clipPos(this.doc, pos)) + var top = pos.bottom, left = pos.left + node.style.position = "absolute" + node.setAttribute("cm-ignore-events", "true") + this.display.input.setUneditable(node) + display.sizer.appendChild(node) + if (vert == "over") { + top = pos.top + } else if (vert == "above" || vert == "near") { + var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), + hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth) + // Default to positioning above (if specified and possible); otherwise default to positioning below + if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) + { top = pos.top - node.offsetHeight } + else if (pos.bottom + node.offsetHeight <= vspace) + { top = pos.bottom } + if (left + node.offsetWidth > hspace) + { left = hspace - node.offsetWidth } + } + node.style.top = top + "px" + node.style.left = node.style.right = "" + if (horiz == "right") { + left = display.sizer.clientWidth - node.offsetWidth + node.style.right = "0px" + } else { + if (horiz == "left") { left = 0 } + else if (horiz == "middle") { left = (display.sizer.clientWidth - node.offsetWidth) / 2 } + node.style.left = left + "px" + } + if (scroll) + { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}) } + }, + + triggerOnKeyDown: methodOp(onKeyDown), + triggerOnKeyPress: methodOp(onKeyPress), + triggerOnKeyUp: onKeyUp, + + execCommand: function(cmd) { + if (commands.hasOwnProperty(cmd)) + { return commands[cmd].call(null, this) } + }, + + triggerElectric: methodOp(function(text) { triggerElectric(this, text) }), + + findPosH: function(from, amount, unit, visually) { + var this$1 = this; + + var dir = 1 + if (amount < 0) { dir = -1; amount = -amount } + var cur = clipPos(this.doc, from) + for (var i = 0; i < amount; ++i) { + cur = findPosH(this$1.doc, cur, dir, unit, visually) + if (cur.hitSide) { break } + } + return cur + }, + + moveH: methodOp(function(dir, unit) { + var this$1 = this; + + this.extendSelectionsBy(function (range) { + if (this$1.display.shift || this$1.doc.extend || range.empty()) + { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) } + else + { return dir < 0 ? range.from() : range.to() } + }, sel_move) + }), + + deleteH: methodOp(function(dir, unit) { + var sel = this.doc.sel, doc = this.doc + if (sel.somethingSelected()) + { doc.replaceSelection("", null, "+delete") } + else + { deleteNearSelection(this, function (range) { + var other = findPosH(doc, range.head, dir, unit, false) + return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other} + }) } + }), + + findPosV: function(from, amount, unit, goalColumn) { + var this$1 = this; + + var dir = 1, x = goalColumn + if (amount < 0) { dir = -1; amount = -amount } + var cur = clipPos(this.doc, from) + for (var i = 0; i < amount; ++i) { + var coords = cursorCoords(this$1, cur, "div") + if (x == null) { x = coords.left } + else { coords.left = x } + cur = findPosV(this$1, coords, dir, unit) + if (cur.hitSide) { break } + } + return cur + }, + + moveV: methodOp(function(dir, unit) { + var this$1 = this; + + var doc = this.doc, goals = [] + var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected() + doc.extendSelectionsBy(function (range) { + if (collapse) + { return dir < 0 ? range.from() : range.to() } + var headPos = cursorCoords(this$1, range.head, "div") + if (range.goalColumn != null) { headPos.left = range.goalColumn } + goals.push(headPos.left) + var pos = findPosV(this$1, headPos, dir, unit) + if (unit == "page" && range == doc.sel.primary()) + { addToScrollPos(this$1, null, charCoords(this$1, pos, "div").top - headPos.top) } + return pos + }, sel_move) + if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++) + { doc.sel.ranges[i].goalColumn = goals[i] } } + }), + + // Find the word at the given position (as returned by coordsChar). + findWordAt: function(pos) { + var doc = this.doc, line = getLine(doc, pos.line).text + var start = pos.ch, end = pos.ch + if (line) { + var helper = this.getHelper(pos, "wordChars") + if ((pos.sticky == "before" || end == line.length) && start) { --start; } else { ++end } + var startChar = line.charAt(start) + var check = isWordChar(startChar, helper) + ? function (ch) { return isWordChar(ch, helper); } + : /\s/.test(startChar) ? function (ch) { return /\s/.test(ch); } + : function (ch) { return (!/\s/.test(ch) && !isWordChar(ch)); } + while (start > 0 && check(line.charAt(start - 1))) { --start } + while (end < line.length && check(line.charAt(end))) { ++end } + } + return new Range(Pos(pos.line, start), Pos(pos.line, end)) + }, + + toggleOverwrite: function(value) { + if (value != null && value == this.state.overwrite) { return } + if (this.state.overwrite = !this.state.overwrite) + { addClass(this.display.cursorDiv, "CodeMirror-overwrite") } + else + { rmClass(this.display.cursorDiv, "CodeMirror-overwrite") } + + signal(this, "overwriteToggle", this, this.state.overwrite) + }, + hasFocus: function() { return this.display.input.getField() == activeElt() }, + isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) }, + + scrollTo: methodOp(function(x, y) { + if (x != null || y != null) { resolveScrollToPos(this) } + if (x != null) { this.curOp.scrollLeft = x } + if (y != null) { this.curOp.scrollTop = y } + }), + getScrollInfo: function() { + var scroller = this.display.scroller + return {left: scroller.scrollLeft, top: scroller.scrollTop, + height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight, + width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth, + clientHeight: displayHeight(this), clientWidth: displayWidth(this)} + }, + + scrollIntoView: methodOp(function(range, margin) { + if (range == null) { + range = {from: this.doc.sel.primary().head, to: null} + if (margin == null) { margin = this.options.cursorScrollMargin } + } else if (typeof range == "number") { + range = {from: Pos(range, 0), to: null} + } else if (range.from == null) { + range = {from: range, to: null} + } + if (!range.to) { range.to = range.from } + range.margin = margin || 0 + + if (range.from.line != null) { + resolveScrollToPos(this) + this.curOp.scrollToPos = range + } else { + var sPos = calculateScrollPos(this, { + left: Math.min(range.from.left, range.to.left), + top: Math.min(range.from.top, range.to.top) - range.margin, + right: Math.max(range.from.right, range.to.right), + bottom: Math.max(range.from.bottom, range.to.bottom) + range.margin + }) + this.scrollTo(sPos.scrollLeft, sPos.scrollTop) + } + }), + + setSize: methodOp(function(width, height) { + var this$1 = this; + + var interpret = function (val) { return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val; } + if (width != null) { this.display.wrapper.style.width = interpret(width) } + if (height != null) { this.display.wrapper.style.height = interpret(height) } + if (this.options.lineWrapping) { clearLineMeasurementCache(this) } + var lineNo = this.display.viewFrom + this.doc.iter(lineNo, this.display.viewTo, function (line) { + if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) + { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, "widget"); break } } } + ++lineNo + }) + this.curOp.forceUpdate = true + signal(this, "refresh", this) + }), + + operation: function(f){return runInOp(this, f)}, + + refresh: methodOp(function() { + var oldHeight = this.display.cachedTextHeight + regChange(this) + this.curOp.forceUpdate = true + clearCaches(this) + this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop) + updateGutterSpace(this) + if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5) + { estimateLineHeights(this) } + signal(this, "refresh", this) + }), + + swapDoc: methodOp(function(doc) { + var old = this.doc + old.cm = null + attachDoc(this, doc) + clearCaches(this) + this.display.input.reset() + this.scrollTo(doc.scrollLeft, doc.scrollTop) + this.curOp.forceScroll = true + signalLater(this, "swapDoc", this, old) + return old + }), + + getInputField: function(){return this.display.input.getField()}, + getWrapperElement: function(){return this.display.wrapper}, + getScrollerElement: function(){return this.display.scroller}, + getGutterElement: function(){return this.display.gutters} + } + eventMixin(CodeMirror) + + CodeMirror.registerHelper = function(type, name, value) { + if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []} } + helpers[type][name] = value + } + CodeMirror.registerGlobalHelper = function(type, name, predicate, value) { + CodeMirror.registerHelper(type, name, value) + helpers[type]._global.push({pred: predicate, val: value}) + } +} + +// Used for horizontal relative motion. Dir is -1 or 1 (left or +// right), unit can be "char", "column" (like char, but doesn't +// cross line boundaries), "word" (across next word), or "group" (to +// the start of next group of word or non-word-non-whitespace +// chars). The visually param controls whether, in right-to-left +// text, direction 1 means to move towards the next index in the +// string, or towards the character to the right of the current +// position. The resulting position will have a hitSide=true +// property if it reached the end of the document. +function findPosH(doc, pos, dir, unit, visually) { + var oldPos = pos + var origDir = dir + var lineObj = getLine(doc, pos.line) + function findNextLine() { + var l = pos.line + dir + if (l < doc.first || l >= doc.first + doc.size) { return false } + pos = new Pos(l, pos.ch, pos.sticky) + return lineObj = getLine(doc, l) + } + function moveOnce(boundToLine) { + var next + if (visually) { + next = moveVisually(doc.cm, lineObj, pos, dir) + } else { + next = moveLogically(lineObj, pos, dir) + } + if (next == null) { + if (!boundToLine && findNextLine()) + { pos = endOfLine(visually, doc.cm, lineObj, pos.line, dir) } + else + { return false } + } else { + pos = next + } + return true + } + + if (unit == "char") { + moveOnce() + } else if (unit == "column") { + moveOnce(true) + } else if (unit == "word" || unit == "group") { + var sawType = null, group = unit == "group" + var helper = doc.cm && doc.cm.getHelper(pos, "wordChars") + for (var first = true;; first = false) { + if (dir < 0 && !moveOnce(!first)) { break } + var cur = lineObj.text.charAt(pos.ch) || "\n" + var type = isWordChar(cur, helper) ? "w" + : group && cur == "\n" ? "n" + : !group || /\s/.test(cur) ? null + : "p" + if (group && !first && !type) { type = "s" } + if (sawType && sawType != type) { + if (dir < 0) {dir = 1; moveOnce(); pos.sticky = "after"} + break + } + + if (type) { sawType = type } + if (dir > 0 && !moveOnce(!first)) { break } + } + } + var result = skipAtomic(doc, pos, oldPos, origDir, true) + if (equalCursorPos(oldPos, result)) { result.hitSide = true } + return result +} + +// For relative vertical movement. Dir may be -1 or 1. Unit can be +// "page" or "line". The resulting position will have a hitSide=true +// property if it reached the end of the document. +function findPosV(cm, pos, dir, unit) { + var doc = cm.doc, x = pos.left, y + if (unit == "page") { + var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight) + var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3) + y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount + + } else if (unit == "line") { + y = dir > 0 ? pos.bottom + 3 : pos.top - 3 + } + var target + for (;;) { + target = coordsChar(cm, x, y) + if (!target.outside) { break } + if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break } + y += dir * 5 + } + return target +} + +// CONTENTEDITABLE INPUT STYLE + +var ContentEditableInput = function(cm) { + this.cm = cm + this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null + this.polling = new Delayed() + this.composing = null + this.gracePeriod = false + this.readDOMTimeout = null +}; + +ContentEditableInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = input.cm + var div = input.div = display.lineDiv + disableBrowserMagic(div, cm.options.spellcheck) + + on(div, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + // IE doesn't fire input events, so we schedule a read for the pasted content in this way + if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20) } + }) + + on(div, "compositionstart", function (e) { + this$1.composing = {data: e.data, done: false} + }) + on(div, "compositionupdate", function (e) { + if (!this$1.composing) { this$1.composing = {data: e.data, done: false} } + }) + on(div, "compositionend", function (e) { + if (this$1.composing) { + if (e.data != this$1.composing.data) { this$1.readFromDOMSoon() } + this$1.composing.done = true + } + }) + + on(div, "touchstart", function () { return input.forceCompositionEnd(); }) + + on(div, "input", function () { + if (!this$1.composing) { this$1.readFromDOMSoon() } + }) + + function onCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}) + if (e.type == "cut") { cm.replaceSelection("", null, "cut") } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm) + setLastCopied({lineWise: true, text: ranges.text}) + if (e.type == "cut") { + cm.operation(function () { + cm.setSelections(ranges.ranges, 0, sel_dontScroll) + cm.replaceSelection("", null, "cut") + }) + } + } + if (e.clipboardData) { + e.clipboardData.clearData() + var content = lastCopied.text.join("\n") + // iOS exposes the clipboard API, but seems to discard content inserted into it + e.clipboardData.setData("Text", content) + if (e.clipboardData.getData("Text") == content) { + e.preventDefault() + return + } + } + // Old-fashioned briefly-focus-a-textarea hack + var kludge = hiddenTextarea(), te = kludge.firstChild + cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild) + te.value = lastCopied.text.join("\n") + var hadFocus = document.activeElement + selectInput(te) + setTimeout(function () { + cm.display.lineSpace.removeChild(kludge) + hadFocus.focus() + if (hadFocus == div) { input.showPrimarySelection() } + }, 50) + } + on(div, "copy", onCopyCut) + on(div, "cut", onCopyCut) +}; + +ContentEditableInput.prototype.prepareSelection = function () { + var result = prepareSelection(this.cm, false) + result.focus = this.cm.state.focused + return result +}; + +ContentEditableInput.prototype.showSelection = function (info, takeFocus) { + if (!info || !this.cm.display.view.length) { return } + if (info.focus || takeFocus) { this.showPrimarySelection() } + this.showMultipleSelections(info) +}; + +ContentEditableInput.prototype.showPrimarySelection = function () { + var sel = window.getSelection(), cm = this.cm, prim = cm.doc.sel.primary() + var from = prim.from(), to = prim.to() + + if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) { + sel.removeAllRanges() + return + } + + var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset) + var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset) + if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && + cmp(minPos(curAnchor, curFocus), from) == 0 && + cmp(maxPos(curAnchor, curFocus), to) == 0) + { return } + + var view = cm.display.view + var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) || + {node: view[0].measure.map[2], offset: 0} + var end = to.line < cm.display.viewTo && posToDOM(cm, to) + if (!end) { + var measure = view[view.length - 1].measure + var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map + end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]} + } + + if (!start || !end) { + sel.removeAllRanges() + return + } + + var old = sel.rangeCount && sel.getRangeAt(0), rng + try { rng = range(start.node, start.offset, end.offset, end.node) } + catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible + if (rng) { + if (!gecko && cm.state.focused) { + sel.collapse(start.node, start.offset) + if (!rng.collapsed) { + sel.removeAllRanges() + sel.addRange(rng) + } + } else { + sel.removeAllRanges() + sel.addRange(rng) + } + if (old && sel.anchorNode == null) { sel.addRange(old) } + else if (gecko) { this.startGracePeriod() } + } + this.rememberSelection() +}; + +ContentEditableInput.prototype.startGracePeriod = function () { + var this$1 = this; + + clearTimeout(this.gracePeriod) + this.gracePeriod = setTimeout(function () { + this$1.gracePeriod = false + if (this$1.selectionChanged()) + { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }) } + }, 20) +}; + +ContentEditableInput.prototype.showMultipleSelections = function (info) { + removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors) + removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection) +}; + +ContentEditableInput.prototype.rememberSelection = function () { + var sel = window.getSelection() + this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset + this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset +}; + +ContentEditableInput.prototype.selectionInEditor = function () { + var sel = window.getSelection() + if (!sel.rangeCount) { return false } + var node = sel.getRangeAt(0).commonAncestorContainer + return contains(this.div, node) +}; + +ContentEditableInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor") { + if (!this.selectionInEditor()) + { this.showSelection(this.prepareSelection(), true) } + this.div.focus() + } +}; +ContentEditableInput.prototype.blur = function () { this.div.blur() }; +ContentEditableInput.prototype.getField = function () { return this.div }; + +ContentEditableInput.prototype.supportsTouch = function () { return true }; + +ContentEditableInput.prototype.receivedFocus = function () { + var input = this + if (this.selectionInEditor()) + { this.pollSelection() } + else + { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }) } + + function poll() { + if (input.cm.state.focused) { + input.pollSelection() + input.polling.set(input.cm.options.pollInterval, poll) + } + } + this.polling.set(this.cm.options.pollInterval, poll) +}; + +ContentEditableInput.prototype.selectionChanged = function () { + var sel = window.getSelection() + return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || + sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset +}; + +ContentEditableInput.prototype.pollSelection = function () { + if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return } + var sel = window.getSelection(), cm = this.cm + // On Android Chrome (version 56, at least), backspacing into an + // uneditable block element will put the cursor in that element, + // and then, because it's not editable, hide the virtual keyboard. + // Because Android doesn't allow us to actually detect backspace + // presses in a sane way, this code checks for when that happens + // and simulates a backspace press in this case. + if (android && chrome && this.cm.options.gutters.length && isInGutter(sel.anchorNode)) { + this.cm.triggerOnKeyDown({type: "keydown", keyCode: 8, preventDefault: Math.abs}) + this.blur() + this.focus() + return + } + if (this.composing) { return } + this.rememberSelection() + var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset) + var head = domToPos(cm, sel.focusNode, sel.focusOffset) + if (anchor && head) { runInOp(cm, function () { + setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll) + if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true } + }) } +}; + +ContentEditableInput.prototype.pollContent = function () { + if (this.readDOMTimeout != null) { + clearTimeout(this.readDOMTimeout) + this.readDOMTimeout = null + } + + var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary() + var from = sel.from(), to = sel.to() + if (from.ch == 0 && from.line > cm.firstLine()) + { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length) } + if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) + { to = Pos(to.line + 1, 0) } + if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false } + + var fromIndex, fromLine, fromNode + if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) { + fromLine = lineNo(display.view[0].line) + fromNode = display.view[0].node + } else { + fromLine = lineNo(display.view[fromIndex].line) + fromNode = display.view[fromIndex - 1].node.nextSibling + } + var toIndex = findViewIndex(cm, to.line) + var toLine, toNode + if (toIndex == display.view.length - 1) { + toLine = display.viewTo - 1 + toNode = display.lineDiv.lastChild + } else { + toLine = lineNo(display.view[toIndex + 1].line) - 1 + toNode = display.view[toIndex + 1].node.previousSibling + } + + if (!fromNode) { return false } + var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine)) + var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length)) + while (newText.length > 1 && oldText.length > 1) { + if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine-- } + else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++ } + else { break } + } + + var cutFront = 0, cutEnd = 0 + var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length) + while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) + { ++cutFront } + var newBot = lst(newText), oldBot = lst(oldText) + var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), + oldBot.length - (oldText.length == 1 ? cutFront : 0)) + while (cutEnd < maxCutEnd && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) + { ++cutEnd } + // Try to move start of change to start of selection if ambiguous + if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) { + while (cutFront && cutFront > from.ch && + newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) { + cutFront-- + cutEnd++ + } + } + + newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "") + newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "") + + var chFrom = Pos(fromLine, cutFront) + var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0) + if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) { + replaceRange(cm.doc, newText, chFrom, chTo, "+input") + return true + } +}; + +ContentEditableInput.prototype.ensurePolled = function () { + this.forceCompositionEnd() +}; +ContentEditableInput.prototype.reset = function () { + this.forceCompositionEnd() +}; +ContentEditableInput.prototype.forceCompositionEnd = function () { + if (!this.composing) { return } + clearTimeout(this.readDOMTimeout) + this.composing = null + this.updateFromDOM() + this.div.blur() + this.div.focus() +}; +ContentEditableInput.prototype.readFromDOMSoon = function () { + var this$1 = this; + + if (this.readDOMTimeout != null) { return } + this.readDOMTimeout = setTimeout(function () { + this$1.readDOMTimeout = null + if (this$1.composing) { + if (this$1.composing.done) { this$1.composing = null } + else { return } + } + this$1.updateFromDOM() + }, 80) +}; + +ContentEditableInput.prototype.updateFromDOM = function () { + var this$1 = this; + + if (this.cm.isReadOnly() || !this.pollContent()) + { runInOp(this.cm, function () { return regChange(this$1.cm); }) } +}; + +ContentEditableInput.prototype.setUneditable = function (node) { + node.contentEditable = "false" +}; + +ContentEditableInput.prototype.onKeyPress = function (e) { + if (e.charCode == 0) { return } + e.preventDefault() + if (!this.cm.isReadOnly()) + { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0) } +}; + +ContentEditableInput.prototype.readOnlyChanged = function (val) { + this.div.contentEditable = String(val != "nocursor") +}; + +ContentEditableInput.prototype.onContextMenu = function () {}; +ContentEditableInput.prototype.resetPosition = function () {}; + +ContentEditableInput.prototype.needsContentAttribute = true + +function posToDOM(cm, pos) { + var view = findViewForLine(cm, pos.line) + if (!view || view.hidden) { return null } + var line = getLine(cm.doc, pos.line) + var info = mapFromLineView(view, line, pos.line) + + var order = getOrder(line, cm.doc.direction), side = "left" + if (order) { + var partPos = getBidiPartAt(order, pos.ch) + side = partPos % 2 ? "right" : "left" + } + var result = nodeAndOffsetInLineMap(info.map, pos.ch, side) + result.offset = result.collapse == "right" ? result.end : result.start + return result +} + +function isInGutter(node) { + for (var scan = node; scan; scan = scan.parentNode) + { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } } + return false +} + +function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos } + +function domTextBetween(cm, from, to, fromLine, toLine) { + var text = "", closing = false, lineSep = cm.doc.lineSeparator() + function recognizeMarker(id) { return function (marker) { return marker.id == id; } } + function close() { + if (closing) { + text += lineSep + closing = false + } + } + function addText(str) { + if (str) { + close() + text += str + } + } + function walk(node) { + if (node.nodeType == 1) { + var cmText = node.getAttribute("cm-text") + if (cmText != null) { + addText(cmText || node.textContent.replace(/\u200b/g, "")) + return + } + var markerID = node.getAttribute("cm-marker"), range + if (markerID) { + var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID)) + if (found.length && (range = found[0].find())) + { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)) } + return + } + if (node.getAttribute("contenteditable") == "false") { return } + var isBlock = /^(pre|div|p)$/i.test(node.nodeName) + if (isBlock) { close() } + for (var i = 0; i < node.childNodes.length; i++) + { walk(node.childNodes[i]) } + if (isBlock) { closing = true } + } else if (node.nodeType == 3) { + addText(node.nodeValue) + } + } + for (;;) { + walk(from) + if (from == to) { break } + from = from.nextSibling + } + return text +} + +function domToPos(cm, node, offset) { + var lineNode + if (node == cm.display.lineDiv) { + lineNode = cm.display.lineDiv.childNodes[offset] + if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) } + node = null; offset = 0 + } else { + for (lineNode = node;; lineNode = lineNode.parentNode) { + if (!lineNode || lineNode == cm.display.lineDiv) { return null } + if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break } + } + } + for (var i = 0; i < cm.display.view.length; i++) { + var lineView = cm.display.view[i] + if (lineView.node == lineNode) + { return locateNodeInLineView(lineView, node, offset) } + } +} + +function locateNodeInLineView(lineView, node, offset) { + var wrapper = lineView.text.firstChild, bad = false + if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) } + if (node == wrapper) { + bad = true + node = wrapper.childNodes[offset] + offset = 0 + if (!node) { + var line = lineView.rest ? lst(lineView.rest) : lineView.line + return badPos(Pos(lineNo(line), line.text.length), bad) + } + } + + var textNode = node.nodeType == 3 ? node : null, topNode = node + if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) { + textNode = node.firstChild + if (offset) { offset = textNode.nodeValue.length } + } + while (topNode.parentNode != wrapper) { topNode = topNode.parentNode } + var measure = lineView.measure, maps = measure.maps + + function find(textNode, topNode, offset) { + for (var i = -1; i < (maps ? maps.length : 0); i++) { + var map = i < 0 ? measure.map : maps[i] + for (var j = 0; j < map.length; j += 3) { + var curNode = map[j + 2] + if (curNode == textNode || curNode == topNode) { + var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]) + var ch = map[j] + offset + if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)] } + return Pos(line, ch) + } + } + } + } + var found = find(textNode, topNode, offset) + if (found) { return badPos(found, bad) } + + // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems + for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) { + found = find(after, after.firstChild, 0) + if (found) + { return badPos(Pos(found.line, found.ch - dist), bad) } + else + { dist += after.textContent.length } + } + for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) { + found = find(before, before.firstChild, -1) + if (found) + { return badPos(Pos(found.line, found.ch + dist$1), bad) } + else + { dist$1 += before.textContent.length } + } +} + +// TEXTAREA INPUT STYLE + +var TextareaInput = function(cm) { + this.cm = cm + // See input.poll and input.reset + this.prevInput = "" + + // Flag that indicates whether we expect input to appear real soon + // now (after some event like 'keypress' or 'input') and are + // polling intensively. + this.pollingFast = false + // Self-resetting timeout for the poller + this.polling = new Delayed() + // Tracks when input.reset has punted to just putting a short + // string into the textarea instead of the full selection. + this.inaccurateSelection = false + // Used to work around IE issue with selection being forgotten when focus moves away from textarea + this.hasSelection = false + this.composing = null +}; + +TextareaInput.prototype.init = function (display) { + var this$1 = this; + + var input = this, cm = this.cm + + // Wraps and hides input textarea + var div = this.wrapper = hiddenTextarea() + // The semihidden textarea that is focused when the editor is + // focused, and receives input. + var te = this.textarea = div.firstChild + display.wrapper.insertBefore(div, display.wrapper.firstChild) + + // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore) + if (ios) { te.style.width = "0px" } + + on(te, "input", function () { + if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null } + input.poll() + }) + + on(te, "paste", function (e) { + if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return } + + cm.state.pasteIncoming = true + input.fastPoll() + }) + + function prepareCopyCut(e) { + if (signalDOMEvent(cm, e)) { return } + if (cm.somethingSelected()) { + setLastCopied({lineWise: false, text: cm.getSelections()}) + if (input.inaccurateSelection) { + input.prevInput = "" + input.inaccurateSelection = false + te.value = lastCopied.text.join("\n") + selectInput(te) + } + } else if (!cm.options.lineWiseCopyCut) { + return + } else { + var ranges = copyableRanges(cm) + setLastCopied({lineWise: true, text: ranges.text}) + if (e.type == "cut") { + cm.setSelections(ranges.ranges, null, sel_dontScroll) + } else { + input.prevInput = "" + te.value = ranges.text.join("\n") + selectInput(te) + } + } + if (e.type == "cut") { cm.state.cutIncoming = true } + } + on(te, "cut", prepareCopyCut) + on(te, "copy", prepareCopyCut) + + on(display.scroller, "paste", function (e) { + if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return } + cm.state.pasteIncoming = true + input.focus() + }) + + // Prevent normal selection in the editor (we handle our own) + on(display.lineSpace, "selectstart", function (e) { + if (!eventInWidget(display, e)) { e_preventDefault(e) } + }) + + on(te, "compositionstart", function () { + var start = cm.getCursor("from") + if (input.composing) { input.composing.range.clear() } + input.composing = { + start: start, + range: cm.markText(start, cm.getCursor("to"), {className: "CodeMirror-composing"}) + } + }) + on(te, "compositionend", function () { + if (input.composing) { + input.poll() + input.composing.range.clear() + input.composing = null + } + }) +}; + +TextareaInput.prototype.prepareSelection = function () { + // Redraw the selection and/or cursor + var cm = this.cm, display = cm.display, doc = cm.doc + var result = prepareSelection(cm) + + // Move the hidden textarea near the cursor to prevent scrolling artifacts + if (cm.options.moveInputWithCursor) { + var headPos = cursorCoords(cm, doc.sel.primary().head, "div") + var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect() + result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, + headPos.top + lineOff.top - wrapOff.top)) + result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, + headPos.left + lineOff.left - wrapOff.left)) + } + + return result +}; + +TextareaInput.prototype.showSelection = function (drawn) { + var cm = this.cm, display = cm.display + removeChildrenAndAdd(display.cursorDiv, drawn.cursors) + removeChildrenAndAdd(display.selectionDiv, drawn.selection) + if (drawn.teTop != null) { + this.wrapper.style.top = drawn.teTop + "px" + this.wrapper.style.left = drawn.teLeft + "px" + } +}; + +// Reset the input to correspond to the selection (or to be empty, +// when not typing and nothing is selected) +TextareaInput.prototype.reset = function (typing) { + if (this.contextMenuPending) { return } + var minimal, selected, cm = this.cm, doc = cm.doc + if (cm.somethingSelected()) { + this.prevInput = "" + var range = doc.sel.primary() + minimal = hasCopyEvent && + (range.to().line - range.from().line > 100 || (selected = cm.getSelection()).length > 1000) + var content = minimal ? "-" : selected || cm.getSelection() + this.textarea.value = content + if (cm.state.focused) { selectInput(this.textarea) } + if (ie && ie_version >= 9) { this.hasSelection = content } + } else if (!typing) { + this.prevInput = this.textarea.value = "" + if (ie && ie_version >= 9) { this.hasSelection = null } + } + this.inaccurateSelection = minimal +}; + +TextareaInput.prototype.getField = function () { return this.textarea }; + +TextareaInput.prototype.supportsTouch = function () { return false }; + +TextareaInput.prototype.focus = function () { + if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt() != this.textarea)) { + try { this.textarea.focus() } + catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM + } +}; + +TextareaInput.prototype.blur = function () { this.textarea.blur() }; + +TextareaInput.prototype.resetPosition = function () { + this.wrapper.style.top = this.wrapper.style.left = 0 +}; + +TextareaInput.prototype.receivedFocus = function () { this.slowPoll() }; + +// Poll for input changes, using the normal rate of polling. This +// runs as long as the editor is focused. +TextareaInput.prototype.slowPoll = function () { + var this$1 = this; + + if (this.pollingFast) { return } + this.polling.set(this.cm.options.pollInterval, function () { + this$1.poll() + if (this$1.cm.state.focused) { this$1.slowPoll() } + }) +}; + +// When an event has just come in that is likely to add or change +// something in the input textarea, we poll faster, to ensure that +// the change appears on the screen quickly. +TextareaInput.prototype.fastPoll = function () { + var missed = false, input = this + input.pollingFast = true + function p() { + var changed = input.poll() + if (!changed && !missed) {missed = true; input.polling.set(60, p)} + else {input.pollingFast = false; input.slowPoll()} + } + input.polling.set(20, p) +}; + +// Read input from the textarea, and update the document to match. +// When something is selected, it is present in the textarea, and +// selected (unless it is huge, in which case a placeholder is +// used). When nothing is selected, the cursor sits after previously +// seen text (can be empty), which is stored in prevInput (we must +// not reset the textarea when typing, because that breaks IME). +TextareaInput.prototype.poll = function () { + var this$1 = this; + + var cm = this.cm, input = this.textarea, prevInput = this.prevInput + // Since this is called a *lot*, try to bail out as cheaply as + // possible when it is clear that nothing happened. hasSelection + // will be the case when there is a lot of text in the textarea, + // in which case reading its value would be expensive. + if (this.contextMenuPending || !cm.state.focused || + (hasSelection(input) && !prevInput && !this.composing) || + cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) + { return false } + + var text = input.value + // If nothing changed, bail. + if (text == prevInput && !cm.somethingSelected()) { return false } + // Work around nonsensical selection resetting in IE9/10, and + // inexplicable appearance of private area unicode characters on + // some key combos in Mac (#2689). + if (ie && ie_version >= 9 && this.hasSelection === text || + mac && /[\uf700-\uf7ff]/.test(text)) { + cm.display.input.reset() + return false + } + + if (cm.doc.sel == cm.display.selForContextMenu) { + var first = text.charCodeAt(0) + if (first == 0x200b && !prevInput) { prevInput = "\u200b" } + if (first == 0x21da) { this.reset(); return this.cm.execCommand("undo") } + } + // Find the part of the input that is actually new + var same = 0, l = Math.min(prevInput.length, text.length) + while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same } + + runInOp(cm, function () { + applyTextInput(cm, text.slice(same), prevInput.length - same, + null, this$1.composing ? "*compose" : null) + + // Don't leave long text in the textarea, since it makes further polling slow + if (text.length > 1000 || text.indexOf("\n") > -1) { input.value = this$1.prevInput = "" } + else { this$1.prevInput = text } + + if (this$1.composing) { + this$1.composing.range.clear() + this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor("to"), + {className: "CodeMirror-composing"}) + } + }) + return true +}; + +TextareaInput.prototype.ensurePolled = function () { + if (this.pollingFast && this.poll()) { this.pollingFast = false } +}; + +TextareaInput.prototype.onKeyPress = function () { + if (ie && ie_version >= 9) { this.hasSelection = null } + this.fastPoll() +}; + +TextareaInput.prototype.onContextMenu = function (e) { + var input = this, cm = input.cm, display = cm.display, te = input.textarea + var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop + if (!pos || presto) { return } // Opera is difficult. + + // Reset the current text selection only if the click is done outside of the selection + // and 'resetSelectionOnContextMenu' option is true. + var reset = cm.options.resetSelectionOnContextMenu + if (reset && cm.doc.sel.contains(pos) == -1) + { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll) } + + var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText + input.wrapper.style.cssText = "position: absolute" + var wrapperBox = input.wrapper.getBoundingClientRect() + te.style.cssText = "position: absolute; width: 30px; height: 30px;\n top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);" + var oldScrollY + if (webkit) { oldScrollY = window.scrollY } // Work around Chrome issue (#2712) + display.input.focus() + if (webkit) { window.scrollTo(null, oldScrollY) } + display.input.reset() + // Adds "Select all" to context menu in FF + if (!cm.somethingSelected()) { te.value = input.prevInput = " " } + input.contextMenuPending = true + display.selForContextMenu = cm.doc.sel + clearTimeout(display.detectingSelectAll) + + // Select-all will be greyed out if there's nothing to select, so + // this adds a zero-width space so that we can later check whether + // it got selected. + function prepareSelectAllHack() { + if (te.selectionStart != null) { + var selected = cm.somethingSelected() + var extval = "\u200b" + (selected ? te.value : "") + te.value = "\u21da" // Used to catch context-menu undo + te.value = extval + input.prevInput = selected ? "" : "\u200b" + te.selectionStart = 1; te.selectionEnd = extval.length + // Re-set this, in case some other handler touched the + // selection in the meantime. + display.selForContextMenu = cm.doc.sel + } + } + function rehide() { + input.contextMenuPending = false + input.wrapper.style.cssText = oldWrapperCSS + te.style.cssText = oldCSS + if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos) } + + // Try to detect the user choosing select-all + if (te.selectionStart != null) { + if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack() } + var i = 0, poll = function () { + if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && + te.selectionEnd > 0 && input.prevInput == "\u200b") { + operation(cm, selectAll)(cm) + } else if (i++ < 10) { + display.detectingSelectAll = setTimeout(poll, 500) + } else { + display.selForContextMenu = null + display.input.reset() + } + } + display.detectingSelectAll = setTimeout(poll, 200) + } + } + + if (ie && ie_version >= 9) { prepareSelectAllHack() } + if (captureRightClick) { + e_stop(e) + var mouseup = function () { + off(window, "mouseup", mouseup) + setTimeout(rehide, 20) + } + on(window, "mouseup", mouseup) + } else { + setTimeout(rehide, 50) + } +}; + +TextareaInput.prototype.readOnlyChanged = function (val) { + if (!val) { this.reset() } +}; + +TextareaInput.prototype.setUneditable = function () {}; + +TextareaInput.prototype.needsContentAttribute = false + +function fromTextArea(textarea, options) { + options = options ? copyObj(options) : {} + options.value = textarea.value + if (!options.tabindex && textarea.tabIndex) + { options.tabindex = textarea.tabIndex } + if (!options.placeholder && textarea.placeholder) + { options.placeholder = textarea.placeholder } + // Set autofocus to true if this textarea is focused, or if it has + // autofocus and no other element is focused. + if (options.autofocus == null) { + var hasFocus = activeElt() + options.autofocus = hasFocus == textarea || + textarea.getAttribute("autofocus") != null && hasFocus == document.body + } + + function save() {textarea.value = cm.getValue()} + + var realSubmit + if (textarea.form) { + on(textarea.form, "submit", save) + // Deplorable hack to make the submit method do the right thing. + if (!options.leaveSubmitMethodAlone) { + var form = textarea.form + realSubmit = form.submit + try { + var wrappedSubmit = form.submit = function () { + save() + form.submit = realSubmit + form.submit() + form.submit = wrappedSubmit + } + } catch(e) {} + } + } + + options.finishInit = function (cm) { + cm.save = save + cm.getTextArea = function () { return textarea; } + cm.toTextArea = function () { + cm.toTextArea = isNaN // Prevent this from being ran twice + save() + textarea.parentNode.removeChild(cm.getWrapperElement()) + textarea.style.display = "" + if (textarea.form) { + off(textarea.form, "submit", save) + if (typeof textarea.form.submit == "function") + { textarea.form.submit = realSubmit } + } + } + } + + textarea.style.display = "none" + var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); }, + options) + return cm +} + +function addLegacyProps(CodeMirror) { + CodeMirror.off = off + CodeMirror.on = on + CodeMirror.wheelEventPixels = wheelEventPixels + CodeMirror.Doc = Doc + CodeMirror.splitLines = splitLinesAuto + CodeMirror.countColumn = countColumn + CodeMirror.findColumn = findColumn + CodeMirror.isWordChar = isWordCharBasic + CodeMirror.Pass = Pass + CodeMirror.signal = signal + CodeMirror.Line = Line + CodeMirror.changeEnd = changeEnd + CodeMirror.scrollbarModel = scrollbarModel + CodeMirror.Pos = Pos + CodeMirror.cmpPos = cmp + CodeMirror.modes = modes + CodeMirror.mimeModes = mimeModes + CodeMirror.resolveMode = resolveMode + CodeMirror.getMode = getMode + CodeMirror.modeExtensions = modeExtensions + CodeMirror.extendMode = extendMode + CodeMirror.copyState = copyState + CodeMirror.startState = startState + CodeMirror.innerMode = innerMode + CodeMirror.commands = commands + CodeMirror.keyMap = keyMap + CodeMirror.keyName = keyName + CodeMirror.isModifierKey = isModifierKey + CodeMirror.lookupKey = lookupKey + CodeMirror.normalizeKeyMap = normalizeKeyMap + CodeMirror.StringStream = StringStream + CodeMirror.SharedTextMarker = SharedTextMarker + CodeMirror.TextMarker = TextMarker + CodeMirror.LineWidget = LineWidget + CodeMirror.e_preventDefault = e_preventDefault + CodeMirror.e_stopPropagation = e_stopPropagation + CodeMirror.e_stop = e_stop + CodeMirror.addClass = addClass + CodeMirror.contains = contains + CodeMirror.rmClass = rmClass + CodeMirror.keyNames = keyNames +} + +// EDITOR CONSTRUCTOR + +defineOptions(CodeMirror) + +addEditorMethods(CodeMirror) + +// Set up methods on CodeMirror's prototype to redirect to the editor's document. +var dontDelegate = "iter insert remove copy getEditor constructor".split(" ") +for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) + { CodeMirror.prototype[prop] = (function(method) { + return function() {return method.apply(this.doc, arguments)} + })(Doc.prototype[prop]) } } + +eventMixin(Doc) + +// INPUT HANDLING + +CodeMirror.inputStyles = {"textarea": TextareaInput, "contenteditable": ContentEditableInput} + +// MODE DEFINITION AND QUERYING + +// Extra arguments are stored as the mode's dependencies, which is +// used by (legacy) mechanisms like loadmode.js to automatically +// load a mode. (Preferred mechanism is the require/define calls.) +CodeMirror.defineMode = function(name/*, mode, …*/) { + if (!CodeMirror.defaults.mode && name != "null") { CodeMirror.defaults.mode = name } + defineMode.apply(this, arguments) +} + +CodeMirror.defineMIME = defineMIME + +// Minimal default mode. +CodeMirror.defineMode("null", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); }) +CodeMirror.defineMIME("text/plain", "null") + +// EXTENSIONS + +CodeMirror.defineExtension = function (name, func) { + CodeMirror.prototype[name] = func +} +CodeMirror.defineDocExtension = function (name, func) { + Doc.prototype[name] = func +} + +CodeMirror.fromTextArea = fromTextArea + +addLegacyProps(CodeMirror) + +CodeMirror.version = "5.25.2" + +return CodeMirror; + +})));
\ No newline at end of file diff --git a/docs/demo/third_party/codemirror/javascript.js b/docs/demo/third_party/codemirror/javascript.js new file mode 100644 index 00000000..0a46dc77 --- /dev/null +++ b/docs/demo/third_party/codemirror/javascript.js @@ -0,0 +1,847 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.defineMode("javascript", function(config, parserConfig) { + var indentUnit = config.indentUnit; + var statementIndent = parserConfig.statementIndent; + var jsonldMode = parserConfig.jsonld; + var jsonMode = parserConfig.json || jsonldMode; + var isTS = parserConfig.typescript; + var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/; + + // Tokenizer + + var keywords = function(){ + function kw(type) {return {type: type, style: "keyword"};} + var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); + var operator = kw("operator"), atom = {type: "atom", style: "atom"}; + + var jsKeywords = { + "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, + "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "void": C, "throw": C, "debugger": C, + "var": kw("var"), "const": kw("var"), "let": kw("var"), + "function": kw("function"), "catch": kw("catch"), + "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), + "in": operator, "typeof": operator, "instanceof": operator, + "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom, + "this": kw("this"), "class": kw("class"), "super": kw("atom"), + "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, + "await": C + }; + + // Extend the 'normal' keywords with the TypeScript language extensions + if (isTS) { + var type = {type: "variable", style: "type"}; + var tsKeywords = { + // object-like things + "interface": kw("class"), + "implements": C, + "namespace": C, + "module": kw("module"), + "enum": kw("module"), + + // scope modifiers + "public": kw("modifier"), + "private": kw("modifier"), + "protected": kw("modifier"), + "abstract": kw("modifier"), + "readonly": kw("modifier"), + + // types + "string": type, "number": type, "boolean": type, "any": type + }; + + for (var attr in tsKeywords) { + jsKeywords[attr] = tsKeywords[attr]; + } + } + + return jsKeywords; + }(); + + var isOperatorChar = /[+\-*&%=<>!?|~^@]/; + var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; + + function readRegexp(stream) { + var escaped = false, next, inSet = false; + while ((next = stream.next()) != null) { + if (!escaped) { + if (next == "/" && !inSet) return; + if (next == "[") inSet = true; + else if (inSet && next == "]") inSet = false; + } + escaped = !escaped && next == "\\"; + } + } + + // Used as scratch variables to communicate multiple values without + // consing up tons of objects. + var type, content; + function ret(tp, style, cont) { + type = tp; content = cont; + return style; + } + function tokenBase(stream, state) { + var ch = stream.next(); + if (ch == '"' || ch == "'") { + state.tokenize = tokenString(ch); + return state.tokenize(stream, state); + } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) { + return ret("number", "number"); + } else if (ch == "." && stream.match("..")) { + return ret("spread", "meta"); + } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) { + return ret(ch); + } else if (ch == "=" && stream.eat(">")) { + return ret("=>", "operator"); + } else if (ch == "0" && stream.eat(/x/i)) { + stream.eatWhile(/[\da-f]/i); + return ret("number", "number"); + } else if (ch == "0" && stream.eat(/o/i)) { + stream.eatWhile(/[0-7]/i); + return ret("number", "number"); + } else if (ch == "0" && stream.eat(/b/i)) { + stream.eatWhile(/[01]/i); + return ret("number", "number"); + } else if (/\d/.test(ch)) { + stream.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/); + return ret("number", "number"); + } else if (ch == "/") { + if (stream.eat("*")) { + state.tokenize = tokenComment; + return tokenComment(stream, state); + } else if (stream.eat("/")) { + stream.skipToEnd(); + return ret("comment", "comment"); + } else if (expressionAllowed(stream, state, 1)) { + readRegexp(stream); + stream.match(/^\b(([gimyu])(?![gimyu]*\2))+\b/); + return ret("regexp", "string-2"); + } else { + stream.eatWhile(isOperatorChar); + return ret("operator", "operator", stream.current()); + } + } else if (ch == "`") { + state.tokenize = tokenQuasi; + return tokenQuasi(stream, state); + } else if (ch == "#") { + stream.skipToEnd(); + return ret("error", "error"); + } else if (isOperatorChar.test(ch)) { + if (ch != ">" || !state.lexical || state.lexical.type != ">") + stream.eatWhile(isOperatorChar); + return ret("operator", "operator", stream.current()); + } else if (wordRE.test(ch)) { + stream.eatWhile(wordRE); + var word = stream.current() + if (state.lastType != ".") { + if (keywords.propertyIsEnumerable(word)) { + var kw = keywords[word] + return ret(kw.type, kw.style, word) + } + if (word == "async" && stream.match(/^\s*[\(\w]/, false)) + return ret("async", "keyword", word) + } + return ret("variable", "variable", word) + } + } + + function tokenString(quote) { + return function(stream, state) { + var escaped = false, next; + if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){ + state.tokenize = tokenBase; + return ret("jsonld-keyword", "meta"); + } + while ((next = stream.next()) != null) { + if (next == quote && !escaped) break; + escaped = !escaped && next == "\\"; + } + if (!escaped) state.tokenize = tokenBase; + return ret("string", "string"); + }; + } + + function tokenComment(stream, state) { + var maybeEnd = false, ch; + while (ch = stream.next()) { + if (ch == "/" && maybeEnd) { + state.tokenize = tokenBase; + break; + } + maybeEnd = (ch == "*"); + } + return ret("comment", "comment"); + } + + function tokenQuasi(stream, state) { + var escaped = false, next; + while ((next = stream.next()) != null) { + if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) { + state.tokenize = tokenBase; + break; + } + escaped = !escaped && next == "\\"; + } + return ret("quasi", "string-2", stream.current()); + } + + var brackets = "([{}])"; + // This is a crude lookahead trick to try and notice that we're + // parsing the argument patterns for a fat-arrow function before we + // actually hit the arrow token. It only works if the arrow is on + // the same line as the arguments and there's no strange noise + // (comments) in between. Fallback is to only notice when we hit the + // arrow, and not declare the arguments as locals for the arrow + // body. + function findFatArrow(stream, state) { + if (state.fatArrowAt) state.fatArrowAt = null; + var arrow = stream.string.indexOf("=>", stream.start); + if (arrow < 0) return; + + if (isTS) { // Try to skip TypeScript return type declarations after the arguments + var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow)) + if (m) arrow = m.index + } + + var depth = 0, sawSomething = false; + for (var pos = arrow - 1; pos >= 0; --pos) { + var ch = stream.string.charAt(pos); + var bracket = brackets.indexOf(ch); + if (bracket >= 0 && bracket < 3) { + if (!depth) { ++pos; break; } + if (--depth == 0) { if (ch == "(") sawSomething = true; break; } + } else if (bracket >= 3 && bracket < 6) { + ++depth; + } else if (wordRE.test(ch)) { + sawSomething = true; + } else if (/["'\/]/.test(ch)) { + return; + } else if (sawSomething && !depth) { + ++pos; + break; + } + } + if (sawSomething && !depth) state.fatArrowAt = pos; + } + + // Parser + + var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true}; + + function JSLexical(indented, column, type, align, prev, info) { + this.indented = indented; + this.column = column; + this.type = type; + this.prev = prev; + this.info = info; + if (align != null) this.align = align; + } + + function inScope(state, varname) { + for (var v = state.localVars; v; v = v.next) + if (v.name == varname) return true; + for (var cx = state.context; cx; cx = cx.prev) { + for (var v = cx.vars; v; v = v.next) + if (v.name == varname) return true; + } + } + + function parseJS(state, style, type, content, stream) { + var cc = state.cc; + // Communicate our context to the combinators. + // (Less wasteful than consing up a hundred closures on every call.) + cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style; + + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = true; + + while(true) { + var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement; + if (combinator(type, content)) { + while(cc.length && cc[cc.length - 1].lex) + cc.pop()(); + if (cx.marked) return cx.marked; + if (type == "variable" && inScope(state, content)) return "variable-2"; + return style; + } + } + } + + // Combinator utils + + var cx = {state: null, column: null, marked: null, cc: null}; + function pass() { + for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]); + } + function cont() { + pass.apply(null, arguments); + return true; + } + function register(varname) { + function inList(list) { + for (var v = list; v; v = v.next) + if (v.name == varname) return true; + return false; + } + var state = cx.state; + cx.marked = "def"; + if (state.context) { + if (inList(state.localVars)) return; + state.localVars = {name: varname, next: state.localVars}; + } else { + if (inList(state.globalVars)) return; + if (parserConfig.globalVars) + state.globalVars = {name: varname, next: state.globalVars}; + } + } + + // Combinators + + var defaultVars = {name: "this", next: {name: "arguments"}}; + function pushcontext() { + cx.state.context = {prev: cx.state.context, vars: cx.state.localVars}; + cx.state.localVars = defaultVars; + } + function popcontext() { + cx.state.localVars = cx.state.context.vars; + cx.state.context = cx.state.context.prev; + } + function pushlex(type, info) { + var result = function() { + var state = cx.state, indent = state.indented; + if (state.lexical.type == "stat") indent = state.lexical.indented; + else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) + indent = outer.indented; + state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info); + }; + result.lex = true; + return result; + } + function poplex() { + var state = cx.state; + if (state.lexical.prev) { + if (state.lexical.type == ")") + state.indented = state.lexical.indented; + state.lexical = state.lexical.prev; + } + } + poplex.lex = true; + + function expect(wanted) { + function exp(type) { + if (type == wanted) return cont(); + else if (wanted == ";") return pass(); + else return cont(exp); + }; + return exp; + } + + function statement(type, value) { + if (type == "var") return cont(pushlex("vardef", value.length), vardef, expect(";"), poplex); + if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); + if (type == "keyword b") return cont(pushlex("form"), statement, poplex); + if (type == "{") return cont(pushlex("}"), block, poplex); + if (type == ";") return cont(); + if (type == "if") { + if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) + cx.state.cc.pop()(); + return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse); + } + if (type == "function") return cont(functiondef); + if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); + if (type == "variable") { + if (isTS && value == "type") { + cx.marked = "keyword" + return cont(typeexpr, expect("operator"), typeexpr, expect(";")); + } if (isTS && value == "declare") { + cx.marked = "keyword" + return cont(statement) + } else { + return cont(pushlex("stat"), maybelabel); + } + } + if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), + block, poplex, poplex); + if (type == "case") return cont(expression, expect(":")); + if (type == "default") return cont(expect(":")); + if (type == "catch") return cont(pushlex("form"), pushcontext, expect("("), funarg, expect(")"), + statement, poplex, popcontext); + if (type == "class") return cont(pushlex("form"), className, poplex); + if (type == "export") return cont(pushlex("stat"), afterExport, poplex); + if (type == "import") return cont(pushlex("stat"), afterImport, poplex); + if (type == "module") return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex) + if (type == "async") return cont(statement) + if (value == "@") return cont(expression, statement) + return pass(pushlex("stat"), expression, expect(";"), poplex); + } + function expression(type) { + return expressionInner(type, false); + } + function expressionNoComma(type) { + return expressionInner(type, true); + } + function parenExpr(type) { + if (type != "(") return pass() + return cont(pushlex(")"), expression, expect(")"), poplex) + } + function expressionInner(type, noComma) { + if (cx.state.fatArrowAt == cx.stream.start) { + var body = noComma ? arrowBodyNoComma : arrowBody; + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext); + else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); + } + + var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma; + if (atomicTypes.hasOwnProperty(type)) return cont(maybeop); + if (type == "function") return cont(functiondef, maybeop); + if (type == "class") return cont(pushlex("form"), classExpression, poplex); + if (type == "keyword c" || type == "async") return cont(noComma ? maybeexpressionNoComma : maybeexpression); + if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); + if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); + if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop); + if (type == "{") return contCommasep(objprop, "}", null, maybeop); + if (type == "quasi") return pass(quasi, maybeop); + if (type == "new") return cont(maybeTarget(noComma)); + return cont(); + } + function maybeexpression(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expression); + } + function maybeexpressionNoComma(type) { + if (type.match(/[;\}\)\],]/)) return pass(); + return pass(expressionNoComma); + } + + function maybeoperatorComma(type, value) { + if (type == ",") return cont(expression); + return maybeoperatorNoComma(type, value, false); + } + function maybeoperatorNoComma(type, value, noComma) { + var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma; + var expr = noComma == false ? expression : expressionNoComma; + if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); + if (type == "operator") { + if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); + if (value == "?") return cont(expression, expect(":"), expr); + return cont(expr); + } + if (type == "quasi") { return pass(quasi, me); } + if (type == ";") return; + if (type == "(") return contCommasep(expressionNoComma, ")", "call", me); + if (type == ".") return cont(property, me); + if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); + if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) } + if (type == "regexp") { + cx.state.lastType = cx.marked = "operator" + cx.stream.backUp(cx.stream.pos - cx.stream.start - 1) + return cont(expr) + } + } + function quasi(type, value) { + if (type != "quasi") return pass(); + if (value.slice(value.length - 2) != "${") return cont(quasi); + return cont(expression, continueQuasi); + } + function continueQuasi(type) { + if (type == "}") { + cx.marked = "string-2"; + cx.state.tokenize = tokenQuasi; + return cont(quasi); + } + } + function arrowBody(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expression); + } + function arrowBodyNoComma(type) { + findFatArrow(cx.stream, cx.state); + return pass(type == "{" ? statement : expressionNoComma); + } + function maybeTarget(noComma) { + return function(type) { + if (type == ".") return cont(noComma ? targetNoComma : target); + else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma) + else return pass(noComma ? expressionNoComma : expression); + }; + } + function target(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); } + } + function targetNoComma(_, value) { + if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); } + } + function maybelabel(type) { + if (type == ":") return cont(poplex, statement); + return pass(maybeoperatorComma, expect(";"), poplex); + } + function property(type) { + if (type == "variable") {cx.marked = "property"; return cont();} + } + function objprop(type, value) { + if (type == "async") { + cx.marked = "property"; + return cont(objprop); + } else if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + if (value == "get" || value == "set") return cont(getterSetter); + var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params + if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) + cx.state.fatArrowAt = cx.stream.pos + m[0].length + return cont(afterprop); + } else if (type == "number" || type == "string") { + cx.marked = jsonldMode ? "property" : (cx.style + " property"); + return cont(afterprop); + } else if (type == "jsonld-keyword") { + return cont(afterprop); + } else if (type == "modifier") { + return cont(objprop) + } else if (type == "[") { + return cont(expression, expect("]"), afterprop); + } else if (type == "spread") { + return cont(expression, afterprop); + } else if (type == ":") { + return pass(afterprop) + } + } + function getterSetter(type) { + if (type != "variable") return pass(afterprop); + cx.marked = "property"; + return cont(functiondef); + } + function afterprop(type) { + if (type == ":") return cont(expressionNoComma); + if (type == "(") return pass(functiondef); + } + function commasep(what, end, sep) { + function proceed(type, value) { + if (sep ? sep.indexOf(type) > -1 : type == ",") { + var lex = cx.state.lexical; + if (lex.info == "call") lex.pos = (lex.pos || 0) + 1; + return cont(function(type, value) { + if (type == end || value == end) return pass() + return pass(what) + }, proceed); + } + if (type == end || value == end) return cont(); + return cont(expect(end)); + } + return function(type, value) { + if (type == end || value == end) return cont(); + return pass(what, proceed); + }; + } + function contCommasep(what, end, info) { + for (var i = 3; i < arguments.length; i++) + cx.cc.push(arguments[i]); + return cont(pushlex(end, info), commasep(what, end), poplex); + } + function block(type) { + if (type == "}") return cont(); + return pass(statement, block); + } + function maybetype(type, value) { + if (isTS) { + if (type == ":") return cont(typeexpr); + if (value == "?") return cont(maybetype); + } + } + function typeexpr(type, value) { + if (type == "variable") { + if (value == "keyof") { + cx.marked = "keyword" + return cont(typeexpr) + } else { + cx.marked = "type" + return cont(afterType) + } + } + if (type == "string" || type == "number" || type == "atom") return cont(afterType); + if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType) + if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType) + if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType) + } + function maybeReturnType(type) { + if (type == "=>") return cont(typeexpr) + } + function typeprop(type, value) { + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property" + return cont(typeprop) + } else if (value == "?") { + return cont(typeprop) + } else if (type == ":") { + return cont(typeexpr) + } else if (type == "[") { + return cont(expression, maybetype, expect("]"), typeprop) + } + } + function typearg(type) { + if (type == "variable") return cont(typearg) + else if (type == ":") return cont(typeexpr) + } + function afterType(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) + if (value == "|" || type == ".") return cont(typeexpr) + if (type == "[") return cont(expect("]"), afterType) + if (value == "extends") return cont(typeexpr) + } + function maybeTypeArgs(_, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) + } + function vardef() { + return pass(pattern, maybetype, maybeAssign, vardefCont); + } + function pattern(type, value) { + if (type == "modifier") return cont(pattern) + if (type == "variable") { register(value); return cont(); } + if (type == "spread") return cont(pattern); + if (type == "[") return contCommasep(pattern, "]"); + if (type == "{") return contCommasep(proppattern, "}"); + } + function proppattern(type, value) { + if (type == "variable" && !cx.stream.match(/^\s*:/, false)) { + register(value); + return cont(maybeAssign); + } + if (type == "variable") cx.marked = "property"; + if (type == "spread") return cont(pattern); + if (type == "}") return pass(); + return cont(expect(":"), pattern, maybeAssign); + } + function maybeAssign(_type, value) { + if (value == "=") return cont(expressionNoComma); + } + function vardefCont(type) { + if (type == ",") return cont(vardef); + } + function maybeelse(type, value) { + if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex); + } + function forspec(type) { + if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex); + } + function forspec1(type) { + if (type == "var") return cont(vardef, expect(";"), forspec2); + if (type == ";") return cont(forspec2); + if (type == "variable") return cont(formaybeinof); + return pass(expression, expect(";"), forspec2); + } + function formaybeinof(_type, value) { + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return cont(maybeoperatorComma, forspec2); + } + function forspec2(type, value) { + if (type == ";") return cont(forspec3); + if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); } + return pass(expression, expect(";"), forspec3); + } + function forspec3(type) { + if (type != ")") cont(expression); + } + function functiondef(type, value) { + if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} + if (type == "variable") {register(value); return cont(functiondef);} + if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, maybetype, statement, popcontext); + if (isTS && value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, functiondef) + } + function funarg(type, value) { + if (value == "@") cont(expression, funarg) + if (type == "spread" || type == "modifier") return cont(funarg); + return pass(pattern, maybetype, maybeAssign); + } + function classExpression(type, value) { + // Class expressions may have an optional name. + if (type == "variable") return className(type, value); + return classNameAfter(type, value); + } + function className(type, value) { + if (type == "variable") {register(value); return cont(classNameAfter);} + } + function classNameAfter(type, value) { + if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, classNameAfter) + if (value == "extends" || value == "implements" || (isTS && type == ",")) + return cont(isTS ? typeexpr : expression, classNameAfter); + if (type == "{") return cont(pushlex("}"), classBody, poplex); + } + function classBody(type, value) { + if (type == "modifier" || type == "async" || + (type == "variable" && + (value == "static" || value == "get" || value == "set") && + cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == "variable" || cx.style == "keyword") { + cx.marked = "property"; + return cont(isTS ? classfield : functiondef, classBody); + } + if (type == "[") + return cont(expression, expect("]"), isTS ? classfield : functiondef, classBody) + if (value == "*") { + cx.marked = "keyword"; + return cont(classBody); + } + if (type == ";") return cont(classBody); + if (type == "}") return cont(); + if (value == "@") return cont(expression, classBody) + } + function classfield(type, value) { + if (value == "?") return cont(classfield) + if (type == ":") return cont(typeexpr, maybeAssign) + if (value == "=") return cont(expressionNoComma) + return pass(functiondef) + } + function afterExport(type, value) { + if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); } + if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); } + if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";")); + return pass(statement); + } + function exportField(type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); } + if (type == "variable") return pass(expressionNoComma, exportField); + } + function afterImport(type) { + if (type == "string") return cont(); + return pass(importSpec, maybeMoreImports, maybeFrom); + } + function importSpec(type, value) { + if (type == "{") return contCommasep(importSpec, "}"); + if (type == "variable") register(value); + if (value == "*") cx.marked = "keyword"; + return cont(maybeAs); + } + function maybeMoreImports(type) { + if (type == ",") return cont(importSpec, maybeMoreImports) + } + function maybeAs(_type, value) { + if (value == "as") { cx.marked = "keyword"; return cont(importSpec); } + } + function maybeFrom(_type, value) { + if (value == "from") { cx.marked = "keyword"; return cont(expression); } + } + function arrayLiteral(type) { + if (type == "]") return cont(); + return pass(commasep(expressionNoComma, "]")); + } + + function isContinuedStatement(state, textAfter) { + return state.lastType == "operator" || state.lastType == "," || + isOperatorChar.test(textAfter.charAt(0)) || + /[,.]/.test(textAfter.charAt(0)); + } + + function expressionAllowed(stream, state, backUp) { + return state.tokenize == tokenBase && + /^(?:operator|sof|keyword [bc]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || + (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) + } + + // Interface + + return { + startState: function(basecolumn) { + var state = { + tokenize: tokenBase, + lastType: "sof", + cc: [], + lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false), + localVars: parserConfig.localVars, + context: parserConfig.localVars && {vars: parserConfig.localVars}, + indented: basecolumn || 0 + }; + if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") + state.globalVars = parserConfig.globalVars; + return state; + }, + + token: function(stream, state) { + if (stream.sol()) { + if (!state.lexical.hasOwnProperty("align")) + state.lexical.align = false; + state.indented = stream.indentation(); + findFatArrow(stream, state); + } + if (state.tokenize != tokenComment && stream.eatSpace()) return null; + var style = state.tokenize(stream, state); + if (type == "comment") return style; + state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type; + return parseJS(state, style, type, content, stream); + }, + + indent: function(state, textAfter) { + if (state.tokenize == tokenComment) return CodeMirror.Pass; + if (state.tokenize != tokenBase) return 0; + var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top + // Kludge to prevent 'maybelse' from blocking lexical scope pops + if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) { + var c = state.cc[i]; + if (c == poplex) lexical = lexical.prev; + else if (c != maybeelse) break; + } + while ((lexical.type == "stat" || lexical.type == "form") && + (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) && + (top == maybeoperatorComma || top == maybeoperatorNoComma) && + !/^[,\.=+\-*:?[\(]/.test(textAfter)))) + lexical = lexical.prev; + if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") + lexical = lexical.prev; + var type = lexical.type, closing = firstChar == type; + + if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info + 1 : 0); + else if (type == "form" && firstChar == "{") return lexical.indented; + else if (type == "form") return lexical.indented + indentUnit; + else if (type == "stat") + return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); + else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) + return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit); + else if (lexical.align) return lexical.column + (closing ? 0 : 1); + else return lexical.indented + (closing ? 0 : indentUnit); + }, + + electricInput: /^\s*(?:case .*?:|default:|\{|\})$/, + blockCommentStart: jsonMode ? null : "/*", + blockCommentEnd: jsonMode ? null : "*/", + lineComment: jsonMode ? null : "//", + fold: "brace", + closeBrackets: "()[]{}''\"\"``", + + helperType: jsonMode ? "json" : "javascript", + jsonldMode: jsonldMode, + jsonMode: jsonMode, + + expressionAllowed: expressionAllowed, + + skipExpression: function(state) { + var top = state.cc[state.cc.length - 1] + if (top == expression || top == expressionNoComma) state.cc.pop() + } + }; +}); + +CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/); + +CodeMirror.defineMIME("text/javascript", "javascript"); +CodeMirror.defineMIME("text/ecmascript", "javascript"); +CodeMirror.defineMIME("application/javascript", "javascript"); +CodeMirror.defineMIME("application/x-javascript", "javascript"); +CodeMirror.defineMIME("application/ecmascript", "javascript"); +CodeMirror.defineMIME("application/json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true}); +CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true}); +CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true }); +CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true }); + +}); diff --git a/docs/demo/third_party/codemirror/simple-mode.js b/docs/demo/third_party/codemirror/simple-mode.js new file mode 100644 index 00000000..df663365 --- /dev/null +++ b/docs/demo/third_party/codemirror/simple-mode.js @@ -0,0 +1,213 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: http://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { + "use strict"; + + CodeMirror.defineSimpleMode = function(name, states) { + CodeMirror.defineMode(name, function(config) { + return CodeMirror.simpleMode(config, states); + }); + }; + + CodeMirror.simpleMode = function(config, states) { + ensureState(states, "start"); + var states_ = {}, meta = states.meta || {}, hasIndentation = false; + for (var state in states) if (state != meta && states.hasOwnProperty(state)) { + var list = states_[state] = [], orig = states[state]; + for (var i = 0; i < orig.length; i++) { + var data = orig[i]; + list.push(new Rule(data, states)); + if (data.indent || data.dedent) hasIndentation = true; + } + } + var mode = { + startState: function() { + return {state: "start", pending: null, + local: null, localState: null, + indent: hasIndentation ? [] : null}; + }, + copyState: function(state) { + var s = {state: state.state, pending: state.pending, + local: state.local, localState: null, + indent: state.indent && state.indent.slice(0)}; + if (state.localState) + s.localState = CodeMirror.copyState(state.local.mode, state.localState); + if (state.stack) + s.stack = state.stack.slice(0); + for (var pers = state.persistentStates; pers; pers = pers.next) + s.persistentStates = {mode: pers.mode, + spec: pers.spec, + state: pers.state == state.localState ? s.localState : CodeMirror.copyState(pers.mode, pers.state), + next: s.persistentStates}; + return s; + }, + token: tokenFunction(states_, config), + innerMode: function(state) { return state.local && {mode: state.local.mode, state: state.localState}; }, + indent: indentFunction(states_, meta) + }; + if (meta) for (var prop in meta) if (meta.hasOwnProperty(prop)) + mode[prop] = meta[prop]; + return mode; + }; + + function ensureState(states, name) { + if (!states.hasOwnProperty(name)) + throw new Error("Undefined state " + name + " in simple mode"); + } + + function toRegex(val, caret) { + if (!val) return /(?:)/; + var flags = ""; + if (val instanceof RegExp) { + if (val.ignoreCase) flags = "i"; + val = val.source; + } else { + val = String(val); + } + return new RegExp((caret === false ? "" : "^") + "(?:" + val + ")", flags); + } + + function asToken(val) { + if (!val) return null; + if (typeof val == "string") return val.replace(/\./g, " "); + var result = []; + for (var i = 0; i < val.length; i++) + result.push(val[i] && val[i].replace(/\./g, " ")); + return result; + } + + function Rule(data, states) { + if (data.next || data.push) ensureState(states, data.next || data.push); + this.regex = toRegex(data.regex); + this.token = asToken(data.token); + this.data = data; + } + + function tokenFunction(states, config) { + return function(stream, state) { + if (state.pending) { + var pend = state.pending.shift(); + if (state.pending.length == 0) state.pending = null; + stream.pos += pend.text.length; + return pend.token; + } + + if (state.local) { + if (state.local.end && stream.match(state.local.end)) { + var tok = state.local.endToken || null; + state.local = state.localState = null; + return tok; + } else { + var tok = state.local.mode.token(stream, state.localState), m; + if (state.local.endScan && (m = state.local.endScan.exec(stream.current()))) + stream.pos = stream.start + m.index; + return tok; + } + } + + var curState = states[state.state]; + for (var i = 0; i < curState.length; i++) { + var rule = curState[i]; + var matches = (!rule.data.sol || stream.sol()) && stream.match(rule.regex); + if (matches) { + if (rule.data.next) { + state.state = rule.data.next; + } else if (rule.data.push) { + (state.stack || (state.stack = [])).push(state.state); + state.state = rule.data.push; + } else if (rule.data.pop && state.stack && state.stack.length) { + state.state = state.stack.pop(); + } + + if (rule.data.mode) + enterLocalMode(config, state, rule.data.mode, rule.token); + if (rule.data.indent) + state.indent.push(stream.indentation() + config.indentUnit); + if (rule.data.dedent) + state.indent.pop(); + if (matches.length > 2) { + state.pending = []; + for (var j = 2; j < matches.length; j++) + if (matches[j]) + state.pending.push({text: matches[j], token: rule.token[j - 1]}); + stream.backUp(matches[0].length - (matches[1] ? matches[1].length : 0)); + return rule.token[0]; + } else if (rule.token && rule.token.join) { + return rule.token[0]; + } else { + return rule.token; + } + } + } + stream.next(); + return null; + }; + } + + function cmp(a, b) { + if (a === b) return true; + if (!a || typeof a != "object" || !b || typeof b != "object") return false; + var props = 0; + for (var prop in a) if (a.hasOwnProperty(prop)) { + if (!b.hasOwnProperty(prop) || !cmp(a[prop], b[prop])) return false; + props++; + } + for (var prop in b) if (b.hasOwnProperty(prop)) props--; + return props == 0; + } + + function enterLocalMode(config, state, spec, token) { + var pers; + if (spec.persistent) for (var p = state.persistentStates; p && !pers; p = p.next) + if (spec.spec ? cmp(spec.spec, p.spec) : spec.mode == p.mode) pers = p; + var mode = pers ? pers.mode : spec.mode || CodeMirror.getMode(config, spec.spec); + var lState = pers ? pers.state : CodeMirror.startState(mode); + if (spec.persistent && !pers) + state.persistentStates = {mode: mode, spec: spec.spec, state: lState, next: state.persistentStates}; + + state.localState = lState; + state.local = {mode: mode, + end: spec.end && toRegex(spec.end), + endScan: spec.end && spec.forceEnd !== false && toRegex(spec.end, false), + endToken: token && token.join ? token[token.length - 1] : token}; + } + + function indexOf(val, arr) { + for (var i = 0; i < arr.length; i++) if (arr[i] === val) return true; + } + + function indentFunction(states, meta) { + return function(state, textAfter, line) { + if (state.local && state.local.mode.indent) + return state.local.mode.indent(state.localState, textAfter, line); + if (state.indent == null || state.local || meta.dontIndentStates && indexOf(state.state, meta.dontIndentStates) > -1) + return CodeMirror.Pass; + + var pos = state.indent.length - 1, rules = states[state.state]; + scan: for (;;) { + for (var i = 0; i < rules.length; i++) { + var rule = rules[i]; + if (rule.data.dedent && rule.data.dedentIfLineStart !== false) { + var m = rule.regex.exec(textAfter); + if (m && m[0]) { + pos--; + if (rule.next || rule.push) rules = states[rule.next || rule.push]; + textAfter = textAfter.slice(m[0].length); + continue scan; + } + } + } + break; + } + return pos < 0 ? 0 : state.indent[pos]; + }; + } +}); diff --git a/docs/demo/third_party/split/horizontal.png b/docs/demo/third_party/split/horizontal.png Binary files differnew file mode 100644 index 00000000..cbe7da77 --- /dev/null +++ b/docs/demo/third_party/split/horizontal.png diff --git a/docs/demo/third_party/split/split.min.js b/docs/demo/third_party/split/split.min.js new file mode 100644 index 00000000..022f808d --- /dev/null +++ b/docs/demo/third_party/split/split.min.js @@ -0,0 +1,5 @@ +/*! Split.js - v1.3.5 + * Copyright (c) 2017 Nathan Cahill + * MIT https://github.com/nathancahill/Split.js/blob/master/LICENSE.txt + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}}); diff --git a/docs/demo/third_party/split/vertical.png b/docs/demo/third_party/split/vertical.png Binary files differnew file mode 100644 index 00000000..0ac8fa1e --- /dev/null +++ b/docs/demo/third_party/split/vertical.png diff --git a/docs/demo/wasm2wat/demo.js b/docs/demo/wasm2wat/demo.js new file mode 100644 index 00000000..fe14406b --- /dev/null +++ b/docs/demo/wasm2wat/demo.js @@ -0,0 +1,109 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var editorEl = document.querySelector('.editor'); +var uploadEl = document.getElementById('upload'); +var selectEl = document.getElementById('select'); +var uploadInputEl = document.getElementById('uploadInput'); +var generateNamesEl = document.getElementById('generateNames'); +var foldExprsEl = document.getElementById('foldExprs'); +var inlineExportEl = document.getElementById('inlineExport'); +var readDebugNamesEl = document.getElementById('readDebugNames'); + +var options = {mode: 'wast', lineNumbers: true}; +var editor = CodeMirror.fromTextArea(editorEl, options); + +var fileBuffer = null; + +function compile(contents) { + if (!contents) { + return; + } + + var readDebugNames = readDebugNamesEl.checked; + var generateNames = generateNamesEl.checked; + var foldExprs = foldExprsEl.checked; + var inlineExport = inlineExportEl.checked; + + WabtModule().then(function(wabt) { + try { + var module = wabt.readWasm(contents, {readDebugNames: readDebugNames}); + if (generateNames) { + module.generateNames(); + module.applyNames(); + } + var result = + module.toText({foldExprs: foldExprs, inlineExport: inlineExport}); + editor.setValue(result); + } catch (e) { + editor.setValue(e.toString()); + } finally { + if (module) module.destroy(); + } + }); +} + +function onUploadClicked(e) { + uploadInput.value = ''; + // See https://developer.mozilla.com/en-US/docs/Web/API/MouseEvent + var event = new MouseEvent('click', { + view: window, + bubbles: true, + cancelable: true, + }); + uploadInput.dispatchEvent(event); +} + +function onUploadedFile(e) { + var file = e.target.files[0]; + var reader = new FileReader(); + reader.onload = function(e) { + fileBuffer = new Uint8Array(e.target.result); + compile(fileBuffer); + }; + reader.readAsArrayBuffer(file); +} + +function recompileIfChanged(el) { + el.addEventListener('change', function() { compile(fileBuffer); }); +} + +function setExample(index) { + var contents = examples[index].contents; + fileBuffer = contents; + compile(contents); +} + +function onSelectChanged(e) { + setExample(this.selectedIndex); +} + +uploadEl.addEventListener('click', onUploadClicked); +uploadInputEl.addEventListener('change', onUploadedFile); +recompileIfChanged(generateNamesEl); +recompileIfChanged(foldExprsEl); +recompileIfChanged(inlineExportEl); +recompileIfChanged(readDebugNamesEl); +selectEl.addEventListener('change', onSelectChanged); + +for (var i = 0; i < examples.length; ++i) { + var example = examples[i]; + var option = document.createElement('option'); + option.textContent = example.name; + selectEl.appendChild(option); +} +selectEl.selectedIndex = 0; +setExample(selectEl.selectedIndex); diff --git a/docs/demo/wasm2wat/examples.js b/docs/demo/wasm2wat/examples.js new file mode 100644 index 00000000..11e2caf3 --- /dev/null +++ b/docs/demo/wasm2wat/examples.js @@ -0,0 +1,55 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var examples = [ + { + name: 'simple', + contents: new Uint8Array([ + 0, 97, 115, 109, 1, 0, 0, 0, 1, 7, 1, 96, 2, 127, 127, + 1, 127, 3, 2, 1, 0, 7, 10, 1, 6, 97, 100, 100, 84, 119, + 111, 0, 0, 10, 9, 1, 7, 0, 32, 0, 32, 1, 106, 11, 0, + 25, 4, 110, 97, 109, 101, 1, 9, 1, 0, 6, 97, 100, 100, 84, + 119, 111, 2, 7, 1, 0, 2, 0, 0, 1, 0 + ]), + }, + + { + name: 'factorial', + contents: new Uint8Array([ + 0, 97, 115, 109, 1, 0, 0, 0, 1, 6, 1, 96, 1, 126, 1, 126, + 3, 2, 1, 0, 7, 7, 1, 3, 102, 97, 99, 0, 0, 10, 25, 1, + 23, 0, 32, 0, 66, 1, 83, 4, 126, 66, 1, 5, 32, 0, 32, 0, + 66, 1, 125, 16, 0, 126, 11, 11, 0, 20, 4, 110, 97, 109, 101, 1, + 6, 1, 0, 3, 102, 97, 99, 2, 5, 1, 0, 1, 0, 0 + ]), + }, + + { + name: 'stuff', + contents: new Uint8Array([ + 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 3, 96, 1, 125, + 0, 96, 1, 127, 1, 127, 96, 0, 0, 2, 11, 1, 3, 102, + 111, 111, 3, 98, 97, 114, 0, 0, 3, 3, 2, 2, 0, 4, + 5, 1, 112, 1, 0, 1, 5, 4, 1, 1, 1, 1, 7, 9, + 1, 5, 102, 117, 110, 99, 49, 0, 1, 8, 1, 1, 10, 10, + 2, 2, 0, 11, 5, 0, 65, 42, 26, 11, 11, 8, 1, 0, + 65, 0, 11, 2, 104, 105, 0, 44, 4, 110, 97, 109, 101, 1, + 24, 3, 0, 7, 105, 109, 112, 111, 114, 116, 48, 1, 5, 102, + 117, 110, 99, 48, 2, 5, 102, 117, 110, 99, 49, 2, 11, 3, + 0, 1, 0, 0, 1, 0, 2, 1, 0, 0 + ]), + }, +]; diff --git a/docs/demo/wasm2wat/index.html b/docs/demo/wasm2wat/index.html new file mode 100644 index 00000000..11b06372 --- /dev/null +++ b/docs/demo/wasm2wat/index.html @@ -0,0 +1,73 @@ +<!-- + Copyright 2017 WebAssembly Community Group participants + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> + <title>wasm2wat demo</title> + <link href="../third_party/codemirror/codemirror.css" rel="stylesheet"> + <link href="../custom.css" rel="stylesheet"> +</head> +<body> + <header> + <h1>wasm2wat demo</h1> + <p>WebAssembly has a + <a href="https://webassembly.github.io/spec/core/text/">text format</a> + and a + <a href="https://webassembly.github.io/spec/core/binary/">binary format</a>. + This demo converts from the binary format to the text format. + </p> + <p> + Upload a WebAssembly binary file, and the text format will be displayed. + </p> + <div> + + <p> + </p> + </div> + </header> + <main> + <div class="toolbar"> + <input type="checkbox" id="generateNames" checked> + <label for="generateNames">Generate Names</label> + + <input type="checkbox" id="foldExprs" checked> + <label for="foldExprs">Fold Expressions</label> + + <input type="checkbox" id="inlineExport" checked> + <label for="inlineExport">Inline Export</label> + + <input type="checkbox" id="readDebugNames" checked> + <label for="readDebugNames">Read Debug Names</label> + <div class="right"> + <input type="file" id="uploadInput" class="hidden"></a> + <label>example:</label> + <select id="select" class="form-select"></select> + <button class="btn" type="button" id="upload">Upload</button> + </div> + </div> + <textarea class="editor" autofocus autocomplete="off" autocorrect="off" + autocapitalize="off" spellcheck="false" hidden></textarea> + </main> + <script src="../third_party/codemirror/codemirror.js"></script> + <script src="../third_party/codemirror/simple-mode.js"></script> + <script src="../wast-mode.js"></script> + <script src="../libwabt.js"></script> + <script src="examples.js"></script> + <script src="demo.js"></script> +</body> +</html> diff --git a/docs/demo/wast-mode.js b/docs/demo/wast-mode.js new file mode 100644 index 00000000..9c882922 --- /dev/null +++ b/docs/demo/wast-mode.js @@ -0,0 +1,37 @@ +/* + * Copyright 2017 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var mode = CodeMirror.defineSimpleMode('wast', { + start: [ + {regex: /[+\-]?(?:nan(?::0x[0-9a-fA-F]+)?|infinity|inf|0x[0-9a-fA-F]+\.?[0-9a-fA-F]*p[+\/-]?\d+|\d+(?:\.\d*)?[eE][+\-]?\d*|\d+\.\d*|0x[0-9a-fA-F]+|\d+)/, token: "number"}, + {regex: /anyfunc|mut|nop|block|if|then|else|loop|br|br_if|br_table|call|call_indirect|drop|end|return|get_local|set_local|tee_local|get_global|set_global|i32\.load|i64\.load|f32\.load|f64\.load|i32\.store|i64\.store|f32\.store|f64\.store|i32\.load8_s|i64\.load8_s|i32\.load8_u|i64\.load8_u|i32\.load16_s|i64\.load16_s|i32\.load16_u|i64\.load16_u|i64\.load32_s|i64\.load32_u|i32\.store8|i64\.store8|i32\.store16|i64\.store16|i32\.const|i64\.const|f32\.const|f64\.const|i32\.eqz|i64\.eqz|i32\.clz|i64\.clz|i32\.ctz|i64\.ctz|i32\.popcnt|i64\.popcnt|f32\.neg|f64\.neg|f32\.abs|f64\.abs|f32\.sqrt|f64\.sqrt|f32\.ceil|f64\.ceil|f32\.floor|f64\.floor|f32\.trunc|f64\.trunc|f32\.nearest|f64\.nearest|i32\.add|i64\.add|i32\.sub|i64\.sub|i32\.mul|i64\.mul|i32\.div_s|i64\.div_s|i32\.div_u|i64\.div_u|i32\.rem_s|i64\.rem_s|i32\.rem_u|i64\.rem_u|i32\.and|i64\.and|i32\.or|i64\.or|i32\.xor|i64\.xor|i32\.shl|i64\.shl|i32\.shr_s|i64\.shr_s|i32\.shr_u|i64\.shr_u|i32\.rotl|i64\.rotl|i32\.rotr|i64\.rotr|f32\.add|f64\.add|f32\.sub|f64\.sub|f32\.mul|f64\.mul|f32\.div|f64\.div|f32\.min|f64\.min|f32\.max|f64\.max|f32\.copysign|f64\.copysign|i32\.eq|i64\.eq|i32\.ne|i64\.ne|i32\.lt_s|i64\.lt_s|i32\.lt_u|i64\.lt_u|i32\.le_s|i64\.le_s|i32\.le_u|i64\.le_u|i32\.gt_s|i64\.gt_s|i32\.gt_u|i64\.gt_u|i32\.ge_s|i64\.ge_s|i32\.ge_u|i64\.ge_u|f32\.eq|f64\.eq|f32\.ne|f64\.ne|f32\.lt|f64\.lt|f32\.le|f64\.le|f32\.gt|f64\.gt|f32\.ge|f64\.ge|i64\.extend_s\/i32|i64\.extend_u\/i32|i32\.wrap\/i64|i32\.trunc_s\/f32|i64\.trunc_s\/f32|i32\.trunc_s\/f64|i64\.trunc_s\/f64|i32\.trunc_u\/f32|i64\.trunc_u\/f32|i32\.trunc_u\/f64|i64\.trunc_u\/f64|f32\.convert_s\/i32|f64\.convert_s\/i32|f32\.convert_s\/i64|f64\.convert_s\/i64|f32\.convert_u\/i32|f64\.convert_u\/i32|f32\.convert_u\/i64|f64\.convert_u\/i64|f64\.promote\/f32|f32\.demote\/f64|f32\.reinterpret\/i32|i32\.reinterpret\/f32|f64\.reinterpret\/i64|i64\.reinterpret\/f64|select|unreachable|current_memory|memory.size|grow_memory|memory.grow|type|func|param|result|local|global|module|table|memory|start|elem|data|offset|import|export|i32|i64|f32|f64/, token: "keyword"}, + {regex: /\$([a-zA-Z0-9_`\+\-\*\/\\\^~=<>!\?@#$%&|:\.]+)/, token: "variable-2"}, + {regex: /"(?:[^"\\\x00-\x1f\x7f]|\\[nt\\'"]|\\[0-9a-fA-F][0-9a-fA-F])*"/, token: "string"}, + {regex: /\(;.*?/, token: "comment", next: "comment"}, + {regex: /;;.*$/, token: "comment"}, + {regex: /\(/, indent: true}, + {regex: /\)/, dedent: true}, + ], + + comment: [ + {regex: /.*?;\)/, token: "comment", next: "start"}, + {regex: /.*/, token: "comment"}, + ], + + meta: { + dontIndentStates: ['comment'], + }, +}); diff --git a/docs/demo/wat2wasm/demo.js b/docs/demo/wat2wasm/demo.js new file mode 100644 index 00000000..8c0729f4 --- /dev/null +++ b/docs/demo/wat2wasm/demo.js @@ -0,0 +1,180 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +Split(["#top-left", "#top-right"]); +Split(["#bottom-left", "#bottom-right"]); + +Split(["#top-row", "#bottom-row"], { + direction: 'vertical' +}); + +var features = {}; + +WabtModule().then(function(wabt) { + +var FEATURES = [ + 'exceptions', + 'mutable_globals', + 'sat_float_to_int', + 'sign_extension', + 'simd', + 'threads', + 'multi_value', + 'tail_call', + 'bulk_memory', + 'reference_types', +]; + +var kCompileMinMS = 100; + +var outputEl = document.getElementById('output'); +var jsLogEl = document.getElementById('js_log'); +var selectEl = document.getElementById('select'); +var downloadEl = document.getElementById('download'); +var downloadLink = document.getElementById('downloadLink'); +var binaryBuffer = null; +var binaryBlobUrl = null; + +for (var feature of FEATURES) { + var featureEl = document.getElementById(feature); + features[feature] = featureEl.checked; + featureEl.addEventListener('change', event => { + var feature = event.target.id; + features[feature] = event.target.checked; + onWatChange(); + }); +} + +var wasmInstance = null; + +var wrappedConsole = Object.create(console); + +wrappedConsole.log = (...args) => { + let line = args.map(String).join('') + '\n'; + jsLogEl.textContent += line; + console.log(...args); +} + +var watEditor = CodeMirror((elt) => { + document.getElementById('top-left').appendChild(elt); +}, { + mode: 'wast', + lineNumbers: true, +}); + +var jsEditor = CodeMirror((elt) => { + document.getElementById('bottom-left').appendChild(elt); +}, { + mode: 'javascript', + lineNumbers: true, +}); + +function debounce(f, wait) { + var lastTime = 0; + var timeoutId = -1; + var wrapped = function() { + var time = +new Date(); + if (time - lastTime < wait) { + if (timeoutId == -1) + timeoutId = setTimeout(wrapped, (lastTime + wait) - time); + return; + } + if (timeoutId != -1) + clearTimeout(timeoutId); + timeoutId = -1; + lastTime = time; + f.apply(null, arguments); + }; + return wrapped; +} + +function compile() { + outputEl.textContent = ''; + var binaryOutput; + try { + var module = wabt.parseWat('test.wast', watEditor.getValue(), features); + module.resolveNames(); + module.validate(features); + var binaryOutput = module.toBinary({log: true, write_debug_names:true}); + outputEl.textContent = binaryOutput.log; + binaryBuffer = binaryOutput.buffer; + var blob = new Blob([binaryOutput.buffer]); + if (binaryBlobUrl) { + URL.revokeObjectURL(binaryBlobUrl); + } + binaryBlobUrl = URL.createObjectURL(blob); + downloadLink.setAttribute('href', binaryBlobUrl); + downloadEl.classList.remove('disabled'); + } catch (e) { + outputEl.textContent += e.toString(); + downloadEl.classList.add('disabled'); + } finally { + if (module) module.destroy(); + } +} + +function run() { + jsLogEl.textContent = ''; + if (binaryBuffer === null) return; + try { + let wasm = new WebAssembly.Module(binaryBuffer); + let js = jsEditor.getValue(); + let fn = new Function('wasmModule', 'console', js + '//# sourceURL=demo.js'); + fn(wasm, wrappedConsole); + } catch (e) { + jsLogEl.textContent += String(e); + } +} + +var onWatChange = debounce(compile, kCompileMinMS); +var onJsChange = debounce(run, kCompileMinMS); + +function setExample(index) { + var example = examples[index]; + watEditor.setValue(example.contents); + onWatChange(); + jsEditor.setValue(example.js); + onJsChange(); +} + +function onSelectChanged(e) { + setExample(this.selectedIndex); +} + +function onDownloadClicked(e) { + // See https://developer.mozilla.com/en-US/docs/Web/API/MouseEvent + var event = new MouseEvent('click', { + view: window, + bubbles: true, + cancelable: true, + }); + downloadLink.dispatchEvent(event); +} + +watEditor.on('change', onWatChange); +jsEditor.on('change', onJsChange); +selectEl.addEventListener('change', onSelectChanged); +downloadEl.addEventListener('click', onDownloadClicked); + +for (var i = 0; i < examples.length; ++i) { + var example = examples[i]; + var option = document.createElement('option'); + option.textContent = example.name; + selectEl.appendChild(option); +} +selectEl.selectedIndex = 1; +setExample(selectEl.selectedIndex); + +}); diff --git a/docs/demo/wat2wasm/examples.js b/docs/demo/wat2wasm/examples.js new file mode 100644 index 00000000..02fe3116 --- /dev/null +++ b/docs/demo/wat2wasm/examples.js @@ -0,0 +1,183 @@ +/* + * Copyright 2016 WebAssembly Community Group participants + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var examples = [ + { + name: 'empty', + contents: '(module)', + js: '', + }, + + { + name: 'simple', + contents: +`(module + (func (export "addTwo") (param i32 i32) (result i32) + local.get 0 + local.get 1 + i32.add)) +`, + js: +`const wasmInstance = + new WebAssembly.Instance(wasmModule, {}); +const { addTwo } = wasmInstance.exports; +for (let i = 0; i < 10; i++) { + console.log(addTwo(i, i)); +} +`, + }, + + { + name: 'factorial', + contents: +`(module + (func $fac (export "fac") (param f64) (result f64) + local.get 0 + f64.const 1 + f64.lt + if (result f64) + f64.const 1 + else + local.get 0 + local.get 0 + f64.const 1 + f64.sub + call $fac + f64.mul + end)) +`, + js: `const wasmInstance = + new WebAssembly.Instance(wasmModule, {}); +const { fac } = wasmInstance.exports; +for (let i = 1; i <= 15; i++) { + console.log(fac(i)); +} +`, + }, + + { + name: 'stuff', + contents: +`(module + (import "foo" "bar" (func (param f32))) + (memory (data "hi")) + (type (func (param i32) (result i32))) + (start 1) + (table 0 1 anyfunc) + (func) + (func (type 1) + i32.const 42 + drop) + (export "e" (func 1))) +`, + js: `const wasmInstance = new WebAssembly.Instance(wasmModule, { + foo: { + bar() {} + }, +}); +`, + }, + + { + name: 'mutable globals', + contents: +`(module + (import "env" "g" (global (mut i32))) + (func (export "f") + i32.const 100 + global.set 0)) +`, + js: +` + const g = new WebAssembly.Global({value: 'i32', mutable: true}); + const wasmInstance = new WebAssembly.Instance(wasmModule, {env: {g}}); + console.log('before: ' + g.value); + wasmInstance.exports.f(); + console.log('after: ' + g.value); +` + }, + + { + name: "saturating float-to-int", + contents: +`(module + (func (export "f") (param f32) (result i32) + local.get 0 + i32.trunc_sat_f32_s))`, + js: +`const wasmInstance = new WebAssembly.Instance(wasmModule); +const {f} = wasmInstance.exports; +console.log(f(Infinity));` + }, + + { + name: "sign extension", + contents: +`(module + (func (export "f") (param i32) (result i32) + local.get 0 + i32.extend8_s)) +`, + js: +`const wasmInstance = new WebAssembly.Instance(wasmModule); +const {f} = wasmInstance.exports; +console.log(f(0)); +console.log(f(127)); +console.log(f(128)); +console.log(f(255));` + }, + + { + name: "multi value", + contents: +`(module + (func $swap (param i32 i32) (result i32 i32) + local.get 1 + local.get 0) + + (func (export "reverseSub") (param i32 i32) (result i32) + local.get 0 + local.get 1 + call $swap + i32.sub)) +`, + js: +`const wasmInstance = new WebAssembly.Instance(wasmModule); +const {reverseSub} = wasmInstance.exports; +console.log(reverseSub(10, 3));` + }, + + { + name: "bulk memory", + contents: +`(module + (memory (export "mem") 1) + (func (export "fill") (param i32 i32 i32) + local.get 0 + local.get 1 + local.get 2 + memory.fill)) +`, + js: +`const wasmInstance = new WebAssembly.Instance(wasmModule); +const {fill, mem} = wasmInstance.exports; +fill(0, 13, 5); +fill(10, 77, 7); +fill(20, 255, 1000); +console.log(new Uint8Array(mem.buffer, 0, 50)); +` + } +]; diff --git a/docs/demo/wat2wasm/index.html b/docs/demo/wat2wasm/index.html new file mode 100644 index 00000000..7cfb854a --- /dev/null +++ b/docs/demo/wat2wasm/index.html @@ -0,0 +1,94 @@ +<!-- + Copyright 2016 WebAssembly Community Group participants + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes"> + <title>wat2wasm demo</title> + <link href="../third_party/codemirror/codemirror.css" rel="stylesheet"> + <link href="../custom.css" rel="stylesheet"> +</head> +<body> + <header> + <h1>wat2wasm demo</h1> + <p>WebAssembly has a + <a href="https://webassembly.github.io/spec/core/text/index.html">text format</a> + and a + <a href="https://webassembly.github.io/spec/core/binary/index.html">binary format</a>. + This demo converts from the text format to the binary format. + </p> + <p> + Enter WebAssembly text in the textarea on the left. The right side will + either show an error, or will show a log with a description of the + generated binary file. + </p> + <div>Enabled features:</div> + <div> + <input type="checkbox" id="exceptions"><label for="exceptions">exceptions</label> + <input type="checkbox" id="mutable_globals" checked><label for="mutable_globals">mutable globals</label> + <input type="checkbox" id="sat_float_to_int"><label for="sat_float_to_int">saturating float to int</label> + <input type="checkbox" id="sign_extension"><label for="sign_extension">sign extension</label> + </div> + <div> + <input type="checkbox" id="simd"><label for="simd">simd</label> + <input type="checkbox" id="threads"><label for="threads">threads</label> + <input type="checkbox" id="multi_value"><label for="multi_value">multi value</label> + <input type="checkbox" id="tail_call"><label for="tail_call">tail call</label> + <input type="checkbox" id="bulk_memory"><label for="bulk_memory">bulk memory</label> + <input type="checkbox" id="reference_types"><label for="reference_types">reference types</label> + </div> + </header> + <main> + <div id="split-grid" class="split-grid"> + <div id="top-row" class="split-vertical"> + <div id="top-left" class="split split-horizontal"> + <div class="toolbar"> + WAT + <div class="right"> + <label>example:</label> + <select id="select" class="form-select"></select> + <button class="btn disabled" type="button" id="download">Download</button> + <a id="downloadLink" download="test.wasm" class="hidden"></a> + </div> + </div> + </div> + <div id="top-right" class="split split-horizontal"> + <pre id="output" class="output"></pre> + <div class="toolbar">BUILD LOG</div> + </div> + </div> + <div id="bottom-row" class="split-vertical"> + <div id="bottom-left" class="split split-horizontal"> + <div class="toolbar">JS</div> + </div> + <div id="bottom-right" class="split split-horizontal"> + <pre id="js_log" class="output"></pre> + <div class="toolbar">JS LOG</div> + </div> + </div> + </div> + </main> + <script src="../third_party/split/split.min.js"></script> + <script src="../third_party/codemirror/codemirror.js"></script> + <script src="../third_party/codemirror/simple-mode.js"></script> + <script src="../third_party/codemirror/javascript.js"></script> + <script src="../wast-mode.js"></script> + <script src="../libwabt.js"></script> + <script src="examples.js"></script> + <script src="demo.js"></script> +</body> +</html> |